diff --git a/.gitignore b/.gitignore index fac2b685d8..c473190e8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,24 @@ *~ -lammps.pdf *.o *.so *.cu_o *.ptx *_ptx.h *.a +*.d *.x *.exe *.dll Obj_* -log.* -*.log - +log.lammps +log.cite *.bz2 *.gz *.tar .*.swp *.orig +*.rej .vagrant .DS_Store diff --git a/bench/log.lj.serial-opt b/bench/log.lj.serial-opt new file mode 100644 index 0000000000..0985212499 --- /dev/null +++ b/bench/log.lj.serial-opt @@ -0,0 +1,76 @@ +LAMMPS (6 Apr 2015-ICMS) +WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:89) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable xx equal 20*1 +variable yy equal 20*$y +variable yy equal 20*1 +variable zz equal 20*$z +variable zz equal 20*1 + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +region box block 0 20 0 ${yy} 0 ${zz} +region box block 0 20 0 20 0 ${zz} +region box block 0 20 0 20 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (33.5919 33.5919 33.5919) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 32000 atoms +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +run 100 +Neighbor list info ... + 1 neighbor list requests + update every 20 steps, delay 0 steps, check no + master list distance cutoff = 2.8 +Memory usage per processor = 8.21387 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6134356 -5.0197073 + 100 0.7574531 -5.7585055 0 -4.6223613 0.20726105 + +Loop time of 1.77678 on 1 procs for 100 steps with 32000 atoms +100.1% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timings breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4518 | 1.4518 | 1.4518 | 0.0 | 81.71 +Neigh | 0.26188 | 0.26188 | 0.26188 | 0.0 | 14.74 +Comm | 0.021981 | 0.021981 | 0.021981 | 0.0 | 1.24 +Output | 0.00015187 | 0.00015187 | 0.00015187 | 0.0 | 0.01 +Modify | 0.034947 | 0.034947 | 0.034947 | 0.0 | 1.97 +Other | | 0.006014 | | | 0.34 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19657 ave 19657 max 19657 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.20283e+06 ave 1.20283e+06 max 1.20283e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1202833 +Ave neighs/atom = 37.5885 +Neighbor list builds = 5 +Dangerous builds = 0 diff --git a/doc/html/Manual.html b/doc/html/Manual.html index 6d3a19fdbb..2231a8d5cb 100644 --- a/doc/html/Manual.html +++ b/doc/html/Manual.html @@ -134,8 +134,8 @@

LAMMPS-ICMS Documentation

-
-

14 May 2016 version

+
+

8 Jun 2016 version

Version info:

diff --git a/doc/html/Section_accelerate.html b/doc/html/Section_accelerate.html index 437691317d..9fcd094369 100644 --- a/doc/html/Section_accelerate.html +++ b/doc/html/Section_accelerate.html @@ -82,10 +82,7 @@
  • 5.1. Measuring performance
  • 5.2. General strategies
  • 5.3. Packages with optimized styles
  • -
  • 5.4. Comparison of various accelerator packages -
  • +
  • 5.4. Comparison of various accelerator packages
  • 6. How-to discussions
  • @@ -159,12 +156,11 @@ multi-core CPUs, GPUs, and Intel Xeon Phi coprocessors.

  • 5.1 Measuring performance
  • 5.2 Algorithms and code options to boost performace
  • 5.3 Accelerator packages with optimized styles
  • -
  • 5.3.1 USER-CUDA package
  • -
  • 5.3.2 GPU package
  • -
  • 5.3.3 USER-INTEL package
  • -
  • 5.3.4 KOKKOS package
  • -
  • 5.3.5 USER-OMP package
  • -
  • 5.3.6 OPT package
  • +
  • 5.3.1 GPU package
  • +
  • 5.3.2 USER-INTEL package
  • +
  • 5.3.3 KOKKOS package
  • +
  • 5.3.4 USER-OMP package
  • +
  • 5.3.5 OPT package
  • 5.4 Comparison of various accelerator packages
  • The Benchmark page of the LAMMPS @@ -284,22 +280,19 @@ currently in LAMMPS, either as standard or user packages:

    -USER-CUDA -for NVIDIA GPUs - -GPU +GPU for NVIDIA GPUs as well as OpenCL support -USER-INTEL +USER-INTEL for Intel CPUs and Intel Xeon Phi -KOKKOS +KOKKOS for GPUs, Intel Xeon Phi, and OpenMP threading -USER-OMP +USER-OMP for OpenMP threading -OPT +OPT generic CPU optimizations @@ -316,7 +309,7 @@ three kinds of hardware, via the listed packages:

    USER-INTEL, KOKKOS, USER-OMP, OPT packages NVIDIA GPUs -USER-CUDA, GPU, KOKKOS packages +GPU, KOKKOS packages Intel Phi USER-INTEL, KOKKOS packages @@ -336,7 +329,6 @@ same, except for precision and round-off effects.

    For example, all of these styles are accelerated variants of the Lennard-Jones pair_style lj/cut:

      -
    • pair_style lj/cut/cuda
    • pair_style lj/cut/gpu
    • pair_style lj/cut/intel
    • pair_style lj/cut/kk
    • @@ -359,7 +351,7 @@ listed above:

      build the accelerator library -only for USER-CUDA and GPU packages +only for GPU package install the accelerator package make yes-opt, make yes-user-intel, etc @@ -388,7 +380,7 @@ listed above:

      mpirun -np 32 lmp_machine -in in.script |
      -
      only for USER-CUDA and KOKKOS packages |
      +
      only for KOKKOS package |
      package command, <br> only if defaults need to be changed |
      @@ -422,17 +414,16 @@ option for the KOKKOS package.

      These are the exceptions. You cannot build a single executable with:

      • both the USER-INTEL Phi and KOKKOS Phi options
      • -
      • the USER-INTEL Phi or Kokkos Phi option, and either the USER-CUDA or GPU packages
      • +
      • the USER-INTEL Phi or Kokkos Phi option, and the GPU package

      See the examples/accelerate/README and make.list files for sample Make.py commands that build LAMMPS with any or all of the accelerator packages. As an example, here is a command that builds with all the -GPU related packages installed (USER-CUDA, GPU, KOKKOS with Cuda), -including settings to build the needed auxiliary USER-CUDA and GPU -libraries for Kepler GPUs:

      -
      -Make.py -j 16 -p omp gpu cuda kokkos -cc nvcc wrap=mpi   -cuda mode=double arch=35 -gpu mode=double arch=35  -kokkos cuda arch=35 lib-all file mpi
      -
      +GPU related packages installed (GPU, KOKKOS with Cuda), including +settings to build the needed auxiliary GPU libraries for Kepler GPUs:

      +
      Make.py -j 16 -p omp gpu kokkos -cc nvcc wrap=mpi   -gpu mode=double arch=35 -kokkos cuda arch=35 lib-all file mpi
      +
      +

      The examples/accelerate directory also has input scripts that can be used with all of the accelerator packages. See its README file for details.

      @@ -447,10 +438,9 @@ size and number of compute nodes, on different hardware platforms.

      Here is a brief summary of what the various packages provide. Details are in the individual accelerator sections.

        -
      • Styles with a “cuda” or “gpu” suffix are part of the USER-CUDA or GPU -packages, and can be run on NVIDIA GPUs. The speed-up on a GPU -depends on a variety of factors, discussed in the accelerator -sections.
      • +
      • Styles with a “gpu” suffix are part of the GPU package, and can be run +on NVIDIA GPUs. The speed-up on a GPU depends on a variety of +factors, discussed in the accelerator sections.
      • Styles with an “intel” suffix are part of the USER-INTEL package. These styles support vectorized single and mixed precision calculations, in addition to full double precision. In extreme cases, @@ -504,28 +494,25 @@ section below for examples where this has been done.

        • The GPU package allows you to assign multiple CPUs (cores) to a single GPU (a common configuration for “hybrid” nodes that contain multicore -CPU(s) and GPU(s)) and works effectively in this mode. The USER-CUDA -package does not allow this; you can only use one CPU per GPU.
        • +CPU(s) and GPU(s)) and works effectively in this mode.
        • The GPU package moves per-atom data (coordinates, forces) -back-and-forth between the CPU and GPU every timestep. The USER-CUDA -package only does this on timesteps when a CPU calculation is required -(e.g. to invoke a fix or compute that is non-GPU-ized). Hence, if you -can formulate your input script to only use GPU-ized fixes and -computes, and avoid doing I/O too often (thermo output, dump file -snapshots, restart files), then the data transfer cost of the -USER-CUDA package can be very low, causing it to run faster than the +back-and-forth between the CPU and GPU every timestep. The +KOKKOS/CUDA package only does this on timesteps when a CPU calculation +is required (e.g. to invoke a fix or compute that is non-GPU-ized). +Hence, if you can formulate your input script to only use GPU-ized +fixes and computes, and avoid doing I/O too often (thermo output, dump +file snapshots, restart files), then the data transfer cost of the +KOKKOS/CUDA package can be very low, causing it to run faster than the GPU package.
        • -
        • The GPU package is often faster than the USER-CUDA package, if the +
        • The GPU package is often faster than the KOKKOS/CUDA package, if the number of atoms per GPU is smaller. The crossover point, in terms of -atoms/GPU at which the USER-CUDA package becomes faster depends +atoms/GPU at which the KOKKOS/CUDA package becomes faster depends strongly on the pair style. For example, for a simple Lennard Jones system the crossover (in single precision) is often about 50K-100K atoms per GPU. When performing double precision calculations the crossover point can be significantly smaller.
        • Both packages compute bonded interactions (bonds, angles, etc) on the -CPU. This means a model with bonds will force the USER-CUDA package -to transfer per-atom data back-and-forth between the CPU and GPU every -timestep. If the GPU package is running with several MPI processes +CPU. If the GPU package is running with several MPI processes assigned to one GPU, the cost of computing the bonded interactions is spread across more CPUs and hence the GPU package can run faster.
        • When using the GPU package with multiple CPUs assigned to one GPU, its @@ -539,32 +526,10 @@ full 16 lanes to each of the PCIe 2.0 16x slots.
        • Differences between the two packages:

          • The GPU package accelerates only pair force, neighbor list, and PPPM -calculations. The USER-CUDA package currently supports a wider range -of pair styles and can also accelerate many fix styles and some -compute styles, as well as neighbor list and PPPM calculations.
          • -
          • The USER-CUDA package does not support acceleration for minimization.
          • -
          • The USER-CUDA package does not support hybrid pair styles.
          • -
          • The USER-CUDA package can order atoms in the neighbor list differently -from run to run resulting in a different order for force accumulation.
          • -
          • The USER-CUDA package has a limit on the number of atom types that can be -used in a simulation.
          • +calculations.
          • The GPU package requires neighbor lists to be built on the CPU when using exclusion lists or a triclinic simulation box.
          • -
          • The GPU package uses more GPU memory than the USER-CUDA package. This -is generally not a problem since typical runs are computation-limited -rather than memory-limited.
          -
          -

          5.4.1. Examples

          -

          The LAMMPS distribution has two directories with sample input scripts -for the GPU and USER-CUDA packages.

          -
            -
          • lammps/examples/gpu = GPU package files
          • -
          • lammps/examples/USER/cuda = USER-CUDA package files
          • -
          -

          These contain input scripts for identical systems, so they can be used -to benchmark the performance of both packages on your system.

          -
    diff --git a/doc/html/Section_commands.html b/doc/html/Section_commands.html index cbd6a70e59..7faafd009c 100644 --- a/doc/html/Section_commands.html +++ b/doc/html/Section_commands.html @@ -614,154 +614,154 @@ in the command’s documentation.

    or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the appropriate accelerated package. -This is indicated by additional letters in parenthesis: c = USER-CUDA, -g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    +This is indicated by additional letters in parenthesis: g = GPU, i = +USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    -+ - + - + - + - - + - + + - - - + + - + + - - + + - - + - + - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + - + + - - + - + + - - + +
    adaptaddforce (c)addforce append/atoms atom/swapaveforce (c)aveforce ave/atom ave/chunk ave/correlate
    ave/histo ave/histo/weightave/spatial ave/time balance bond/break bond/create bond/swapbox/relax
    box/relaxdeform (k)
    deform (k) deposit drag dt/reset efield ehexenforce2d (c)enforce2devaporate
    evaporateexternalfreeze (c)
    externalfreeze gcmc gldgravity (co)gravity (o) heat indentlangevin (k)
    langevin (k)lineforce
    lineforce momentum move msst neb nph (ko) nphug (o)nph/asphere (o)
    nph/asphere (o)nph/body
    nph/body nph/sphere (o)npt (ckio)npt (kio) npt/asphere (o) npt/body npt/sphere (o)nve (ckio)nve (kio)nve/asphere (i)
    nve/asphere (i)nve/asphere/noforce
    nve/asphere/noforce nve/body nve/limit nve/line nve/noforce nve/sphere (o) nve/trinvt (iko)
    nvt (ciko)nvt/asphere (o)
    nvt/asphere (o) nvt/body nvt/sllod (io) nvt/sphere (o) oneway orient/fcc planeforcepoems
    poemspour
    pour press/berendsen print property/atom qeq/comb (o) qeq/dynamic qeq/fireqeq/point
    qeq/pointqeq/shielded
    qeq/shielded qeq/slater rattle reax/bonds recenter restrain rigid (o)rigid/nph (o)
    rigid/nph (o)rigid/npt (o)
    rigid/npt (o) rigid/nve (o) rigid/nvt (o) rigid/small (o) rigid/small/nph rigid/small/npt rigid/small/nverigid/small/nvt
    rigid/small/nvtsetforce (ck)shake (c)
    setforce (k)shake spring spring/rg spring/self srd store/forcestore/state
    store/statetemp/berendsen (c)
    temp/berendsen temp/csld temp/csvrtemp/rescale (c)temp/rescale tfmc thermal/conductivity tmdttm
    ttmtune/kspace
    tune/kspace vector viscosityviscous (c)viscous wall/colloid wall/gran wall/harmonicwall/lj1043
    wall/lj1043wall/lj126
    wall/lj126 wall/lj93 wall/piston wall/reflect (k) wall/region wall/srd   
    @@ -769,26 +769,26 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    LAMMPS is built with the appropriate package.

    +--+ - + - - + + @@ -822,23 +822,23 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    + - - + + - - + + -
    adapt/fep addtorque atc ave/correlate/longave/spatial/sphere colvarsdrude
    drudedrude/transform/direct
    drude/transform/direct drude/transform/reverse eos/cv eos/tableeos/table/rx gle
    imd
    qtb reax/c/bonds reax/c/speciesrx saed/vtk shardlowsmd
    smd/adjust/dt
    smdsmd/adjust/dt smd/integrate/tlsph smd/integrate/ulsph smd/move/triangulated/surface smd/setvelsmd/tlsph/reference/configuration
    smd/wall/surface
    smd/tlsph/reference/configurationsmd/wall/surface temp/rescale/eff ti/rs ti/spring ttm/mod 
    @@ -850,7 +850,7 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    each style or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    @@ -912,10 +912,10 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + - + @@ -929,14 +929,14 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + - + @@ -1026,7 +1026,7 @@ used if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    pair
    pair/localpe (c)pe pe/atom plasticity/atompressure (c)pressure property/atom
    property/local snad/atom snav/atom stress/atomtemp (ck)temp (k) temp/asphere
    temp/body temp/chunk temp/com temp/deformtemp/partial (c)temp/partial temp/profile
    temp/ramp
    @@ -1049,7 +1049,7 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + @@ -1057,9 +1057,9 @@ KOKKOS, o = USER-OMP, t = OPT.

    - - - + + + @@ -1082,16 +1082,16 @@ KOKKOS, o = USER-OMP, t = OPT.

    - - - + + + - + @@ -1099,22 +1099,22 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + - - + + - + - - + + - + - - + + - + @@ -1123,17 +1123,17 @@ KOKKOS, o = USER-OMP, t = OPT.

    - - + + - + - + - + @@ -1142,7 +1142,7 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + @@ -1161,9 +1161,9 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + - + @@ -1182,10 +1182,10 @@ KOKKOS, o = USER-OMP, t = OPT.

    if LAMMPS is built with the appropriate package.

    body bop born (go)born/coul/long (cgo)born/coul/long (go)
    born/coul/long/cs born/coul/msm (o) brownian (o)
    brownian/poly (o)buck (cgkio)buck/coul/cut (cgkio)buck/coul/long (cgkio)buck (gkio)buck/coul/cut (gkio)buck/coul/long (gkio)
    buck/coul/long/cs buck/coul/msm (o) dpd/tstat (o)
    dsmceam (cgkot)eam/alloy (cgkot)eam/fs (cgkot)eam (gkot)eam/alloy (gkot)eam/fs (gkot)
    eim (o) gauss (go) gayberne (gio) gran/hertz/history (o)
    gran/hooke (co)
    gran/hooke (o) gran/hooke/history (o) hbond/dreiding/lj (o) hbond/dreiding/morse (o)
    kim lcbop line/ljlj/charmm/coul/charmm (cko)lj/charmm/coul/charmm (ko)
    lj/charmm/coul/charmm/implicit (cko)lj/charmm/coul/long (cgiko)
    lj/charmm/coul/charmm/implicit (ko)lj/charmm/coul/long (giko) lj/charmm/coul/msmlj/class2 (cgko)lj/class2 (gko)
    lj/class2/coul/cut (cko)lj/class2/coul/long (cgko)
    lj/class2/coul/cut (ko)lj/class2/coul/long (gko) lj/cubic (go)lj/cut (cgikot)lj/cut (gikot)
    lj/cut/coul/cut (cgko)lj/cut/coul/debye (cgko)
    lj/cut/coul/cut (gko)lj/cut/coul/debye (gko) lj/cut/coul/dsf (gko)lj/cut/coul/long (cgikot)lj/cut/coul/long (gikot)
    lj/cut/coul/long/cs lj/cut/coul/msm (go)
    lj/cut/tip4p/cut (o) lj/cut/tip4p/long (ot)lj/expand (cgko)lj/gromacs (cgko)lj/expand (gko)lj/gromacs (gko)
    lj/gromacs/coul/gromacs (cko)
    lj/gromacs/coul/gromacs (ko) lj/long/coul/long (o) lj/long/dipole/long lj/long/tip4p/long
    lj/smooth (co)
    lj/smooth (o) lj/smooth/linear (o)lj96/cut (cgo)lj96/cut (go) lubricate (o)
    lubricate/poly (o) meam (o)
    mie/cut (o)morse (cgot)morse (got) nb3b/harmonic (o) nm/cut (o)
    snap soft (go)
    sw (cgkio)
    sw (gkio) table (gko)tersoff (cgkio)tersoff (gkio) tersoff/mod (gko)
    tersoff/zbl (gko)
    ---+++ @@ -1200,53 +1200,58 @@ if + - - + + - - + + - - + + - - + + - - + + + + - - + - + + - - + - + + - - + - - - - + + + + + + +
    awpmd/cutedip (o) eff/cutexp6/rx gauss/cutlennard/mdf
    list
    lennard/mdflist lj/charmm/coul/long/soft (o) lj/cut/coul/cut/soft (o)lj/cut/coul/long/soft (o)
    lj/cut/dipole/sf (go)
    lj/cut/coul/long/soft (o)lj/cut/dipole/sf (go) lj/cut/soft (o) lj/cut/thole/long (o)lj/cut/tip4p/long/soft (o)
    lj/mdf
    lj/cut/tip4p/long/soft (o)lj/mdf lj/sdk (gko) lj/sdk/coul/long (go)lj/sdk/coul/msm (o)
    lj/sf (o)
    lj/sdk/coul/msm (o)lj/sf (o) meam/spline meam/sw/splinemgpt
    morse/smooth/linear
    mgptmorse/smooth/linear morse/soft multi/lucy
    multi/lucy/rx quip
    reax/creax/c smd/hertzsmd/tlsph
    smd/tlsph smd/triangulated/surface
    smd/ulsphsmd/ulsph smtbqsph/heatconduction
    sph/heatconduction sph/idealgas
    sph/ljsph/lj sph/rhosumsph/taitwatersph/taitwater/morris
    srptersoff/table (o)
    sph/taitwatersph/taitwater/morrissrptable/rx
    tersoff/table (o) thole tip4p/long/soft (o) 
    @@ -1258,7 +1263,7 @@ if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.

    @@ -1306,8 +1311,8 @@ if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT.

    +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT.

    @@ -1363,8 +1368,8 @@ if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT.

    +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT.

    @@ -1420,8 +1425,8 @@ used if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT.

    +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT.

    @@ -1467,8 +1472,8 @@ used if appropriate accelerated package. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT.

    +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT.

    @@ -1482,7 +1487,7 @@ KOKKOS, o = USER-OMP, t = OPT.

    - + diff --git a/doc/html/Section_example.html b/doc/html/Section_example.html index 029ceb8498..95a590b02f 100644 --- a/doc/html/Section_example.html +++ b/doc/html/Section_example.html @@ -201,106 +201,103 @@ longer times, e.g. to measure a particular quantity.

    - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/doc/html/Section_howto.html b/doc/html/Section_howto.html index 1fe9224652..307539d233 100644 --- a/doc/html/Section_howto.html +++ b/doc/html/Section_howto.html @@ -1086,7 +1086,7 @@ the sheared fluid and integrate the SLLOD equations of motion for the system. Fix nvt/sllod uses compute temp/deform to compute a thermal temperature by subtracting out the streaming velocity of the shearing atoms. The velocity profile or other properties of the fluid can be monitored via -the fix ave/spatial command.

    +the fix ave/spatial command.

    As discussed in the previous section on non-orthogonal simulation boxes, the amount of tilt or skew that can be applied is limited by LAMMPS for computational efficiency to be 1/2 of the parallel box @@ -2011,13 +2011,13 @@ on each of two regions to add/subtract specified amounts of energy to both regions. In both cases, the resulting temperatures of the two regions can be monitored with the “compute temp/region” command and the temperature profile of the intermediate region can be monitored -with the fix ave/spatial and compute ke/atom commands.

    +with the fix ave/spatial and compute ke/atom commands.

    The third method is to perform a reverse non-equilibrium MD simulation using the fix thermal/conductivity command which implements the rNEMD algorithm of Muller-Plathe. Kinetic energy is swapped between atoms in two different layers of the simulation box. This induces a temperature gradient between the two -layers which can be monitored with the fix ave/spatial and compute ke/atom commands. The fix tallies the +layers which can be monitored with the fix ave/spatial and compute ke/atom commands. The fix tallies the cumulative energy transfer that it performs. See the fix thermal/conductivity command for details.

    The fourth method is based on the Green-Kubo (GK) formula which @@ -2060,7 +2060,7 @@ used to shear the fluid in between them, again with some kind of thermostat that modifies only the thermal (non-shearing) components of velocity to prevent the fluid from heating up.

    In both cases, the velocity profile setup in the fluid by this -procedure can be monitored by the fix ave/spatial command, which determines +procedure can be monitored by the fix ave/spatial command, which determines grad(Vstream) in the equation above. E.g. the derivative in the y-direction of the Vx component of fluid motion or grad(Vstream) = dVx/dy. The Pxy off-diagonal component of the pressure or stress @@ -2073,7 +2073,7 @@ using the fix ave/spatial command. +monitored with the fix ave/spatial command. The fix tallies the cummulative momentum transfer that it performs. See the fix viscosity command for details.

    The fourth method is based on the Green-Kubo (GK) formula which diff --git a/doc/html/Section_packages.html b/doc/html/Section_packages.html index a1b17d0f4c..4522221d6c 100644 --- a/doc/html/Section_packages.html +++ b/doc/html/Section_packages.html @@ -116,30 +116,29 @@

  • 4.2.2. USER-AWPMD package
  • 4.2.3. USER-CG-CMM package
  • 4.2.4. USER-COLVARS package
  • -
  • 4.2.5. USER-CUDA package
  • -
  • 4.2.6. USER-DIFFRACTION package
  • -
  • 4.2.7. USER-DPD package
  • -
  • 4.2.8. USER-DRUDE package
  • -
  • 4.2.9. USER-EFF package
  • -
  • 4.2.10. USER-FEP package
  • -
  • 4.2.11. USER-H5MD package
  • -
  • 4.2.12. USER-INTEL package
  • -
  • 4.2.13. USER-LB package
  • -
  • 4.2.14. USER-MGPT package
  • -
  • 4.2.15. USER-MISC package
  • -
  • 4.2.16. USER-MANIFOLD package
  • -
  • 4.2.17. USER-MOLFILE package
  • -
  • 4.2.18. USER-OMP package
  • -
  • 4.2.19. USER-PHONON package
  • -
  • 4.2.20. USER-QMMM package
  • -
  • 4.2.21. USER-QTB package
  • -
  • 4.2.22. USER-QUIP package
  • -
  • 4.2.23. USER-REAXC package
  • -
  • 4.2.24. USER-SMD package
  • -
  • 4.2.25. USER-SMTBQ package
  • -
  • 4.2.26. USER-SPH package
  • -
  • 4.2.27. USER-TALLY package
  • -
  • 4.2.28. USER-VTK package
  • +
  • 4.2.5. USER-DIFFRACTION package
  • +
  • 4.2.6. USER-DPD package
  • +
  • 4.2.7. USER-DRUDE package
  • +
  • 4.2.8. USER-EFF package
  • +
  • 4.2.9. USER-FEP package
  • +
  • 4.2.10. USER-H5MD package
  • +
  • 4.2.11. USER-INTEL package
  • +
  • 4.2.12. USER-LB package
  • +
  • 4.2.13. USER-MGPT package
  • +
  • 4.2.14. USER-MISC package
  • +
  • 4.2.15. USER-MANIFOLD package
  • +
  • 4.2.16. USER-MOLFILE package
  • +
  • 4.2.17. USER-OMP package
  • +
  • 4.2.18. USER-PHONON package
  • +
  • 4.2.19. USER-QMMM package
  • +
  • 4.2.20. USER-QTB package
  • +
  • 4.2.21. USER-QUIP package
  • +
  • 4.2.22. USER-REAXC package
  • +
  • 4.2.23. USER-SMD package
  • +
  • 4.2.24. USER-SMTBQ package
  • +
  • 4.2.25. USER-SPH package
  • +
  • 4.2.26. USER-TALLY package
  • +
  • 4.2.27. USER-VTK package
  • @@ -802,8 +801,8 @@ dipole models with short-range or long-range interactions.

    Coulombic solver for NVIDIA GPUs. All of them have a “gpu” in their style name. Section accelerate gpu gives details of what hardware and Cuda software is required on your system, -and how to build and use this package. See the KOKKOS and USER-CUDA -packages, which also have GPU-enabled styles.

    +and how to build and use this package. See the KOKKOS package, which +also has GPU-enabled styles.

    Building LAMMPS with the GPU package requires first building the GPU library itself, which is a set of C and Cuda files in lib/gpu. Details of how to do this are in lib/gpu/README. As illustrated @@ -910,9 +909,8 @@ which run with the Kokkos library to provide optimization for multicore CPUs (via OpenMP), NVIDIA GPUs, or the Intel Xeon Phi (in native mode). All of them have a “kk” in their style name. Section accelerate kokkos gives details of what hardware and software is required on your system, and how to build and -use this package. See the GPU, OPT, USER-CUDA, USER-INTEL, USER-OMP -packages, which also provide optimizations for the same range of -hardware.

    +use this package. See the GPU, OPT, USER-INTEL, USER-OMP packages, +which also provide optimizations for the same range of hardware.

    Building with the KOKKOS package requires choosing which of 3 hardware options you are optimizing for: CPU acceleration via OpenMP, GPU acceleration, or Intel Xeon Phi. (You can build multiple times to @@ -1611,18 +1609,7 @@ src/Make.py -h -voronoi” to see the details.

    - - - - - - - - - + @@ -1636,8 +1623,8 @@ src/Make.py -h -voronoi” to see the details.

    - - + + @@ -1650,7 +1637,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1664,7 +1651,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1675,7 +1662,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1689,7 +1676,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1703,7 +1690,7 @@ src/Make.py -h -voronoi” to see the details.

    - + - + @@ -1734,7 +1721,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1748,7 +1735,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1765,7 +1752,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1776,7 +1763,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1790,7 +1777,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1807,7 +1794,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1821,7 +1808,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1832,7 +1819,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1846,7 +1833,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1857,7 +1844,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1871,7 +1858,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1885,7 +1872,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1899,7 +1886,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1910,7 +1897,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1924,7 +1911,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1938,7 +1925,7 @@ src/Make.py -h -voronoi” to see the details.

    - + @@ -1970,8 +1957,7 @@ command implemented as part of the package, or to additional documentation provided within the package.

    The “Example” column is a sub-directory in the examples directory of the distribution which has an input script that uses the package. -E.g. “peptide” refers to the examples/peptide directory. USER/cuda -refers to the examples/USER/cuda directory.

    +E.g. “peptide” refers to the examples/peptide directory.

    The “Library” column lists an external library which must be built first and which LAMMPS links to when it is built. If it is listed as lib/package, then the code for the library is under the lib directory @@ -2055,27 +2041,8 @@ Henin (LISM, CNRS, Marseille, France). Contact them directly if you have questions.


    -
    -

    4.2.5. USER-CUDA package

    -

    This package provides acceleration of various LAMMPS pair styles, fix -styles, compute styles, and long-range Coulombics via PPPM for NVIDIA -GPUs.

    -

    See this section of the manual to get started:

    -

    Section_accelerate

    -

    There are example scripts for using this package in -examples/USER/cuda.

    -

    This package uses an external library in lib/cuda which must be -compiled before making LAMMPS. See the lib/cuda/README file and the -LAMMPS manual for information on building LAMMPS with external -libraries.

    -

    The person who created this package is Christian Trott at the -University of Technology Ilmenau, Germany (christian.trott at -tu-ilmenau.de). Contact him directly if you have questions.

    -

    Examples: examples/accelerate, bench/FERMI, bench/KEPLER

    -
    -
    -

    4.2.6. USER-DIFFRACTION package

    +

    4.2.5. USER-DIFFRACTION package

    Contents: This packages implements two computes and a fix for calculating x-ray and electron diffraction intensities based on kinematic diffraction theory. See src/USER-DIFFRACTION/README for @@ -2088,12 +2055,14 @@ questions.


    -

    4.2.7. USER-DPD package

    +

    4.2.6. USER-DPD package

    Contents: DPD stands for dissipative particle dynamics, This package implements DPD for isothermal, isoenergetic, isobaric and isenthalpic -conditions. The DPD equations of motion are integrated efficiently -through the Shardlow splitting algorithm. See src/USER-DPD/README for -more details.

    +conditions. It also has extensions for performing reactive DPD, where +each particle has internal state for multiple species and a coupled +set of chemical reaction ODEs are integrated each timestep. The DPD +equations of motion are integrated efficiently through the Shardlow +splitting algorithm. See src/USER-DPD/README for more details.

    Supporting info: /src/USER-DPD/README, compute dpd compute dpd/atom fix eos/cv fix eos/table @@ -2108,7 +2077,7 @@ directly if you have questions.


    -

    4.2.8. USER-DRUDE package

    +

    4.2.7. USER-DRUDE package

    Contents: This package contains methods for simulating polarizable systems using thermalized Drude oscillators. It has computes, fixes, and pair styles for this purpose. See Section howto 6.27 for an overview of how to use the @@ -2124,7 +2093,7 @@ Agilio Padua. Contact them directly if you have questions.


    -

    4.2.9. USER-EFF package

    +

    4.2.8. USER-EFF package

    Contents: EFF stands for electron force field. This package contains atom, pair, fix and compute styles which implement the eFF as described in A. Jaramillo-Botero, J. Su, Q. An, and W.A. Goddard III, @@ -2138,7 +2107,7 @@ wag.caltech.edu). Contact him directly if you have questions.


    -

    4.2.10. USER-FEP package

    +

    4.2.9. USER-FEP package

    Contents: FEP stands for free energy perturbation. This package provides methods for performing FEP simulations by using a fix adapt/fep command with soft-core pair potentials, which have a “soft” in their style name. See src/USER-FEP/README for @@ -2152,7 +2121,7 @@ questions.


    -

    4.2.11. USER-H5MD package

    +

    4.2.10. USER-H5MD package

    Contents: H5MD stands for HDF5 for MD. HDF5 is a binary, portable, self-describing file format, used by many scientific simulations. H5MD is a format for molecular simulations, built on top @@ -2166,7 +2135,7 @@ directly if you have questions.


    -

    4.2.12. USER-INTEL package

    +

    4.2.11. USER-INTEL package

    Contents: Dozens of pair, bond, angle, dihedral, and improper styles that are optimized for Intel CPUs and the Intel Xeon Phi (in offload mode). All of them have an “intel” in their style name. Section accelerate intel gives details of what hardware @@ -2200,7 +2169,7 @@ your Makefile.machine for CCFLAGS and LINKFLAGS.


    -

    4.2.13. USER-LB package

    +

    4.2.12. USER-LB package

    Supporting info:

    This package contains a LAMMPS implementation of a background Lattice-Boltzmann fluid, which can be used to model MD particles @@ -2214,7 +2183,7 @@ Western Ontario. Contact them directly if you have questions.


    -

    4.2.14. USER-MGPT package

    +

    4.2.13. USER-MGPT package

    Supporting info:

    This package contains a fast implementation for LAMMPS of quantum-based MGPT multi-ion potentials. The MGPT or model GPT method @@ -2239,7 +2208,7 @@ Contact them directly if you have any questions.


    -

    4.2.15. USER-MISC package

    +

    4.2.14. USER-MISC package

    Supporting info:

    The files in this package are a potpourri of (mostly) unrelated features contributed to LAMMPS by users. Each feature is a single @@ -2258,7 +2227,7 @@ about the feature or its coding.


    -

    4.2.16. USER-MANIFOLD package

    +

    4.2.15. USER-MANIFOLD package

    Supporting info:

    This package contains a dump molfile command which uses molfile plugins that are bundled with the @@ -2278,7 +2247,7 @@ Contact him directly if you have questions.


    -

    4.2.17. USER-MOLFILE package

    +

    4.2.16. USER-MOLFILE package

    Supporting info:

    This package contains a dump molfile command which uses molfile plugins that are bundled with the @@ -2298,7 +2267,7 @@ application itself.


    -

    4.2.18. USER-OMP package

    +

    4.2.17. USER-OMP package

    Supporting info:

    This package provides OpenMP multi-threading support and other optimizations of various LAMMPS pair styles, dihedral @@ -2317,7 +2286,7 @@ settings for CCFLAGS and LINKFLAGS.


    -

    4.2.19. USER-PHONON package

    +

    4.2.18. USER-PHONON package

    This package contains a fix phonon command that calculates dynamical matrices, which can then be used to compute phonon dispersion relations, directly from molecular dynamics simulations.

    @@ -2330,7 +2299,7 @@ if you have questions.


    -

    4.2.20. USER-QMMM package

    +

    4.2.19. USER-QMMM package

    Supporting info:

    This package provides a fix qmmm command which allows LAMMPS to be used in a QM/MM simulation, currently only in combination with pw.x @@ -2348,7 +2317,7 @@ without changes to LAMMPS itself.


    -

    4.2.21. USER-QTB package

    +

    4.2.20. USER-QTB package

    Supporting info:

    This package provides a self-consistent quantum treatment of the vibrational modes in a classical molecular dynamics simulation. By @@ -2372,13 +2341,13 @@ have questions.


    -

    4.2.22. USER-QUIP package

    +

    4.2.21. USER-QUIP package

    Supporting info:

    Examples: examples/USER/quip


    -

    4.2.23. USER-REAXC package

    +

    4.2.22. USER-REAXC package

    Supporting info:

    This package contains a implementation for LAMMPS of the ReaxFF force field. ReaxFF uses distance-dependent bond-order functions to @@ -2408,7 +2377,7 @@ questions.


    -

    4.2.24. USER-SMD package

    +

    4.2.23. USER-SMD package

    Supporting info:

    This package implements smoothed Mach dynamics (SMD) in LAMMPS. Currently, the package has the following features:

    @@ -2434,7 +2403,7 @@ you have questions.


    -

    4.2.25. USER-SMTBQ package

    +

    4.2.24. USER-SMTBQ package

    Supporting info:

    This package implements the Second Moment Tight Binding - QEq (SMTB-Q) potential for the description of ionocovalent bonds in oxides.

    @@ -2450,7 +2419,7 @@ them directly if you have any questions.


    -

    4.2.26. USER-SPH package

    +

    4.2.25. USER-SPH package

    Supporting info:

    This package implements smoothed particle hydrodynamics (SPH) in LAMMPS. Currently, the package has the following features:

    @@ -2474,13 +2443,13 @@ you have questions.


    -

    4.2.27. USER-TALLY package

    +

    4.2.26. USER-TALLY package

    Supporting info:

    Examples: examples/USER/tally


    -

    4.2.28. USER-VTK package

    +

    4.2.27. USER-VTK package

    diff --git a/doc/html/Section_perf.html b/doc/html/Section_perf.html index f4c504ff9d..963ec4afa9 100644 --- a/doc/html/Section_perf.html +++ b/doc/html/Section_perf.html @@ -149,11 +149,8 @@ below:

    The 5 standard problems are as follow:

      -
    1. LJ = atomic fluid, Lennard-Jones potential with 2.5 sigma cutoff (55
    2. -
    -
    -
    neighbors per atom), NVE integration
    -
      +
    1. LJ = atomic fluid, Lennard-Jones potential with 2.5 sigma cutoff (55 +neighbors per atom), NVE integration
    2. Chain = bead-spring polymer melt of 100-mer chains, FENE bonds and LJ pairwise interactions with a 2^(1/6) sigma cutoff (5 neighbors per atom), NVE integration
    3. diff --git a/doc/html/Section_start.html b/doc/html/Section_start.html index b3c95af2d6..c5abc55bc0 100644 --- a/doc/html/Section_start.html +++ b/doc/html/Section_start.html @@ -450,10 +450,9 @@ machine or small cluster where you will never run large systems or for long time (more than 2 billion atoms, more than 2 billion timesteps). See the Additional build tips section below for more details on these settings.

      -

      Note that two packages, USER-ATC and USER-CUDA are not currently -compatible with -DLAMMPS_BIGBIG. Also the GPU package requires the -lib/gpu library to be compiled with the same setting, or the link will -fail.

      +

      Note that the USER-ATC package is not currently compatible with +-DLAMMPS_BIGBIG. Also the GPU package requires the lib/gpu library to +be compiled with the same setting, or the link will fail.

      The -DLAMMPS_LONGLONG_TO_LONG setting may be needed if your system or MPI version does not recognize “long long” data types. In this case a “long” data type is likely already 64-bits, in which case this setting @@ -1281,7 +1280,6 @@ more processors or setup a smaller problem.

      which may be used in any order. Either the full word or a one-or-two letter abbreviation can be used:

      diff --git a/doc/html/angle_charmm.html b/doc/html/angle_charmm.html index b0ce5e4e43..df9e20c662 100644 --- a/doc/html/angle_charmm.html +++ b/doc/html/angle_charmm.html @@ -170,16 +170,16 @@ or read

      Theta0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_class2.html b/doc/html/angle_class2.html index 2fdf1a1e11..1977415a6d 100644 --- a/doc/html/angle_class2.html +++ b/doc/html/angle_class2.html @@ -194,16 +194,16 @@ the angle type.

      The theta0 value in the Eba formula is not specified, since it is the same value from the Ea formula.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine.html b/doc/html/angle_cosine.html index f159c042c6..ef3eba806d 100644 --- a/doc/html/angle_cosine.html +++ b/doc/html/angle_cosine.html @@ -155,16 +155,16 @@ or read
    4. K (energy)

    5. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine_delta.html b/doc/html/angle_cosine_delta.html index c079d13b68..e3dedd0a2b 100644 --- a/doc/html/angle_cosine_delta.html +++ b/doc/html/angle_cosine_delta.html @@ -159,16 +159,16 @@ or read

      Theta0 is specified in degrees, but LAMMPS converts it to radians internally.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine_periodic.html b/doc/html/angle_cosine_periodic.html index bf2cfe324b..8a358d76d2 100644 --- a/doc/html/angle_cosine_periodic.html +++ b/doc/html/angle_cosine_periodic.html @@ -166,16 +166,16 @@ constant K = C / n^2. When B = 1, it leads to a minimum for the linear geometry. When B = -1, it leads to a maximum for the linear geometry.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine_shift.html b/doc/html/angle_cosine_shift.html index 73ad839591..d9c19717bc 100644 --- a/doc/html/angle_cosine_shift.html +++ b/doc/html/angle_cosine_shift.html @@ -158,16 +158,16 @@ or read
    6. theta (angle)

    7. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine_shift_exp.html b/doc/html/angle_cosine_shift_exp.html index f4233d2d99..60dcbf1a2d 100644 --- a/doc/html/angle_cosine_shift_exp.html +++ b/doc/html/angle_cosine_shift_exp.html @@ -168,16 +168,16 @@ or read
    8. A (real number)

    9. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_cosine_squared.html b/doc/html/angle_cosine_squared.html index 4f93f67050..2797e23fda 100644 --- a/doc/html/angle_cosine_squared.html +++ b/doc/html/angle_cosine_squared.html @@ -159,16 +159,16 @@ or read

      Theta0 is specified in degrees, but LAMMPS converts it to radians internally.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_dipole.html b/doc/html/angle_dipole.html index 66cc040b11..92fec1da89 100644 --- a/doc/html/angle_dipole.html +++ b/doc/html/angle_dipole.html @@ -179,16 +179,16 @@ or read
    10. gamma0 (degrees)

    11. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_fourier.html b/doc/html/angle_fourier.html index 74e80ceca8..ea480d563e 100644 --- a/doc/html/angle_fourier.html +++ b/doc/html/angle_fourier.html @@ -155,16 +155,16 @@ or read
    12. C2 (real)

    13. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_fourier_simple.html b/doc/html/angle_fourier_simple.html index 831b487ff1..fb8db727a9 100644 --- a/doc/html/angle_fourier_simple.html +++ b/doc/html/angle_fourier_simple.html @@ -154,16 +154,16 @@ or read
    14. n (real)

    15. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_harmonic.html b/doc/html/angle_harmonic.html index 1da0c29eb6..8a15d8a8d6 100644 --- a/doc/html/angle_harmonic.html +++ b/doc/html/angle_harmonic.html @@ -165,16 +165,16 @@ or read

      Theta0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_quartic.html b/doc/html/angle_quartic.html index 1c826461ae..3cd4e9b3ca 100644 --- a/doc/html/angle_quartic.html +++ b/doc/html/angle_quartic.html @@ -161,16 +161,16 @@ or read

      Theta0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/angle_table.html b/doc/html/angle_table.html index 29876e8fc9..82e77f8d7c 100644 --- a/doc/html/angle_table.html +++ b/doc/html/angle_table.html @@ -233,16 +233,16 @@ with 180.0, i.e. span the full range of possible angles.

      potential. LAMMPS reads the file section by section until it finds one that matches the specified keyword.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/atom_style.html b/doc/html/atom_style.html index 19b306d746..2ed9ccbab0 100644 --- a/doc/html/atom_style.html +++ b/doc/html/atom_style.html @@ -145,7 +145,7 @@ args = none for any style except the following hybrid args = list of one or more sub-styles, each with their args
      @@ -153,7 +153,6 @@ args = none for any style except the following
      atom_style atomic
       atom_style bond
       atom_style full
      -atom_style full/cuda
       atom_style body nparticle 2 10
       atom_style hybrid charge bond
       atom_style hybrid charge body nparticle 2 5
      @@ -310,9 +309,13 @@ Gaussians with a specified position and bandwidth or uncertainty in
       position, which is represented by the eradius = electron size.

      For the peri style, the particles are spherical and each stores a per-particle mass and volume.

      -

      The dpd style is for dissipative particle dynamics (DPD) particles -which store the particle internal temperature (dpdTheta), internal -conductive energy (uCond) and internal mechanical energy (uMech).

      +

      The dpd style is for dissipative particle dynamics (DPD) particles. +Note that it is part of the USER-DPD package, and is not for use with +the pair_style dpd or dpd/stat commands, which can +simply use atom_style atomic. Atom_style dpd extends DPD particle +properties with internal temperature (dpdTheta), internal conductive +energy (uCond), internal mechanical energy (uMech), and internal +chemical energy (uChem).

      The meso style is for smoothed particle hydrodynamics (SPH) particles which store a density (rho), energy (e), and heat capacity (cv).

      @@ -389,7 +392,7 @@ per-atom basis.

      LAMMPS can be extended with new atom styles as well as new body styles; see this section.


      -

      Styles with a cuda or kk suffix are functionally the same as the +

      Styles with a kk suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The @@ -398,10 +401,8 @@ results, except for round-off and precision issues.

      Note that other acceleration packages in LAMMPS, specifically the GPU, USER-INTEL, USER-OMP, and OPT packages do not use accelerated atom styles.

      -

      The accelerated styles are part of the USER-CUDA and KOKKOS packages -respectively. They are only enabled if LAMMPS was built with those -packages. See the Making LAMMPS section -for more info.

      +

      The accelerated styles are part of the KOKKOS package. They are only +enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_class2.html b/doc/html/bond_class2.html index 73540afcde..7e3e5100ec 100644 --- a/doc/html/bond_class2.html +++ b/doc/html/bond_class2.html @@ -159,16 +159,16 @@ or read
    16. K4 (energy/distance^4)

    17. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_fene.html b/doc/html/bond_fene.html index f67f75ac61..776926ef17 100644 --- a/doc/html/bond_fene.html +++ b/doc/html/bond_fene.html @@ -165,16 +165,16 @@ or read
    18. sigma (distance)

    19. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_fene_expand.html b/doc/html/bond_fene_expand.html index c634b02940..e2b5ed6ad5 100644 --- a/doc/html/bond_fene_expand.html +++ b/doc/html/bond_fene_expand.html @@ -166,16 +166,16 @@ or read
    20. delta (distance)

    21. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_harmonic.html b/doc/html/bond_harmonic.html index da8c670035..f1594a77d6 100644 --- a/doc/html/bond_harmonic.html +++ b/doc/html/bond_harmonic.html @@ -163,16 +163,16 @@ or read
    22. r0 (distance)

    23. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_harmonic_shift.html b/doc/html/bond_harmonic_shift.html index b3e7630971..91a6674537 100644 --- a/doc/html/bond_harmonic_shift.html +++ b/doc/html/bond_harmonic_shift.html @@ -160,16 +160,16 @@ or read
    24. rc (distance)

    25. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_harmonic_shift_cut.html b/doc/html/bond_harmonic_shift_cut.html index 68d9152ff6..c53ad2cc14 100644 --- a/doc/html/bond_harmonic_shift_cut.html +++ b/doc/html/bond_harmonic_shift_cut.html @@ -160,16 +160,16 @@ or read
    26. rc (distance)

    27. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_morse.html b/doc/html/bond_morse.html index 93a3ad49c4..facb9a0c9c 100644 --- a/doc/html/bond_morse.html +++ b/doc/html/bond_morse.html @@ -158,16 +158,16 @@ or read
    28. r0 (distance)

    29. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_nonlinear.html b/doc/html/bond_nonlinear.html index 353c1dddbe..02540da242 100644 --- a/doc/html/bond_nonlinear.html +++ b/doc/html/bond_nonlinear.html @@ -158,16 +158,16 @@ or read
    30. lamda (distance)

    31. -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_quartic.html b/doc/html/bond_quartic.html index df2944fc19..d2b57516a1 100644 --- a/doc/html/bond_quartic.html +++ b/doc/html/bond_quartic.html @@ -189,16 +189,16 @@ status of broken bonds or permanently delete them, e.g.:


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/bond_table.html b/doc/html/bond_table.html index 2680e1ede4..57b1a25deb 100644 --- a/doc/html/bond_table.html +++ b/doc/html/bond_table.html @@ -230,16 +230,16 @@ force is evaluated as if the bond were the LO or HI length.

      potential. LAMMPS reads the file section by section until it finds one that matches the specified keyword.


      -

      Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

      Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

      -

      These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      +

      These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

      You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

      diff --git a/doc/html/change_box.html b/doc/html/change_box.html index d7aa07bbc1..fc034cbe2f 100644 --- a/doc/html/change_box.html +++ b/doc/html/change_box.html @@ -419,11 +419,12 @@ been previously used to define the lattice spacing.

      Restrictions

      If you use the ortho or triclinic keywords, then at the point in the input script when this command is issued, no dumps can -be active, nor can a fix ave/spatial or fix deform be active. This is because these commands -test whether the simulation box is orthogonal when they are first -issued. Note that these commands can be used in your script before a -change_box command is issued, so long as an undump or -unfix command is also used to turn them off.

      +be active, nor can a fix deform be active. This is +because these commands test whether the simulation box is orthogonal +when they are first issued. Note that these commands can be used in +your script before a change_box command is issued, so long as an +undump or unfix command is also used to +turn them off.

      diff --git a/doc/html/compute_dpd.html b/doc/html/compute_dpd.html index ddab1ca7a8..d65587a9aa 100644 --- a/doc/html/compute_dpd.html +++ b/doc/html/compute_dpd.html @@ -146,7 +146,7 @@

      Description

      Define a computation that accumulates the total internal conductive energy (U_cond), the total internal mechanical energy (U_mech), the -total internal energy (U) and the harmonic average of the internal +total chemical energy (U_chem) and the harmonic average of the internal temperature (dpdTheta) for the entire system of particles. See the compute dpd/atom command if you want per-particle internal energies and internal temperatures.

      @@ -157,15 +157,17 @@ relations:


      Output info:

      This compute calculates a global vector of length 5 (U_cond, U_mech, -U, dpdTheta, N_particles), which can be accessed by indices 1-5. See +U_chem, dpdTheta, N_particles), which can be accessed by indices 1-5. See this section for an overview of LAMMPS output options.

      The vector values will be in energy and temperature units.

      Restrictions

      -

      The compute dpd is only available if LAMMPS is built with the -USER-DPD package and requires the atom_style dpd.

      +

      This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the Making LAMMPS section for more info.

      +

      This command also requires use of the atom_style dpd +command.

    + - + - + - - - - + - + - + - + - + - + - + - + - + @@ -1187,7 +1184,7 @@ string like this $((xlo+xhi)/2+sqrt(v_area)) in an input script command evaluates the string between the parenthesis as an equal-style variable formula.

    Referencing a variable with a leading “v_” is an optional or required -kind of argument for some commands (e.g. the fix ave/spatial or dump custom or +kind of argument for some commands (e.g. the fix ave/chunk or dump custom or thermo_style commands) if you wish it to evaluate a variable periodically during a run. It can also be used in a variable formula if you wish to reference a second variable. The diff --git a/doc/lammps.book b/doc/lammps.book index 2f5dda57ed..e72adeb703 100644 --- a/doc/lammps.book +++ b/doc/lammps.book @@ -7,7 +7,6 @@ Section_start.html Section_commands.html Section_packages.html Section_accelerate.html -accelerate_cuda.html accelerate_gpu.html accelerate_intel.html accelerate_kokkos.html @@ -118,8 +117,6 @@ fix_ave_correlate.html fix_ave_correlate_long.html fix_ave_chunk.html fix_ave_histo.html -fix_ave_spatial.html -fix_ave_spatial_sphere.html fix_ave_time.html fix_aveforce.html fix_balance.html diff --git a/doc/src/Eqs/compute_dpd.jpg b/doc/src/Eqs/compute_dpd.jpg index 42ed03db15..549f259c6c 100644 Binary files a/doc/src/Eqs/compute_dpd.jpg and b/doc/src/Eqs/compute_dpd.jpg differ diff --git a/doc/src/Eqs/compute_dpd.tex b/doc/src/Eqs/compute_dpd.tex index 3d4338db08..e46b0b4dd6 100644 --- a/doc/src/Eqs/compute_dpd.tex +++ b/doc/src/Eqs/compute_dpd.tex @@ -5,7 +5,8 @@ \begin{eqnarray*} U^{cond} = \displaystyle\sum_{i=1}^{N} u_{i}^{cond} \\ U^{mech} = \displaystyle\sum_{i=1}^{N} u_{i}^{mech} \\ - U = \displaystyle\sum_{i=1}^{N} (u_{i}^{cond} + u_{i}^{mech}) \\ + U^{chem} = \displaystyle\sum_{i=1}^{N} u_{i}^{chem} \\ + U = \displaystyle\sum_{i=1}^{N} (u_{i}^{cond} + u_{i}^{mech} + u_{i}^{chem}) \\ \theta_{avg} = (\frac{1}{N}\displaystyle\sum_{i=1}^{N} \frac{1}{\theta_{i}})^{-1} \\ \end{eqnarray*} diff --git a/doc/src/Eqs/fix_ehex_eom.jpg b/doc/src/Eqs/fix_ehex_eom.jpg new file mode 100644 index 0000000000..67fa7c092a Binary files /dev/null and b/doc/src/Eqs/fix_ehex_eom.jpg differ diff --git a/doc/src/Eqs/fix_ehex_eom.tex b/doc/src/Eqs/fix_ehex_eom.tex new file mode 100644 index 0000000000..344ebcef76 --- /dev/null +++ b/doc/src/Eqs/fix_ehex_eom.tex @@ -0,0 +1,8 @@ +\documentclass[12pt]{article} +\usepackage{amsmath} +\begin{document} + \begin{align*} + \dot{\mathbf r}_i &= \mathbf v_i, \\ + \dot{\mathbf v}_i &= \frac{\mathbf f_i}{m_i} + \frac{\mathbf g_i}{m_i}. + \end{align*} +\end{document} diff --git a/doc/src/Eqs/fix_ehex_f.jpg b/doc/src/Eqs/fix_ehex_f.jpg new file mode 100644 index 0000000000..b74a28d907 Binary files /dev/null and b/doc/src/Eqs/fix_ehex_f.jpg differ diff --git a/doc/src/Eqs/fix_ehex_f.tex b/doc/src/Eqs/fix_ehex_f.tex new file mode 100644 index 0000000000..f6ffe1d720 --- /dev/null +++ b/doc/src/Eqs/fix_ehex_f.tex @@ -0,0 +1,12 @@ +\documentclass[12pt]{article} +\usepackage{amsmath} +\begin{document} + \begin{equation*} + \mathbf g_i = + \begin{cases} \frac{m_i}{2} \frac{ F_{\Gamma_{k(\mathbf r_i)}}}{ K_{\Gamma_{k(\mathbf r_i)}}} + \left(\mathbf v_i - \mathbf v_{\Gamma_{k(\mathbf r_i)}} \right) & \mbox{$k(\mathbf r_i)> 0$ (inside a reservoir),} \\ + 0 & \mbox{otherwise, } + \end{cases} + \end{equation*} +\end{document} + diff --git a/doc/src/Eqs/fix_eos_table_rx.jpg b/doc/src/Eqs/fix_eos_table_rx.jpg new file mode 100644 index 0000000000..0172281b6c Binary files /dev/null and b/doc/src/Eqs/fix_eos_table_rx.jpg differ diff --git a/doc/src/Eqs/fix_eos_table_rx.tex b/doc/src/Eqs/fix_eos_table_rx.tex new file mode 100644 index 0000000000..b8b486387d --- /dev/null +++ b/doc/src/Eqs/fix_eos_table_rx.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + U_{i} = \displaystyle\sum_{j=1}^{m} c_{i,j}(u_{j} + \Delta H_{f,j}) + \frac{3k_{b}T}{2} + Nk_{b}T \\ +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/fix_rx.jpg b/doc/src/Eqs/fix_rx.jpg new file mode 100644 index 0000000000..d63b983230 Binary files /dev/null and b/doc/src/Eqs/fix_rx.jpg differ diff --git a/doc/src/Eqs/fix_rx.tex b/doc/src/Eqs/fix_rx.tex new file mode 100644 index 0000000000..9400656038 --- /dev/null +++ b/doc/src/Eqs/fix_rx.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + k = AT^{n}e^{\frac{-E_{a}}{k_{B}T}} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/fix_rx_localTemp.jpg b/doc/src/Eqs/fix_rx_localTemp.jpg new file mode 100644 index 0000000000..2b5147b930 Binary files /dev/null and b/doc/src/Eqs/fix_rx_localTemp.jpg differ diff --git a/doc/src/Eqs/fix_rx_localTemp.tex b/doc/src/Eqs/fix_rx_localTemp.tex new file mode 100644 index 0000000000..cbb191f8f4 --- /dev/null +++ b/doc/src/Eqs/fix_rx_localTemp.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + \theta_i^{-1} = \frac{\sum_{j=1}\omega_{Lucy}\left(r_{ij}\right)\theta_j^{-1}}{\sum_{j=1}\omega_{Lucy}\left(r_{ij}\right)} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/fix_rx_localTemp2.jpg b/doc/src/Eqs/fix_rx_localTemp2.jpg new file mode 100644 index 0000000000..c838d7d453 Binary files /dev/null and b/doc/src/Eqs/fix_rx_localTemp2.jpg differ diff --git a/doc/src/Eqs/fix_rx_localTemp2.tex b/doc/src/Eqs/fix_rx_localTemp2.tex new file mode 100644 index 0000000000..0b524adc00 --- /dev/null +++ b/doc/src/Eqs/fix_rx_localTemp2.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + \omega_{Lucy}\left(r_{ij}\right) = \left( 1 + \frac{3r_{ij}}{r_c} \right) \left( 1 - \frac{r_{ij}}{r_c} \right)^3 +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/fix_rx_reaction.jpg b/doc/src/Eqs/fix_rx_reaction.jpg new file mode 100644 index 0000000000..e656cd8362 Binary files /dev/null and b/doc/src/Eqs/fix_rx_reaction.jpg differ diff --git a/doc/src/Eqs/fix_rx_reaction.tex b/doc/src/Eqs/fix_rx_reaction.tex new file mode 100644 index 0000000000..e9515f1326 --- /dev/null +++ b/doc/src/Eqs/fix_rx_reaction.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + \nu_{A}A + \nu_{B}B \rightarrow \nu_{C}C +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/fix_rx_reactionRate.jpg b/doc/src/Eqs/fix_rx_reactionRate.jpg new file mode 100644 index 0000000000..cf79c36089 Binary files /dev/null and b/doc/src/Eqs/fix_rx_reactionRate.jpg differ diff --git a/doc/src/Eqs/fix_rx_reactionRate.tex b/doc/src/Eqs/fix_rx_reactionRate.tex new file mode 100644 index 0000000000..4974ece1cb --- /dev/null +++ b/doc/src/Eqs/fix_rx_reactionRate.tex @@ -0,0 +1,9 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + r = k(T)[A]^{\nu_{A}}[B]^{\nu_{B}} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_exp6_rx.jpg b/doc/src/Eqs/pair_exp6_rx.jpg new file mode 100644 index 0000000000..6ee321ea6d Binary files /dev/null and b/doc/src/Eqs/pair_exp6_rx.jpg differ diff --git a/doc/src/Eqs/pair_exp6_rx.tex b/doc/src/Eqs/pair_exp6_rx.tex new file mode 100644 index 0000000000..fe36aeaa34 --- /dev/null +++ b/doc/src/Eqs/pair_exp6_rx.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} +\pagestyle{empty} +\begin{document} + +$$ +U_{ij}(r) = \frac{\epsilon}{\alpha-6}\{6exp[\alpha(1-\frac{r_{ij}}{R_{m}})]-\alpha(\frac{R_{m}}{r_{ij}})^6\} +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_exp6_rx_oneFluid.jpg b/doc/src/Eqs/pair_exp6_rx_oneFluid.jpg new file mode 100644 index 0000000000..5059c02e90 Binary files /dev/null and b/doc/src/Eqs/pair_exp6_rx_oneFluid.jpg differ diff --git a/doc/src/Eqs/pair_exp6_rx_oneFluid.tex b/doc/src/Eqs/pair_exp6_rx_oneFluid.tex new file mode 100644 index 0000000000..2f2efd4fa1 --- /dev/null +++ b/doc/src/Eqs/pair_exp6_rx_oneFluid.tex @@ -0,0 +1,11 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + R_{m}^{3} &=& \displaystyle\sum_{a}\displaystyle\sum_{b} x_{a}x_{b}R_{m,ab}^{3} \\ + \epsilon &=& \frac{1}{R_{m}^{3}}\displaystyle\sum_{a}\displaystyle\sum_{b} x_{a}x_{b}\epsilon_{ab}R_{m,ab}^{3} \\ + \alpha &=& \frac{1}{\epsilon R_{m}^{3}}\displaystyle\sum_{a}\displaystyle\sum_{b} x_{a}x_{b}\alpha_{ab}\epsilon_{ab}R_{m,ab}^{3} \\ +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_exp6_rx_oneFluid2.jpg b/doc/src/Eqs/pair_exp6_rx_oneFluid2.jpg new file mode 100644 index 0000000000..7144aea4f4 Binary files /dev/null and b/doc/src/Eqs/pair_exp6_rx_oneFluid2.jpg differ diff --git a/doc/src/Eqs/pair_exp6_rx_oneFluid2.tex b/doc/src/Eqs/pair_exp6_rx_oneFluid2.tex new file mode 100644 index 0000000000..1d1214f229 --- /dev/null +++ b/doc/src/Eqs/pair_exp6_rx_oneFluid2.tex @@ -0,0 +1,11 @@ +\documentstyle[12pt]{article} +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + \epsilon_{ab} &=& \sqrt{\epsilon_{a}\epsilon_{b}} \\ + R_{m,ab} &=& \frac{R_{m,a}+R_{m,b}}{2} \\ + \alpha_{ab} &=& \sqrt{\alpha_{a}\alpha_{b}} \\ +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_morse_soft.jpg b/doc/src/Eqs/pair_morse_soft.jpg new file mode 100644 index 0000000000..9c8321eba7 Binary files /dev/null and b/doc/src/Eqs/pair_morse_soft.jpg differ diff --git a/doc/src/Eqs/pair_multi_lucy.jpg b/doc/src/Eqs/pair_multi_lucy.jpg index 7bc8174ad7..b73cc69236 100644 Binary files a/doc/src/Eqs/pair_multi_lucy.jpg and b/doc/src/Eqs/pair_multi_lucy.jpg differ diff --git a/doc/src/Eqs/pair_multi_lucy2.jpg b/doc/src/Eqs/pair_multi_lucy2.jpg index 04567dda6b..2edf0b56fd 100644 Binary files a/doc/src/Eqs/pair_multi_lucy2.jpg and b/doc/src/Eqs/pair_multi_lucy2.jpg differ diff --git a/doc/src/Eqs/pair_multi_lucy_energy.jpg b/doc/src/Eqs/pair_multi_lucy_energy.jpg index 0f39011e1d..4cd5251b6e 100644 Binary files a/doc/src/Eqs/pair_multi_lucy_energy.jpg and b/doc/src/Eqs/pair_multi_lucy_energy.jpg differ diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 45caeb69e4..43551786c2 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS-ICMS Users Manual - + @@ -21,7 +21,7 @@

    LAMMPS-ICMS Documentation :c,h3 -14 May 2016 version :c,h4 +8 Jun 2016 version :c,h4 Version info: :h4 @@ -155,12 +155,11 @@ END_RST --> 5.1 "Measuring performance"_acc_1 :ulb,b 5.2 "Algorithms and code options to boost performace"_acc_2 :b 5.3 "Accelerator packages with optimized styles"_acc_3 :b - 5.3.1 "USER-CUDA package"_accelerate_cuda.html :ulb,b - 5.3.2 "GPU package"_accelerate_gpu.html :b - 5.3.3 "USER-INTEL package"_accelerate_intel.html :b - 5.3.4 "KOKKOS package"_accelerate_kokkos.html :b - 5.3.5 "USER-OMP package"_accelerate_omp.html :b - 5.3.6 "OPT package"_accelerate_opt.html :ule,b + 5.3.1 "GPU package"_accelerate_gpu.html :ulb,b + 5.3.2 "USER-INTEL package"_accelerate_intel.html :b + 5.3.3 "KOKKOS package"_accelerate_kokkos.html :b + 5.3.4 "USER-OMP package"_accelerate_omp.html :b + 5.3.5 "OPT package"_accelerate_opt.html :ule,b 5.4 "Comparison of various accelerator packages"_acc_4 :ule,b "How-to discussions"_Section_howto.html :l 6.1 "Restarting a simulation"_howto_1 :ulb,b diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 82a2eb2009..1f15d000a3 100644 Binary files a/doc/src/PDF/colvars-refman-lammps.pdf and b/doc/src/PDF/colvars-refman-lammps.pdf differ diff --git a/doc/src/Section_accelerate.txt b/doc/src/Section_accelerate.txt index 6bdbb3b121..9977853b43 100644 --- a/doc/src/Section_accelerate.txt +++ b/doc/src/Section_accelerate.txt @@ -24,12 +24,11 @@ multi-core CPUs, GPUs, and Intel Xeon Phi coprocessors. 5.1 "Measuring performance"_#acc_1 :ulb,l 5.2 "Algorithms and code options to boost performace"_#acc_2 :l 5.3 "Accelerator packages with optimized styles"_#acc_3 :l - 5.3.1 "USER-CUDA package"_accelerate_cuda.html :ulb,l - 5.3.2 "GPU package"_accelerate_gpu.html :l - 5.3.3 "USER-INTEL package"_accelerate_intel.html :l - 5.3.4 "KOKKOS package"_accelerate_kokkos.html :l - 5.3.5 "USER-OMP package"_accelerate_omp.html :l - 5.3.6 "OPT package"_accelerate_opt.html :l,ule + 5.3.1 "GPU package"_accelerate_gpu.html :l + 5.3.2 "USER-INTEL package"_accelerate_intel.html :l + 5.3.3 "KOKKOS package"_accelerate_kokkos.html :l + 5.3.4 "USER-OMP package"_accelerate_omp.html :l + 5.3.5 "OPT package"_accelerate_opt.html :l,ule 5.4 "Comparison of various accelerator packages"_#acc_4 :l,ule The "Benchmark page"_http://lammps.sandia.gov/bench.html of the LAMMPS @@ -157,7 +156,6 @@ packages"_Section_packages.html. These are the accelerator packages currently in LAMMPS, either as standard or user packages: -"USER-CUDA"_accelerate_cuda.html : for NVIDIA GPUs "GPU"_accelerate_gpu.html : for NVIDIA GPUs as well as OpenCL support "USER-INTEL"_accelerate_intel.html : for Intel CPUs and Intel Xeon Phi "KOKKOS"_accelerate_kokkos.html : for GPUs, Intel Xeon Phi, and OpenMP threading @@ -168,7 +166,7 @@ Inverting this list, LAMMPS currently has acceleration support for three kinds of hardware, via the listed packages: Many-core CPUs : "USER-INTEL"_accelerate_intel.html, "KOKKOS"_accelerate_kokkos.html, "USER-OMP"_accelerate_omp.html, "OPT"_accelerate_opt.html packages -NVIDIA GPUs : "USER-CUDA"_accelerate_cuda.html, "GPU"_accelerate_gpu.html, "KOKKOS"_accelerate_kokkos.html packages +NVIDIA GPUs : "GPU"_accelerate_gpu.html, "KOKKOS"_accelerate_kokkos.html packages Intel Phi : "USER-INTEL"_accelerate_intel.html, "KOKKOS"_accelerate_kokkos.html packages :tb(s=:) Which package is fastest for your hardware may depend on the size @@ -186,7 +184,6 @@ same, except for precision and round-off effects. For example, all of these styles are accelerated variants of the Lennard-Jones "pair_style lj/cut"_pair_lj.html: -"pair_style lj/cut/cuda"_pair_lj.html "pair_style lj/cut/gpu"_pair_lj.html "pair_style lj/cut/intel"_pair_lj.html "pair_style lj/cut/kk"_pair_lj.html @@ -205,7 +202,7 @@ package and are explained in the individual accelerator doc pages, listed above: build the accelerator library | - only for USER-CUDA and GPU packages | + only for GPU package | install the accelerator package | make yes-opt, make yes-user-intel, etc | add compile/link flags to Makefile.machine | @@ -218,7 +215,7 @@ run a LAMMPS simulation | mpirun -np 32 lmp_machine -in in.script | enable the accelerator package | via "-c on" and "-k on" "command-line switches"_Section_start.html#start_7,
    - only for USER-CUDA and KOKKOS packages | + only for KOKKOS package | set any needed options for the package | via "-pk" "command-line switch"_Section_start.html#start_7 or "package"_package.html command,
    @@ -250,18 +247,16 @@ option for the KOKKOS package. These are the exceptions. You cannot build a single executable with: both the USER-INTEL Phi and KOKKOS Phi options -the USER-INTEL Phi or Kokkos Phi option, and either the USER-CUDA or GPU packages :ul +the USER-INTEL Phi or Kokkos Phi option, and the GPU package :ul See the examples/accelerate/README and make.list files for sample Make.py commands that build LAMMPS with any or all of the accelerator packages. As an example, here is a command that builds with all the -GPU related packages installed (USER-CUDA, GPU, KOKKOS with Cuda), -including settings to build the needed auxiliary USER-CUDA and GPU -libraries for Kepler GPUs: +GPU related packages installed (GPU, KOKKOS with Cuda), including +settings to build the needed auxiliary GPU libraries for Kepler GPUs: -Make.py -j 16 -p omp gpu cuda kokkos -cc nvcc wrap=mpi \ - -cuda mode=double arch=35 -gpu mode=double arch=35 \\ - -kokkos cuda arch=35 lib-all file mpi :pre +Make.py -j 16 -p omp gpu kokkos -cc nvcc wrap=mpi \ + -gpu mode=double arch=35 -kokkos cuda arch=35 lib-all file mpi :pre The examples/accelerate directory also has input scripts that can be used with all of the accelerator packages. See its README file for @@ -281,10 +276,9 @@ size and number of compute nodes, on different hardware platforms. Here is a brief summary of what the various packages provide. Details are in the individual accelerator sections. -Styles with a "cuda" or "gpu" suffix are part of the USER-CUDA or GPU -packages, and can be run on NVIDIA GPUs. The speed-up on a GPU -depends on a variety of factors, discussed in the accelerator -sections. :ulb,l +Styles with a "gpu" suffix are part of the GPU package, and can be run +on NVIDIA GPUs. The speed-up on a GPU depends on a variety of +factors, discussed in the accelerator sections. :ulb,l Styles with an "intel" suffix are part of the USER-INTEL package. These styles support vectorized single and mixed precision @@ -343,31 +337,28 @@ section below for examples where this has been done. The GPU package allows you to assign multiple CPUs (cores) to a single GPU (a common configuration for "hybrid" nodes that contain multicore -CPU(s) and GPU(s)) and works effectively in this mode. The USER-CUDA -package does not allow this; you can only use one CPU per GPU. :ulb,l +CPU(s) and GPU(s)) and works effectively in this mode. :ulb,l The GPU package moves per-atom data (coordinates, forces) -back-and-forth between the CPU and GPU every timestep. The USER-CUDA -package only does this on timesteps when a CPU calculation is required -(e.g. to invoke a fix or compute that is non-GPU-ized). Hence, if you -can formulate your input script to only use GPU-ized fixes and -computes, and avoid doing I/O too often (thermo output, dump file -snapshots, restart files), then the data transfer cost of the -USER-CUDA package can be very low, causing it to run faster than the +back-and-forth between the CPU and GPU every timestep. The +KOKKOS/CUDA package only does this on timesteps when a CPU calculation +is required (e.g. to invoke a fix or compute that is non-GPU-ized). +Hence, if you can formulate your input script to only use GPU-ized +fixes and computes, and avoid doing I/O too often (thermo output, dump +file snapshots, restart files), then the data transfer cost of the +KOKKOS/CUDA package can be very low, causing it to run faster than the GPU package. :l -The GPU package is often faster than the USER-CUDA package, if the +The GPU package is often faster than the KOKKOS/CUDA package, if the number of atoms per GPU is smaller. The crossover point, in terms of -atoms/GPU at which the USER-CUDA package becomes faster depends +atoms/GPU at which the KOKKOS/CUDA package becomes faster depends strongly on the pair style. For example, for a simple Lennard Jones system the crossover (in single precision) is often about 50K-100K atoms per GPU. When performing double precision calculations the crossover point can be significantly smaller. :l Both packages compute bonded interactions (bonds, angles, etc) on the -CPU. This means a model with bonds will force the USER-CUDA package -to transfer per-atom data back-and-forth between the CPU and GPU every -timestep. If the GPU package is running with several MPI processes +CPU. If the GPU package is running with several MPI processes assigned to one GPU, the cost of computing the bonded interactions is spread across more CPUs and hence the GPU package can run faster. :l @@ -382,34 +373,7 @@ full 16 lanes to each of the PCIe 2.0 16x slots. :l,ule [Differences between the two packages:] The GPU package accelerates only pair force, neighbor list, and PPPM -calculations. The USER-CUDA package currently supports a wider range -of pair styles and can also accelerate many fix styles and some -compute styles, as well as neighbor list and PPPM calculations. :ulb,l - -The USER-CUDA package does not support acceleration for minimization. :l - -The USER-CUDA package does not support hybrid pair styles. :l - -The USER-CUDA package can order atoms in the neighbor list differently -from run to run resulting in a different order for force accumulation. :l - -The USER-CUDA package has a limit on the number of atom types that can be -used in a simulation. :l +calculations. :ulb,l The GPU package requires neighbor lists to be built on the CPU when using -exclusion lists or a triclinic simulation box. :l - -The GPU package uses more GPU memory than the USER-CUDA package. This -is generally not a problem since typical runs are computation-limited -rather than memory-limited. :l,ule - -[Examples:] - -The LAMMPS distribution has two directories with sample input scripts -for the GPU and USER-CUDA packages. - -lammps/examples/gpu = GPU package files -lammps/examples/USER/cuda = USER-CUDA package files :ul - -These contain input scripts for identical systems, so they can be used -to benchmark the performance of both packages on your system. +exclusion lists or a triclinic simulation box. :l,ule diff --git a/doc/src/Section_commands.txt b/doc/src/Section_commands.txt index 7bd8fde28d..be1649b315 100644 --- a/doc/src/Section_commands.txt +++ b/doc/src/Section_commands.txt @@ -482,20 +482,19 @@ See the "fix"_fix.html command for one-line descriptions of each style or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. -This is indicated by additional letters in parenthesis: c = USER-CUDA, -g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. +This is indicated by additional letters in parenthesis: g = GPU, i = +USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "adapt"_fix_adapt.html, -"addforce (c)"_fix_addforce.html, +"addforce"_fix_addforce.html, "append/atoms"_fix_append_atoms.html, "atom/swap"_fix_atom_swap.html, -"aveforce (c)"_fix_aveforce.html, +"aveforce"_fix_aveforce.html, "ave/atom"_fix_ave_atom.html, "ave/chunk"_fix_ave_chunk.html, "ave/correlate"_fix_ave_correlate.html, "ave/histo"_fix_ave_histo.html, "ave/histo/weight"_fix_ave_histo.html, -"ave/spatial"_fix_ave_spatial.html, "ave/time"_fix_ave_time.html, "balance"_fix_balance.html, "bond/break"_fix_bond_break.html, @@ -508,13 +507,13 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "dt/reset"_fix_dt_reset.html, "efield"_fix_efield.html, "ehex"_fix_ehex.html, -"enforce2d (c)"_fix_enforce2d.html, +"enforce2d"_fix_enforce2d.html, "evaporate"_fix_evaporate.html, "external"_fix_external.html, -"freeze (c)"_fix_freeze.html, +"freeze"_fix_freeze.html, "gcmc"_fix_gcmc.html, "gld"_fix_gld.html, -"gravity (co)"_fix_gravity.html, +"gravity (o)"_fix_gravity.html, "heat"_fix_heat.html, "indent"_fix_indent.html, "langevin (k)"_fix_langevin.html, @@ -528,11 +527,11 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "nph/asphere (o)"_fix_nph_asphere.html, "nph/body"_fix_nph_body.html, "nph/sphere (o)"_fix_nph_sphere.html, -"npt (ckio)"_fix_nh.html, +"npt (kio)"_fix_nh.html, "npt/asphere (o)"_fix_npt_asphere.html, "npt/body"_fix_npt_body.html, "npt/sphere (o)"_fix_npt_sphere.html, -"nve (ckio)"_fix_nve.html, +"nve (kio)"_fix_nve.html, "nve/asphere (i)"_fix_nve_asphere.html, "nve/asphere/noforce"_fix_nve_asphere_noforce.html, "nve/body"_fix_nve_body.html, @@ -541,7 +540,7 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "nve/noforce"_fix_nve_noforce.html, "nve/sphere (o)"_fix_nve_sphere.html, "nve/tri"_fix_nve_tri.html, -"nvt (ciko)"_fix_nh.html, +"nvt (iko)"_fix_nh.html, "nvt/asphere (o)"_fix_nvt_asphere.html, "nvt/body"_fix_nvt_body.html, "nvt/sllod (io)"_fix_nvt_sllod.html, @@ -573,18 +572,18 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "rigid/small/npt"_fix_rigid.html, "rigid/small/nve"_fix_rigid.html, "rigid/small/nvt"_fix_rigid.html, -"setforce (ck)"_fix_setforce.html, -"shake (c)"_fix_shake.html, +"setforce (k)"_fix_setforce.html, +"shake"_fix_shake.html, "spring"_fix_spring.html, "spring/rg"_fix_spring_rg.html, "spring/self"_fix_spring_self.html, "srd"_fix_srd.html, "store/force"_fix_store_force.html, "store/state"_fix_store_state.html, -"temp/berendsen (c)"_fix_temp_berendsen.html, +"temp/berendsen"_fix_temp_berendsen.html, "temp/csld"_fix_temp_csvr.html, "temp/csvr"_fix_temp_csvr.html, -"temp/rescale (c)"_fix_temp_rescale.html, +"temp/rescale"_fix_temp_rescale.html, "tfmc"_fix_tfmc.html, "thermal/conductivity"_fix_thermal_conductivity.html, "tmd"_fix_tmd.html, @@ -592,7 +591,7 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "tune/kspace"_fix_tune_kspace.html, "vector"_fix_vector.html, "viscosity"_fix_viscosity.html, -"viscous (c)"_fix_viscous.html, +"viscous"_fix_viscous.html, "wall/colloid"_fix_wall.html, "wall/gran"_fix_wall_gran.html, "wall/harmonic"_fix_wall.html, @@ -612,13 +611,13 @@ package"_Section_start.html#start_3. "addtorque"_fix_addtorque.html, "atc"_fix_atc.html, "ave/correlate/long"_fix_ave_correlate_long.html, -"ave/spatial/sphere"_fix_ave_spatial_sphere.html, "colvars"_fix_colvars.html, "drude"_fix_drude.html, "drude/transform/direct"_fix_drude_transform.html, "drude/transform/reverse"_fix_drude_transform.html, "eos/cv"_fix_eos_cv.html, "eos/table"_fix_eos_table.html, +"eos/table/rx"_fix_eos_table_rx.html, "gle"_fix_gle.html, "imd"_fix_imd.html, "ipi"_fix_ipi.html, @@ -647,6 +646,7 @@ package"_Section_start.html#start_3. "qtb"_fix_qtb.html, "reax/c/bonds"_fix_reaxc_bonds.html, "reax/c/species"_fix_reaxc_species.html, +"rx"_fix_rx.html, "saed/vtk"_fix_saed_vtk.html, "shardlow"_fix_shardlow.html, "smd"_fix_smd.html, @@ -671,7 +671,7 @@ each style or click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "angle"_compute_angle.html, @@ -717,10 +717,10 @@ KOKKOS, o = USER-OMP, t = OPT. "orientorder/atom"_compute_orientorder_atom.html, "pair"_compute_pair.html, "pair/local"_compute_pair_local.html, -"pe (c)"_compute_pe.html, +"pe"_compute_pe.html, "pe/atom"_compute_pe_atom.html, "plasticity/atom"_compute_plasticity_atom.html, -"pressure (c)"_compute_pressure.html, +"pressure"_compute_pressure.html, "property/atom"_compute_property_atom.html, "property/local"_compute_property_local.html, "property/chunk"_compute_property_chunk.html, @@ -732,13 +732,13 @@ KOKKOS, o = USER-OMP, t = OPT. "snad/atom"_compute_sna_atom.html, "snav/atom"_compute_sna_atom.html, "stress/atom"_compute_stress_atom.html, -"temp (ck)"_compute_temp.html, +"temp (k)"_compute_temp.html, "temp/asphere"_compute_temp_asphere.html, "temp/body"_compute_temp_body.html, "temp/chunk"_compute_temp_chunk.html, "temp/com"_compute_temp_com.html, "temp/deform"_compute_temp_deform.html, -"temp/partial (c)"_compute_temp_partial.html, +"temp/partial"_compute_temp_partial.html, "temp/profile"_compute_temp_profile.html, "temp/ramp"_compute_temp_ramp.html, "temp/region"_compute_temp_region.html, @@ -805,7 +805,7 @@ potentials. Click on the style itself for a full description. Many of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_pair_none.html, @@ -819,15 +819,15 @@ KOKKOS, o = USER-OMP, t = OPT. "body"_pair_body.html, "bop"_pair_bop.html, "born (go)"_pair_born.html, -"born/coul/long (cgo)"_pair_born.html, +"born/coul/long (go)"_pair_born.html, "born/coul/long/cs"_pair_born.html, "born/coul/msm (o)"_pair_born.html, "born/coul/wolf (go)"_pair_born.html, "brownian (o)"_pair_brownian.html, "brownian/poly (o)"_pair_brownian.html, -"buck (cgkio)"_pair_buck.html, -"buck/coul/cut (cgkio)"_pair_buck.html, -"buck/coul/long (cgkio)"_pair_buck.html, +"buck (gkio)"_pair_buck.html, +"buck/coul/cut (gkio)"_pair_buck.html, +"buck/coul/long (gkio)"_pair_buck.html, "buck/coul/long/cs"_pair_buck.html, "buck/coul/msm (o)"_pair_buck.html, "buck/long/coul/long (o)"_pair_buck_long.html, @@ -845,55 +845,55 @@ KOKKOS, o = USER-OMP, t = OPT. "dpd (o)"_pair_dpd.html, "dpd/tstat (o)"_pair_dpd.html, "dsmc"_pair_dsmc.html, -"eam (cgkot)"_pair_eam.html, -"eam/alloy (cgkot)"_pair_eam.html, -"eam/fs (cgkot)"_pair_eam.html, +"eam (gkot)"_pair_eam.html, +"eam/alloy (gkot)"_pair_eam.html, +"eam/fs (gkot)"_pair_eam.html, "eim (o)"_pair_eim.html, "gauss (go)"_pair_gauss.html, "gayberne (gio)"_pair_gayberne.html, "gran/hertz/history (o)"_pair_gran.html, -"gran/hooke (co)"_pair_gran.html, +"gran/hooke (o)"_pair_gran.html, "gran/hooke/history (o)"_pair_gran.html, "hbond/dreiding/lj (o)"_pair_hbond_dreiding.html, "hbond/dreiding/morse (o)"_pair_hbond_dreiding.html, "kim"_pair_kim.html, "lcbop"_pair_lcbop.html, "line/lj"_pair_line_lj.html, -"lj/charmm/coul/charmm (cko)"_pair_charmm.html, -"lj/charmm/coul/charmm/implicit (cko)"_pair_charmm.html, -"lj/charmm/coul/long (cgiko)"_pair_charmm.html, +"lj/charmm/coul/charmm (ko)"_pair_charmm.html, +"lj/charmm/coul/charmm/implicit (ko)"_pair_charmm.html, +"lj/charmm/coul/long (giko)"_pair_charmm.html, "lj/charmm/coul/msm"_pair_charmm.html, -"lj/class2 (cgko)"_pair_class2.html, -"lj/class2/coul/cut (cko)"_pair_class2.html, -"lj/class2/coul/long (cgko)"_pair_class2.html, +"lj/class2 (gko)"_pair_class2.html, +"lj/class2/coul/cut (ko)"_pair_class2.html, +"lj/class2/coul/long (gko)"_pair_class2.html, "lj/cubic (go)"_pair_lj_cubic.html, -"lj/cut (cgikot)"_pair_lj.html, -"lj/cut/coul/cut (cgko)"_pair_lj.html, -"lj/cut/coul/debye (cgko)"_pair_lj.html, +"lj/cut (gikot)"_pair_lj.html, +"lj/cut/coul/cut (gko)"_pair_lj.html, +"lj/cut/coul/debye (gko)"_pair_lj.html, "lj/cut/coul/dsf (gko)"_pair_lj.html, -"lj/cut/coul/long (cgikot)"_pair_lj.html, +"lj/cut/coul/long (gikot)"_pair_lj.html, "lj/cut/coul/long/cs"_pair_lj.html, "lj/cut/coul/msm (go)"_pair_lj.html, "lj/cut/dipole/cut (go)"_pair_dipole.html, "lj/cut/dipole/long"_pair_dipole.html, "lj/cut/tip4p/cut (o)"_pair_lj.html, "lj/cut/tip4p/long (ot)"_pair_lj.html, -"lj/expand (cgko)"_pair_lj_expand.html, -"lj/gromacs (cgko)"_pair_gromacs.html, -"lj/gromacs/coul/gromacs (cko)"_pair_gromacs.html, +"lj/expand (gko)"_pair_lj_expand.html, +"lj/gromacs (gko)"_pair_gromacs.html, +"lj/gromacs/coul/gromacs (ko)"_pair_gromacs.html, "lj/long/coul/long (o)"_pair_lj_long.html, "lj/long/dipole/long"_pair_dipole.html, "lj/long/tip4p/long"_pair_lj_long.html, -"lj/smooth (co)"_pair_lj_smooth.html, +"lj/smooth (o)"_pair_lj_smooth.html, "lj/smooth/linear (o)"_pair_lj_smooth_linear.html, -"lj96/cut (cgo)"_pair_lj96.html, +"lj96/cut (go)"_pair_lj96.html, "lubricate (o)"_pair_lubricate.html, "lubricate/poly (o)"_pair_lubricate.html, "lubricateU"_pair_lubricateU.html, "lubricateU/poly"_pair_lubricateU.html, "meam (o)"_pair_meam.html, "mie/cut (o)"_pair_mie.html, -"morse (cgot)"_pair_morse.html, +"morse (got)"_pair_morse.html, "nb3b/harmonic (o)"_pair_nb3b_harmonic.html, "nm/cut (o)"_pair_nm.html, "nm/cut/coul/cut (o)"_pair_nm.html, @@ -907,9 +907,9 @@ KOKKOS, o = USER-OMP, t = OPT. "resquared (go)"_pair_resquared.html, "snap"_pair_snap.html, "soft (go)"_pair_soft.html, -"sw (cgkio)"_pair_sw.html, +"sw (gkio)"_pair_sw.html, "table (gko)"_pair_table.html, -"tersoff (cgkio)"_pair_tersoff.html, +"tersoff (gkio)"_pair_tersoff.html, "tersoff/mod (gko)"_pair_tersoff_mod.html, "tersoff/zbl (gko)"_pair_tersoff_zbl.html, "tip4p/cut (o)"_pair_coul.html, @@ -934,6 +934,7 @@ package"_Section_start.html#start_3. "eam/cd (o)"_pair_eam.html, "edip (o)"_pair_edip.html, "eff/cut"_pair_eff.html, +"exp6/rx"_pair_exp6_rx.html, "gauss/cut"_pair_gauss.html, "lennard/mdf"_pair_mdf.html, "list"_pair_list.html, @@ -955,6 +956,7 @@ package"_Section_start.html#start_3. "morse/smooth/linear"_pair_morse.html, "morse/soft"_pair_morse.html, "multi/lucy"_pair_multi_lucy.html, +"multi/lucy/rx"_pair_multi_lucy_rx.html, "quip"_pair_quip.html, "reax/c"_pair_reax_c.html, "smd/hertz"_pair_smd_hertz.html, @@ -969,6 +971,7 @@ package"_Section_start.html#start_3. "sph/taitwater"_pair_sph_taitwater.html, "sph/taitwater/morris"_pair_sph_taitwater_morris.html, "srp"_pair_srp.html, +"table/rx"_pair_table_rx.html, "tersoff/table (o)"_pair_tersoff.html, "thole"_pair_thole.html, "tip4p/long/soft (o)"_pair_lj_soft.html :tb(c=4,ea=c) @@ -982,7 +985,7 @@ potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT. "none"_bond_none.html, @@ -1013,8 +1016,8 @@ angle potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT. +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT. "none"_angle_none.html, "zero"_angle_zero.html, @@ -1049,8 +1052,8 @@ of dihedral potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT. +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT. "none"_dihedral_none.html, "zero"_dihedral_zero.html, @@ -1081,8 +1084,8 @@ of improper potentials. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT. +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT. "none"_improper_none.html, "zero"_improper_zero.html, @@ -1110,14 +1113,14 @@ Kspace solvers. Click on the style itself for a full description. Some of the styles have accelerated versions, which can be used if LAMMPS is built with the "appropriate accelerated package"_Section_accelerate.html. This is indicated by additional -letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k = -KOKKOS, o = USER-OMP, t = OPT. +letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o = +USER-OMP, t = OPT. "ewald (o)"_kspace_style.html, "ewald/disp"_kspace_style.html, "msm (o)"_kspace_style.html, "msm/cg (o)"_kspace_style.html, -"pppm (cgo)"_kspace_style.html, +"pppm (go)"_kspace_style.html, "pppm/cg (o)"_kspace_style.html, "pppm/disp"_kspace_style.html, "pppm/disp/tip4p"_kspace_style.html, diff --git a/doc/src/Section_example.txt b/doc/src/Section_example.txt index f967b4ac78..90b6ff1447 100644 --- a/doc/src/Section_example.txt +++ b/doc/src/Section_example.txt @@ -57,7 +57,6 @@ colloid: big colloid particles in a small particle solvent, 2d system comb: models using the COMB potential coreshell: core/shell model using CORESHELL package crack: crack propagation in a 2d solid -cuda: use of the USER-CUDA package for GPU acceleration deposit: deposit atoms and molecules on a surface dipole: point dipolar particles, 2d system dreiding: methanol via Dreiding FF diff --git a/doc/src/Section_packages.txt b/doc/src/Section_packages.txt index a048bf0fee..1bf9dd3c38 100644 --- a/doc/src/Section_packages.txt +++ b/doc/src/Section_packages.txt @@ -336,8 +336,8 @@ Contents: Dozens of pair styles and a version of the PPPM long-range Coulombic solver for NVIDIA GPUs. All of them have a "gpu" in their style name. "Section accelerate gpu"_accelerate_gpu.html gives details of what hardware and Cuda software is required on your system, -and how to build and use this package. See the KOKKOS and USER-CUDA -packages, which also have GPU-enabled styles. +and how to build and use this package. See the KOKKOS package, which +also has GPU-enabled styles. Building LAMMPS with the GPU package requires first building the GPU library itself, which is a set of C and Cuda files in lib/gpu. @@ -454,9 +454,8 @@ multicore CPUs (via OpenMP), NVIDIA GPUs, or the Intel Xeon Phi (in native mode). All of them have a "kk" in their style name. "Section accelerate kokkos"_accelerate_kokkos.html gives details of what hardware and software is required on your system, and how to build and -use this package. See the GPU, OPT, USER-CUDA, USER-INTEL, USER-OMP -packages, which also provide optimizations for the same range of -hardware. +use this package. See the GPU, OPT, USER-INTEL, USER-OMP packages, +which also provide optimizations for the same range of hardware. Building with the KOKKOS package requires choosing which of 3 hardware options you are optimizing for: CPU acceleration via OpenMP, GPU @@ -1143,9 +1142,8 @@ Package, Description, Author(s), Doc page, Example, Pic/movie, Library "USER-AWPMD"_#USER-AWPMD, wave-packet MD, Ilya Valuev (JIHT), "pair_style awpmd/cut"_pair_awpmd.html, USER/awpmd, -, lib/awpmd "USER-CG-CMM"_#USER-CG-CMM, coarse-graining model, Axel Kohlmeyer (Temple U), "pair_style lj/sdk"_pair_sdk.html, USER/cg-cmm, "cg"_cg, - "USER-COLVARS"_#USER-COLVARS, collective variables, Fiorin & Henin & Kohlmeyer (2), "fix colvars"_fix_colvars.html, USER/colvars, "colvars"_colvars, lib/colvars -"USER-CUDA"_#USER-CUDA, NVIDIA GPU styles, Christian Trott (U Tech Ilmenau), "Section accelerate"_accelerate_cuda.html, USER/cuda, -, lib/cuda "USER-DIFFRACTION"_#USER-DIFFRACTION, virutal x-ray and electron diffraction, Shawn Coleman (ARL),"compute xrd"_compute_xrd.html, USER/diffraction, -, - -"USER-DPD"_#USER-DPD, dissipative particle dynamics (DPD), Larentzos & Mattox & Brennan (5), src/USER-DPD/README, USER/dpd, -, - +"USER-DPD"_#USER-DPD, reactive dissipative particle dynamics (DPD), Larentzos & Mattox & Brennan (5), src/USER-DPD/README, USER/dpd, -, - "USER-DRUDE"_#USER-DRUDE, Drude oscillators, Dequidt & Devemy & Padua (3), "tutorial"_tutorial_drude.html, USER/drude, -, - "USER-EFF"_#USER-EFF, electron force field, Andres Jaramillo-Botero (Caltech), "pair_style eff/cut"_pair_eff.html, USER/eff, "eff"_eff, - "USER-FEP"_#USER-FEP, free energy perturbation, Agilio Padua (U Blaise Pascal Clermont-Ferrand), "compute fep"_compute_fep.html, USER/fep, -, - @@ -1206,8 +1204,7 @@ documentation provided within the package. The "Example" column is a sub-directory in the examples directory of the distribution which has an input script that uses the package. -E.g. "peptide" refers to the examples/peptide directory. USER/cuda -refers to the examples/USER/cuda directory. +E.g. "peptide" refers to the examples/peptide directory. The "Library" column lists an external library which must be built first and which LAMMPS links to when it is built. If it is listed as @@ -1309,32 +1306,6 @@ have questions. :line -USER-CUDA package :link(USER-CUDA),h5 - -This package provides acceleration of various LAMMPS pair styles, fix -styles, compute styles, and long-range Coulombics via PPPM for NVIDIA -GPUs. - -See this section of the manual to get started: - -"Section_accelerate"_Section_accelerate.html#acc_7 - -There are example scripts for using this package in -examples/USER/cuda. - -This package uses an external library in lib/cuda which must be -compiled before making LAMMPS. See the lib/cuda/README file and the -LAMMPS manual for information on building LAMMPS with external -libraries. - -The person who created this package is Christian Trott at the -University of Technology Ilmenau, Germany (christian.trott at -tu-ilmenau.de). Contact him directly if you have questions. - -Examples: examples/accelerate, bench/FERMI, bench/KEPLER - -:line - USER-DIFFRACTION package :link(USER-DIFFRACTION),h5 Contents: This packages implements two computes and a fix for @@ -1356,9 +1327,11 @@ USER-DPD package :link(USER-DPD),h5 Contents: DPD stands for dissipative particle dynamics, This package implements DPD for isothermal, isoenergetic, isobaric and isenthalpic -conditions. The DPD equations of motion are integrated efficiently -through the Shardlow splitting algorithm. See src/USER-DPD/README for -more details. +conditions. It also has extensions for performing reactive DPD, where +each particle has internal state for multiple species and a coupled +set of chemical reaction ODEs are integrated each timestep. The DPD +equations of motion are integrated efficiently through the Shardlow +splitting algorithm. See src/USER-DPD/README for more details. Supporting info: /src/USER-DPD/README, "compute dpd"_compute_dpd.html "compute dpd/atom"_compute_dpd_atom.html diff --git a/doc/src/Section_start.txt b/doc/src/Section_start.txt index 634e40d587..0205597ed7 100644 --- a/doc/src/Section_start.txt +++ b/doc/src/Section_start.txt @@ -325,10 +325,9 @@ long time (more than 2 billion atoms, more than 2 billion timesteps). See the "Additional build tips"_#start_2_4 section below for more details on these settings. -Note that two packages, USER-ATC and USER-CUDA are not currently -compatible with -DLAMMPS_BIGBIG. Also the GPU package requires the -lib/gpu library to be compiled with the same setting, or the link will -fail. +Note that the USER-ATC package is not currently compatible with +-DLAMMPS_BIGBIG. Also the GPU package requires the lib/gpu library to +be compiled with the same setting, or the link will fail. The -DLAMMPS_LONGLONG_TO_LONG setting may be needed if your system or MPI version does not recognize "long long" data types. In this case a @@ -1264,7 +1263,6 @@ At run time, LAMMPS recognizes several optional command-line switches which may be used in any order. Either the full word or a one-or-two letter abbreviation can be used: --c or -cuda -e or -echo -h or -help -i or -in @@ -1288,16 +1286,6 @@ mpirun -np 16 lmp_ibm -var f tmp.out -log my.log -screen none -in in.alloy :pre Here are the details on the options: --cuda on/off :pre - -Explicitly enable or disable CUDA support, as provided by the -USER-CUDA package. Even if LAMMPS is built with this package, as -described above in "Section 2.3"_#start_3, this switch must be set to -enable running with the CUDA-enabled styles the package provides. If -the switch is not set (the default), LAMMPS will operate as if the -USER-CUDA package were not installed; i.e. you can run standard LAMMPS -or with the GPU package, for testing or benchmarking purposes. - -echo style :pre Set the style of command echoing. The style can be {none} or {screen} @@ -1336,8 +1324,7 @@ above in "Section 2.3"_#start_3, this switch must be set to enable running with the KOKKOS-enabled styles the package provides. If the switch is not set (the default), LAMMPS will operate as if the KOKKOS package were not installed; i.e. you can run standard LAMMPS or with -the GPU or USER-CUDA or USER-OMP packages, for testing or benchmarking -purposes. +the GPU or USER-OMP packages, for testing or benchmarking purposes. Additional optional keyword/value pairs can be specified which determine how Kokkos will use the underlying hardware on your @@ -1610,34 +1597,34 @@ partition screen files file.N. -suffix style args :pre Use variants of various styles if they exist. The specified style can -be {cuda}, {gpu}, {intel}, {kk}, {omp}, {opt}, or {hybrid}. These refer -to optional packages that LAMMPS can be built with, as described above in -"Section 2.3"_#start_3. The "cuda" style corresponds to the USER-CUDA -package, the "gpu" style to the GPU package, the "intel" style to the -USER-INTEL package, the "kk" style to the KOKKOS package, the "opt" -style to the OPT package, and the "omp" style to the USER-OMP package. The -hybrid style is the only style that accepts arguments. It allows for two -packages to be specified. The first package specified is the default and -will be used if it is available. If no style is available for the first -package, the style for the second package will be used if available. For -example, "-suffix hybrid intel omp" will use styles from the USER-INTEL -package if they are installed and available, but styles for the USER-OMP -package otherwise. +be {cuda}, {gpu}, {intel}, {kk}, {omp}, {opt}, or {hybrid}. These +refer to optional packages that LAMMPS can be built with, as described +above in "Section 2.3"_#start_3. The "gpu" style corresponds to the +GPU package, the "intel" style to the USER-INTEL package, the "kk" +style to the KOKKOS package, the "opt" style to the OPT package, and +the "omp" style to the USER-OMP package. The hybrid style is the only +style that accepts arguments. It allows for two packages to be +specified. The first package specified is the default and will be used +if it is available. If no style is available for the first package, +the style for the second package will be used if available. For +example, "-suffix hybrid intel omp" will use styles from the +USER-INTEL package if they are installed and available, but styles for +the USER-OMP package otherwise. Along with the "-package" command-line switch, this is a convenient mechanism for invoking accelerator packages and their options without having to edit an input script. As an example, all of the packages provide a "pair_style -lj/cut"_pair_lj.html variant, with style names lj/cut/cuda, -lj/cut/gpu, lj/cut/intel, lj/cut/kk, lj/cut/omp, and lj/cut/opt. A -variant style can be specified explicitly in your input script, -e.g. pair_style lj/cut/gpu. If the -suffix switch is used the -specified suffix (cuda,gpu,intel,kk,omp,opt) is automatically appended -whenever your input script command creates a new -"atom"_atom_style.html, "pair"_pair_style.html, "fix"_fix.html, -"compute"_compute.html, or "run"_run_style.html style. If the variant -version does not exist, the standard version is created. +lj/cut"_pair_lj.html variant, with style names lj/cut/gpu, +lj/cut/intel, lj/cut/kk, lj/cut/omp, and lj/cut/opt. A variant style +can be specified explicitly in your input script, e.g. pair_style +lj/cut/gpu. If the -suffix switch is used the specified suffix +(gpu,intel,kk,omp,opt) is automatically appended whenever your input +script command creates a new "atom"_atom_style.html, +"pair"_pair_style.html, "fix"_fix.html, "compute"_compute.html, or +"run"_run_style.html style. If the variant version does not exist, +the standard version is created. For the GPU package, using this command-line switch also invokes the default GPU settings, as if the command "package gpu 1" were used at diff --git a/doc/src/accelerate_cuda.txt b/doc/src/accelerate_cuda.txt deleted file mode 100644 index 5a6ca4925f..0000000000 --- a/doc/src/accelerate_cuda.txt +++ /dev/null @@ -1,223 +0,0 @@ -"Previous Section"_Section_packages.html - "LAMMPS WWW Site"_lws - -"LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Section_commands.html#comm) - -:line - -"Return to Section accelerate overview"_Section_accelerate.html - -5.3.1 USER-CUDA package :h4 - -The USER-CUDA package was developed by Christian Trott (Sandia) while -at U Technology Ilmenau in Germany. It provides NVIDIA GPU versions -of many pair styles, many fixes, a few computes, and for long-range -Coulombics via the PPPM command. It has the following general -features: - -The package is designed to allow an entire LAMMPS calculation, for -many timesteps, to run entirely on the GPU (except for inter-processor -MPI communication), so that atom-based data (e.g. coordinates, forces) -do not have to move back-and-forth between the CPU and GPU. :ulb,l - -The speed-up advantage of this approach is typically better when the -number of atoms per GPU is large :l - -Data will stay on the GPU until a timestep where a non-USER-CUDA fix -or compute is invoked. Whenever a non-GPU operation occurs (fix, -compute, output), data automatically moves back to the CPU as needed. -This may incur a performance penalty, but should otherwise work -transparently. :l - -Neighbor lists are constructed on the GPU. :l - -The package only supports use of a single MPI task, running on a -single CPU (core), assigned to each GPU. :l,ule - -Here is a quick overview of how to use the USER-CUDA package: - -build the library in lib/cuda for your GPU hardware with desired precision -include the USER-CUDA package and build LAMMPS -use the mpirun command to specify 1 MPI task per GPU (on each node) -enable the USER-CUDA package via the "-c on" command-line switch -specify the # of GPUs per node -use USER-CUDA styles in your input script :ul - -The latter two steps can be done using the "-pk cuda" and "-sf cuda" -"command-line switches"_Section_start.html#start_7 respectively. Or -the effect of the "-pk" or "-sf" switches can be duplicated by adding -the "package cuda"_package.html or "suffix cuda"_suffix.html commands -respectively to your input script. - -[Required hardware/software:] - -To use this package, you need to have one or more NVIDIA GPUs and -install the NVIDIA Cuda software on your system: - -Your NVIDIA GPU needs to support Compute Capability 1.3. This list may -help you to find out the Compute Capability of your card: - -http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units - -Install the Nvidia Cuda Toolkit (version 3.2 or higher) and the -corresponding GPU drivers. The Nvidia Cuda SDK is not required, but -we recommend it also be installed. You can then make sure its sample -projects can be compiled without problems. - -[Building LAMMPS with the USER-CUDA package:] - -This requires two steps (a,b): build the USER-CUDA library, then build -LAMMPS with the USER-CUDA package. - -You can do both these steps in one line, using the src/Make.py script, -described in "Section 2.4"_Section_start.html#start_4 of the manual. -Type "Make.py -h" for help. If run from the src directory, this -command will create src/lmp_cuda using src/MAKE/Makefile.mpi as the -starting Makefile.machine: - -Make.py -p cuda -cuda mode=single arch=20 -o cuda -a lib-cuda file mpi :pre - -Or you can follow these two (a,b) steps: - -(a) Build the USER-CUDA library - -The USER-CUDA library is in lammps/lib/cuda. If your {CUDA} toolkit -is not installed in the default system directoy {/usr/local/cuda} edit -the file {lib/cuda/Makefile.common} accordingly. - -To build the library with the settings in lib/cuda/Makefile.default, -simply type: - -make :pre - -To set options when the library is built, type "make OPTIONS", where -{OPTIONS} are one or more of the following. The settings will be -written to the {lib/cuda/Makefile.defaults} before the build. - -{precision=N} to set the precision level - N = 1 for single precision (default) - N = 2 for double precision - N = 3 for positions in double precision - N = 4 for positions and velocities in double precision -{arch=M} to set GPU compute capability - M = 35 for Kepler GPUs - M = 20 for CC2.0 (GF100/110, e.g. C2050,GTX580,GTX470) (default) - M = 21 for CC2.1 (GF104/114, e.g. GTX560, GTX460, GTX450) - M = 13 for CC1.3 (GF200, e.g. C1060, GTX285) -{prec_timer=0/1} to use hi-precision timers - 0 = do not use them (default) - 1 = use them - this is usually only useful for Mac machines -{dbg=0/1} to activate debug mode - 0 = no debug mode (default) - 1 = yes debug mode - this is only useful for developers -{cufft=1} for use of the CUDA FFT library - 0 = no CUFFT support (default) - in the future other CUDA-enabled FFT libraries might be supported :pre - -If the build is successful, it will produce the files liblammpscuda.a and -Makefile.lammps. - -Note that if you change any of the options (like precision), you need -to re-build the entire library. Do a "make clean" first, followed by -"make". - -(b) Build LAMMPS with the USER-CUDA package - -cd lammps/src -make yes-user-cuda -make machine :pre - -No additional compile/link flags are needed in Makefile.machine. - -Note that if you change the USER-CUDA library precision (discussed -above) and rebuild the USER-CUDA library, then you also need to -re-install the USER-CUDA package and re-build LAMMPS, so that all -affected files are re-compiled and linked to the new USER-CUDA -library. - -[Run with the USER-CUDA package from the command line:] - -The mpirun or mpiexec command sets the total number of MPI tasks used -by LAMMPS (one or multiple per compute node) and the number of MPI -tasks used per node. E.g. the mpirun command in MPICH does this via -its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode. - -When using the USER-CUDA package, you must use exactly one MPI task -per physical GPU. - -You must use the "-c on" "command-line -switch"_Section_start.html#start_7 to enable the USER-CUDA package. -The "-c on" switch also issues a default "package cuda 1"_package.html -command which sets various USER-CUDA options to default values, as -discussed on the "package"_package.html command doc page. - -Use the "-sf cuda" "command-line switch"_Section_start.html#start_7, -which will automatically append "cuda" to styles that support it. Use -the "-pk cuda Ng" "command-line switch"_Section_start.html#start_7 to -set Ng = # of GPUs per node to a different value than the default set -by the "-c on" switch (1 GPU) or change other "package -cuda"_package.html options. - -lmp_machine -c on -sf cuda -pk cuda 1 -in in.script # 1 MPI task uses 1 GPU -mpirun -np 2 lmp_machine -c on -sf cuda -pk cuda 2 -in in.script # 2 MPI tasks use 2 GPUs on a single 16-core (or whatever) node -mpirun -np 24 -ppn 2 lmp_machine -c on -sf cuda -pk cuda 2 -in in.script # ditto on 12 16-core nodes :pre - -The syntax for the "-pk" switch is the same as same as the "package -cuda" command. See the "package"_package.html command doc page for -details, including the default values used for all its options if it -is not specified. - -Note that the default for the "package cuda"_package.html command is -to set the Newton flag to "off" for both pairwise and bonded -interactions. This typically gives fastest performance. If the -"newton"_newton.html command is used in the input script, it can -override these defaults. - -[Or run with the USER-CUDA package by editing an input script:] - -The discussion above for the mpirun/mpiexec command and the requirement -of one MPI task per GPU is the same. - -You must still use the "-c on" "command-line -switch"_Section_start.html#start_7 to enable the USER-CUDA package. - -Use the "suffix cuda"_suffix.html command, or you can explicitly add a -"cuda" suffix to individual styles in your input script, e.g. - -pair_style lj/cut/cuda 2.5 :pre - -You only need to use the "package cuda"_package.html command if you -wish to change any of its option defaults, including the number of -GPUs/node (default = 1), as set by the "-c on" "command-line -switch"_Section_start.html#start_7. - -[Speed-ups to expect:] - -The performance of a GPU versus a multi-core CPU is a function of your -hardware, which pair style is used, the number of atoms/GPU, and the -precision used on the GPU (double, single, mixed). - -See the "Benchmark page"_http://lammps.sandia.gov/bench.html of the -LAMMPS web site for performance of the USER-CUDA package on different -hardware. - -[Guidelines for best performance:] - -The USER-CUDA package offers more speed-up relative to CPU performance -when the number of atoms per GPU is large, e.g. on the order of tens -or hundreds of 1000s. :ulb,l - -As noted above, this package will continue to run a simulation -entirely on the GPU(s) (except for inter-processor MPI communication), -for multiple timesteps, until a CPU calculation is required, either by -a fix or compute that is non-GPU-ized, or until output is performed -(thermo or dump snapshot or restart file). The less often this -occurs, the faster your simulation will run. :l,ule - -[Restrictions:] - -None. diff --git a/doc/src/accelerate_gpu.txt b/doc/src/accelerate_gpu.txt index b06e409cd9..8e76b85aa2 100644 --- a/doc/src/accelerate_gpu.txt +++ b/doc/src/accelerate_gpu.txt @@ -9,7 +9,7 @@ "Return to Section accelerate overview"_Section_accelerate.html -5.3.2 GPU package :h4 +5.3.1 GPU package :h4 The GPU package was developed by Mike Brown at ORNL and his collaborators, particularly Trung Nguyen (ORNL). It provides GPU @@ -44,10 +44,10 @@ NVIDIA support as well as more general OpenCL support, so that the same functionality can eventually be supported on a variety of GPU hardware. :l,ule -Here is a quick overview of how to use the GPU package: +Here is a quick overview of how to enable and use the GPU package: -build the library in lib/gpu for your GPU hardware wity desired precision -include the GPU package and build LAMMPS +build the library in lib/gpu for your GPU hardware with the desired precision settings +install the GPU package and build LAMMPS as usual use the mpirun command to set the number of MPI tasks/node which determines the number of MPI tasks/GPU specify the # of GPUs per node use GPU styles in your input script :ul diff --git a/doc/src/accelerate_intel.txt b/doc/src/accelerate_intel.txt index aad3663829..379758f71c 100644 --- a/doc/src/accelerate_intel.txt +++ b/doc/src/accelerate_intel.txt @@ -9,7 +9,7 @@ "Return to Section accelerate overview"_Section_accelerate.html -5.3.3 USER-INTEL package :h4 +5.3.2 USER-INTEL package :h4 The USER-INTEL package was developed by Mike Brown at Intel Corporation. It provides two methods for accelerating simulations, diff --git a/doc/src/accelerate_kokkos.txt b/doc/src/accelerate_kokkos.txt index 8d67606377..b69bf8a3d9 100644 --- a/doc/src/accelerate_kokkos.txt +++ b/doc/src/accelerate_kokkos.txt @@ -9,7 +9,7 @@ "Return to Section accelerate overview"_Section_accelerate.html -5.3.4 KOKKOS package :h4 +5.3.3 KOKKOS package :h4 The KOKKOS package was developed primarily by Christian Trott (Sandia) with contributions of various styles by others, including Sikandar @@ -118,9 +118,8 @@ multiple threads can be launched by each MPI task running on a CPU. To build with Kokkos support for NVIDIA GPUs, NVIDIA Cuda software version 6.5 or later must be installed on your system. See the -discussion for the "USER-CUDA"_accelerate_cuda.html and -"GPU"_accelerate_gpu.html packages for details of how to check and do -this. +discussion for the "GPU"_accelerate_gpu.html package for details of +how to check and do this. NOTE: For good performance of the KOKKOS package on GPUs, you must have Kepler generation GPUs (or later). The Kokkos library exploits @@ -378,8 +377,8 @@ When running on CPUs only, with multiple threads per MPI task, performance of a KOKKOS style is a bit slower than the USER-OMP package. :l -When running on GPUs, KOKKOS is typically faster than the USER-CUDA -and GPU packages. :l +When running large number of atoms per GPU, KOKKOS is typically faster +than the GPU package. :l When running on Intel Xeon Phi, KOKKOS is not as fast as the USER-INTEL package, which is optimized for that hardware. :l,ule diff --git a/doc/src/accelerate_omp.txt b/doc/src/accelerate_omp.txt index 4c7ef3f47b..0f969d6de1 100644 --- a/doc/src/accelerate_omp.txt +++ b/doc/src/accelerate_omp.txt @@ -9,7 +9,7 @@ "Return to Section accelerate overview"_Section_accelerate.html -5.3.5 USER-OMP package :h4 +5.3.4 USER-OMP package :h4 The USER-OMP package was developed by Axel Kohlmeyer at Temple University. It provides multi-threaded versions of most pair styles, diff --git a/doc/src/accelerate_opt.txt b/doc/src/accelerate_opt.txt index c9cec212af..32ea20af98 100644 --- a/doc/src/accelerate_opt.txt +++ b/doc/src/accelerate_opt.txt @@ -9,7 +9,7 @@ "Return to Section accelerate overview"_Section_accelerate.html -5.3.6 OPT package :h4 +5.3.5 OPT package :h4 The OPT package was developed by James Fischer (High Performance Technologies), David Richie, and Vincent Natoli (Stone Ridge diff --git a/doc/src/angle_charmm.txt b/doc/src/angle_charmm.txt index 5d734bada4..e12602ab11 100644 --- a/doc/src/angle_charmm.txt +++ b/doc/src/angle_charmm.txt @@ -48,7 +48,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -56,9 +56,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_class2.txt b/doc/src/angle_class2.txt index 0bee802650..9977f62417 100644 --- a/doc/src/angle_class2.txt +++ b/doc/src/angle_class2.txt @@ -78,7 +78,7 @@ same value from the Ea formula. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -86,9 +86,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine.txt b/doc/src/angle_cosine.txt index e77e983055..4f7a0820e7 100644 --- a/doc/src/angle_cosine.txt +++ b/doc/src/angle_cosine.txt @@ -35,7 +35,7 @@ K (energy) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -43,9 +43,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine_delta.txt b/doc/src/angle_cosine_delta.txt index 25703af3b7..4a11aadf22 100644 --- a/doc/src/angle_cosine_delta.txt +++ b/doc/src/angle_cosine_delta.txt @@ -40,7 +40,7 @@ internally. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine_periodic.txt b/doc/src/angle_cosine_periodic.txt index 7abc6beaf9..cfd1c3e484 100644 --- a/doc/src/angle_cosine_periodic.txt +++ b/doc/src/angle_cosine_periodic.txt @@ -48,7 +48,7 @@ geometry. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -56,9 +56,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine_shift.txt b/doc/src/angle_cosine_shift.txt index b12498efb6..03b0d947c3 100644 --- a/doc/src/angle_cosine_shift.txt +++ b/doc/src/angle_cosine_shift.txt @@ -38,7 +38,7 @@ theta (angle) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -46,9 +46,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine_shift_exp.txt b/doc/src/angle_cosine_shift_exp.txt index 8e0bef6aa6..0d23a621b8 100644 --- a/doc/src/angle_cosine_shift_exp.txt +++ b/doc/src/angle_cosine_shift_exp.txt @@ -50,7 +50,7 @@ A (real number) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -58,9 +58,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_cosine_squared.txt b/doc/src/angle_cosine_squared.txt index 29b7f2f848..a7264087af 100644 --- a/doc/src/angle_cosine_squared.txt +++ b/doc/src/angle_cosine_squared.txt @@ -40,7 +40,7 @@ internally. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_dipole.txt b/doc/src/angle_dipole.txt index 45e5bc0fec..18eb57d82f 100644 --- a/doc/src/angle_dipole.txt +++ b/doc/src/angle_dipole.txt @@ -68,7 +68,7 @@ gamma0 (degrees) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -76,9 +76,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_fourier.txt b/doc/src/angle_fourier.txt index ab4a3d2918..367b313e58 100644 --- a/doc/src/angle_fourier.txt +++ b/doc/src/angle_fourier.txt @@ -36,7 +36,7 @@ C2 (real) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -44,9 +44,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_fourier_simple.txt b/doc/src/angle_fourier_simple.txt index bebb6ad883..86806b4170 100644 --- a/doc/src/angle_fourier_simple.txt +++ b/doc/src/angle_fourier_simple.txt @@ -35,7 +35,7 @@ n (real) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -43,9 +43,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_harmonic.txt b/doc/src/angle_harmonic.txt index 56b169f0d8..a615972d00 100644 --- a/doc/src/angle_harmonic.txt +++ b/doc/src/angle_harmonic.txt @@ -42,7 +42,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -50,9 +50,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_quartic.txt b/doc/src/angle_quartic.txt index 1142a11422..c203fd3c7c 100644 --- a/doc/src/angle_quartic.txt +++ b/doc/src/angle_quartic.txt @@ -42,7 +42,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -50,9 +50,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/angle_table.txt b/doc/src/angle_table.txt index 014587deec..759b29f319 100644 --- a/doc/src/angle_table.txt +++ b/doc/src/angle_table.txt @@ -121,7 +121,7 @@ one that matches the specified keyword. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -129,9 +129,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/atom_style.txt b/doc/src/atom_style.txt index b24632cb02..95038b74fb 100644 --- a/doc/src/atom_style.txt +++ b/doc/src/atom_style.txt @@ -25,7 +25,7 @@ style = {angle} or {atomic} or {body} or {bond} or {charge} or {dipole} or \ template-ID = ID of molecule template specified in a separate "molecule"_molecule.html command {hybrid} args = list of one or more sub-styles, each with their args :pre -accelerated styles (with same args) = {angle/cuda} or {angle/kk} or {atomic/cuda} or {atomic/kk} or {bond/kk} or {charge/cuda} or {charge/kk} or {full/cuda} or {full/kk} or {molecular/kk} :l +accelerated styles (with same args) = {angle/kk} or {atomic/kk} or {bond/kk} or {charge/kk} or {full/kk} or {molecular/kk} :l :ule [Examples:] @@ -33,7 +33,6 @@ accelerated styles (with same args) = {angle/cuda} or {angle/kk} or {atomic/cuda atom_style atomic atom_style bond atom_style full -atom_style full/cuda atom_style body nparticle 2 10 atom_style hybrid charge bond atom_style hybrid charge body nparticle 2 5 @@ -133,9 +132,13 @@ position, which is represented by the eradius = electron size. For the {peri} style, the particles are spherical and each stores a per-particle mass and volume. -The {dpd} style is for dissipative particle dynamics (DPD) particles -which store the particle internal temperature (dpdTheta), internal -conductive energy (uCond) and internal mechanical energy (uMech). +The {dpd} style is for dissipative particle dynamics (DPD) particles. +Note that it is part of the USER-DPD package, and is not for use with +the "pair_style dpd or dpd/stat"_pair_dpd.html commands, which can +simply use atom_style atomic. Atom_style dpd extends DPD particle +properties with internal temperature (dpdTheta), internal conductive +energy (uCond), internal mechanical energy (uMech), and internal +chemical energy (uChem). The {meso} style is for smoothed particle hydrodynamics (SPH) particles which store a density (rho), energy (e), and heat capacity @@ -227,7 +230,7 @@ styles; see "this section"_Section_modify.html. :line -Styles with a {cuda} or {kk} suffix are functionally the same as the +Styles with a {kk} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The @@ -238,10 +241,9 @@ Note that other acceleration packages in LAMMPS, specifically the GPU, USER-INTEL, USER-OMP, and OPT packages do not use accelerated atom styles. -The accelerated styles are part of the USER-CUDA and KOKKOS packages -respectively. They are only enabled if LAMMPS was built with those -packages. See the "Making LAMMPS"_Section_start.html#start_3 section -for more info. +The accelerated styles are part of the KOKKOS package. They are only +enabled if LAMMPS was built with those packages. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the "-suffix command-line diff --git a/doc/src/bond_class2.txt b/doc/src/bond_class2.txt index 4784809f67..89a8f10e82 100644 --- a/doc/src/bond_class2.txt +++ b/doc/src/bond_class2.txt @@ -40,7 +40,7 @@ K4 (energy/distance^4) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_fene.txt b/doc/src/bond_fene.txt index 2e25fd90ff..28f2ffc8d0 100644 --- a/doc/src/bond_fene.txt +++ b/doc/src/bond_fene.txt @@ -43,7 +43,7 @@ sigma (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -51,9 +51,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_fene_expand.txt b/doc/src/bond_fene_expand.txt index 5025304ce5..88c0651292 100644 --- a/doc/src/bond_fene_expand.txt +++ b/doc/src/bond_fene_expand.txt @@ -47,7 +47,7 @@ delta (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -55,9 +55,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_harmonic.txt b/doc/src/bond_harmonic.txt index fa61d44161..16d8b59ba3 100644 --- a/doc/src/bond_harmonic.txt +++ b/doc/src/bond_harmonic.txt @@ -39,7 +39,7 @@ r0 (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -47,9 +47,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_harmonic_shift.txt b/doc/src/bond_harmonic_shift.txt index a814a94d88..4f317fd59c 100644 --- a/doc/src/bond_harmonic_shift.txt +++ b/doc/src/bond_harmonic_shift.txt @@ -40,7 +40,7 @@ rc (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_harmonic_shift_cut.txt b/doc/src/bond_harmonic_shift_cut.txt index f9adf2118f..36ac210596 100644 --- a/doc/src/bond_harmonic_shift_cut.txt +++ b/doc/src/bond_harmonic_shift_cut.txt @@ -40,7 +40,7 @@ rc (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_morse.txt b/doc/src/bond_morse.txt index 3644b1d74a..d42b35a487 100644 --- a/doc/src/bond_morse.txt +++ b/doc/src/bond_morse.txt @@ -38,7 +38,7 @@ r0 (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -46,9 +46,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_nonlinear.txt b/doc/src/bond_nonlinear.txt index 351e9dbaaf..d61694efb2 100644 --- a/doc/src/bond_nonlinear.txt +++ b/doc/src/bond_nonlinear.txt @@ -38,7 +38,7 @@ lamda (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -46,9 +46,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_quartic.txt b/doc/src/bond_quartic.txt index 035513a65f..5c4a7638a0 100644 --- a/doc/src/bond_quartic.txt +++ b/doc/src/bond_quartic.txt @@ -73,7 +73,7 @@ delete_bonds all bond 0 remove :pre :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -81,9 +81,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/bond_table.txt b/doc/src/bond_table.txt index 7d4191cf7e..3da2706640 100644 --- a/doc/src/bond_table.txt +++ b/doc/src/bond_table.txt @@ -118,7 +118,7 @@ one that matches the specified keyword. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -126,9 +126,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/change_box.txt b/doc/src/change_box.txt index 7fc6198232..15111fec08 100644 --- a/doc/src/change_box.txt +++ b/doc/src/change_box.txt @@ -315,12 +315,12 @@ been previously used to define the lattice spacing. If you use the {ortho} or {triclinic} keywords, then at the point in the input script when this command is issued, no "dumps"_dump.html can -be active, nor can a "fix ave/spatial"_fix_ave_spatial.html or "fix -deform"_fix_deform.html be active. This is because these commands -test whether the simulation box is orthogonal when they are first -issued. Note that these commands can be used in your script before a -change_box command is issued, so long as an "undump"_undump.html or -"unfix"_unfix.html command is also used to turn them off. +be active, nor can a "fix deform"_fix_deform.html be active. This is +because these commands test whether the simulation box is orthogonal +when they are first issued. Note that these commands can be used in +your script before a change_box command is issued, so long as an +"undump"_undump.html or "unfix"_unfix.html command is also used to +turn them off. [Related commands:] diff --git a/doc/src/compute.txt b/doc/src/compute.txt index b847985bf7..3da2143411 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -99,11 +99,10 @@ custom"_thermo_style.html or "fix ave/time"_fix_ave_time.html command. Or the values can be referenced in a "variable equal"_variable.html or "variable atom"_variable.html command. :l -Per-atom values can be output via the "dump custom"_dump.html command -or the "fix ave/spatial"_fix_ave_spatial.html command. Or they can be -time-averaged via the "fix ave/atom"_fix_ave_atom.html command or -reduced by the "compute reduce"_compute_reduce.html command. Or the -per-atom values can be referenced in an "atom-style +Per-atom values can be output via the "dump custom"_dump.html command. +Or they can be time-averaged via the "fix ave/atom"_fix_ave_atom.html +command or reduced by the "compute reduce"_compute_reduce.html +command. Or the per-atom values can be referenced in an "atom-style variable"_variable.html. :l Local values can be reduced by the "compute @@ -255,7 +254,7 @@ section of "this page"_Section_commands.html#cmd_5. [Related commands:] "uncompute"_uncompute.html, "compute_modify"_compute_modify.html, "fix -ave/atom"_fix_ave_atom.html, "fix ave/spatial"_fix_ave_spatial.html, -"fix ave/time"_fix_ave_time.html, "fix ave/histo"_fix_ave_histo.html +ave/atom"_fix_ave_atom.html, "fix ave/time"_fix_ave_time.html, "fix +ave/histo"_fix_ave_histo.html [Default:] none diff --git a/doc/src/compute_dpd.txt b/doc/src/compute_dpd.txt index d1e1d270fb..dc887678af 100644 --- a/doc/src/compute_dpd.txt +++ b/doc/src/compute_dpd.txt @@ -23,7 +23,7 @@ compute 1 all dpd :pre Define a computation that accumulates the total internal conductive energy (U_cond), the total internal mechanical energy (U_mech), the -total internal energy (U) and the {harmonic} average of the internal +total chemical energy (U_chem) and the {harmonic} average of the internal temperature (dpdTheta) for the entire system of particles. See the "compute dpd/atom"_compute_dpd_atom.html command if you want per-particle internal energies and internal temperatures. @@ -40,7 +40,7 @@ where N is the number of particles in the system [Output info:] This compute calculates a global vector of length 5 (U_cond, U_mech, -U, dpdTheta, N_particles), which can be accessed by indices 1-5. See +U_chem, dpdTheta, N_particles), which can be accessed by indices 1-5. See "this section"_Section_howto.html#howto_15 for an overview of LAMMPS output options. @@ -48,8 +48,12 @@ The vector values will be in energy and temperature "units"_units.html. [Restrictions:] -The compute {dpd} is only available if LAMMPS is built with the -USER-DPD package and requires the "atom_style dpd"_atom_style.html. +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. [Related commands:] diff --git a/doc/src/compute_dpd_atom.txt b/doc/src/compute_dpd_atom.txt index c4be61b45f..0ce40f66f4 100644 --- a/doc/src/compute_dpd_atom.txt +++ b/doc/src/compute_dpd_atom.txt @@ -22,28 +22,34 @@ compute 1 all dpd/atom [Description:] Define a computation that accesses the per-particle internal -conductive energy (u_cond), internal mechanical energy (u_mech) and +conductive energy (u_cond), internal mechanical energy (u_mech), +internal chemical energy (u_chem) and internal temperatures (dpdTheta) for each particle in a group. See the "compute dpd"_compute_dpd.html command if you want the total -internal conductive energy, the total internal mechanical energy, and +internal conductive energy, the total internal mechanical energy, the +total chemical energy and average internal temperature of the entire system or group of dpd particles. [Output info:] -This compute calculates a per-particle array with 3 columns (u_cond, -u_mech, dpdTheta), which can be accessed by indices 1-3 by any command +This compute calculates a per-particle array with 4 columns (u_cond, +u_mech, u_chem, dpdTheta), which can be accessed by indices 1-4 by any command that uses per-particle values from a compute as input. See "Section_howto15"_Section_howto.html#howto_15 for an overview of LAMMPS output options. -The per-particle array values will be in energy (u_cond, u_mech) and -temperature (dpdTheta) "units"_units.html. +The per-particle array values will be in energy (u_cond, u_mech, u_chem) +and temperature (dpdTheta) "units"_units.html. [Restrictions:] -The compute {dpd/atom} is only available if LAMMPS is built with the -USER-DPD package. +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. [Related commands:] diff --git a/doc/src/compute_fep.txt b/doc/src/compute_fep.txt index f0bc41c143..c5fb2f0b70 100644 --- a/doc/src/compute_fep.txt +++ b/doc/src/compute_fep.txt @@ -54,14 +54,14 @@ thermodynamic integration (FDTI) or Bennet's acceptance ratio method The potential energy of the system is decomposed in three terms: a background term corresponding to interaction sites whose parameters -remain constant, a reference term {U}0 corresponding to the +remain constant, a reference term \(U_0\) corresponding to the initial interactions of the atoms that will undergo perturbation, and -a term {U}1 corresponding to the final interactions of +a term \(U_1\) corresponding to the final interactions of these atoms: :c,image(Eqs/compute_fep_u.jpg) -A coupling parameter λ varying from 0 to 1 connects the +A coupling parameter \(\lambda\) varying from 0 to 1 connects the reference and perturbed systems: :c,image(Eqs/compute_fep_lambda.jpg) @@ -70,7 +70,7 @@ It is possible but not necessary that the coupling parameter (or a function thereof) appears as a multiplication factor of the potential energy. Therefore, this compute can apply perturbations to interaction parameters that are not directly proportional to the potential energy -(e.g. σ in Lennard-Jones potentials). +(e.g. \(\sigma\) in Lennard-Jones potentials). This command can be combined with "fix adapt"_fix_adapt.html to perform multistage free-energy perturbation calculations along @@ -81,25 +81,25 @@ stepwise alchemical transformations during a simulation run: This compute is suitable for the finite-difference thermodynamic integration (FDTI) method "(Mezei)"_#Mezei, which is based on an evaluation of the numerical derivative of the free energy by a -perturbation method using a very small δ: +perturbation method using a very small \(\delta\): :c,image(Eqs/compute_fep_fdti.jpg) -where {w}i are weights of a numerical quadrature. The "fix +where \(w_i\) are weights of a numerical quadrature. The "fix adapt"_fix_adapt.html command can be used to define the stages of -λ at which the derivative is calculated and averaged. +\(\lambda\) at which the derivative is calculated and averaged. The compute fep calculates the exponential Boltzmann term and also the -potential energy difference {U}1-{U}0. By -choosing a very small perturbation δ the thermodynamic +potential energy difference \(U_1 -U_0\). By +choosing a very small perturbation \(\delta\) the thermodynamic integration method can be implemented using a numerical evaluation of -the derivative of the potential energy with respect to λ: +the derivative of the potential energy with respect to \(\lambda\): :c,image(Eqs/compute_fep_ti.jpg) Another technique to calculate free energy differences is the acceptance ratio method "(Bennet)"_#Bennet, which can be implemented -by calculating the potential energy differences with δ = 1.0 on +by calculating the potential energy differences with \(\delta\) = 1.0 on both the forward and reverse routes: :c,image(Eqs/compute_fep_bar.jpg) @@ -209,12 +209,12 @@ Tildesley)"_#AllenTildesley: [Output info:] This compute calculates a global vector of length 3 which contains the -energy difference ({U}1-{U}0) as c_ID\[1\], the -Boltzmann factor exp(-({U}1-{U}0)/{kT}), or -{V}exp(-({U}1-{U}0)/{kT}), as c_ID\[2\] and the -volume of the simulation box {V} as c_ID\[3\]. {U}1 is the +energy difference ( \(U_1-U_0\) ) as c_ID\[1\], the +Boltzmann factor \(\exp(-(U_1-U_0)/kT)\), or +\(V \exp(-(U_1-U_0)/kT)\), as c_ID\[2\] and the +volume of the simulation box \(V\) as c_ID\[3\]. \(U_1\) is the pair potential energy obtained with the perturbed parameters and -{U}0 is the pair potential energy obtained with the +\(U_0\) is the pair potential energy obtained with the unperturbed parameters. The energies include kspace terms if these are used in the simulation. diff --git a/doc/src/compute_pe.txt b/doc/src/compute_pe.txt index 49c62a9b9e..9623950211 100644 --- a/doc/src/compute_pe.txt +++ b/doc/src/compute_pe.txt @@ -7,7 +7,6 @@ :line compute pe command :h3 -compute pe/cuda command :h3 [Syntax:] @@ -60,29 +59,6 @@ See the "thermo_style" command for more details. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed in "Section_accelerate"_Section_accelerate.html -of the manual. The accelerated styles take the same arguments and -should produce the same results, except for round-off and precision -issues. - -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can -use the "suffix"_suffix.html command in your input script. - -See "Section_accelerate"_Section_accelerate.html of the manual for -more instructions on how to use the accelerated styles effectively. - -:line - [Output info:] This compute calculates a global scalar (the potential energy). This diff --git a/doc/src/compute_pressure.txt b/doc/src/compute_pressure.txt index 38ae67012d..d22b9b8aa7 100644 --- a/doc/src/compute_pressure.txt +++ b/doc/src/compute_pressure.txt @@ -7,7 +7,6 @@ :line compute pressure command :h3 -compute pressure/cuda command :h3 [Syntax:] @@ -96,7 +95,7 @@ where "thermo_temp" is the ID of a similarly defined compute of style :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -104,9 +103,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/compute_property_atom.txt b/doc/src/compute_property_atom.txt index 9b7483fd8d..6fe4c79b37 100644 --- a/doc/src/compute_property_atom.txt +++ b/doc/src/compute_property_atom.txt @@ -91,7 +91,7 @@ in the group. This is useful so that the values can be used by other "output commands"_Section_howto.html#howto_15 that take computes as inputs. See for example, the "compute reduce"_compute_reduce.html, "fix ave/atom"_fix_ave_atom.html, "fix ave/histo"_fix_ave_histo.html, -"fix ave/spatial"_fix_ave_spatial.html, and "atom-style +"fix ave/chunk"_fix_ave_chunk.html, and "atom-style variable"_variable.html commands. The list of possible attributes is the same as that used by the "dump @@ -157,7 +157,7 @@ units for q, etc. [Related commands:] "dump custom"_dump.html, "compute reduce"_compute_reduce.html, "fix -ave/atom"_fix_ave_atom.html, "fix ave/spatial"_fix_ave_spatial.html, +ave/atom"_fix_ave_atom.html, "fix ave/chunk"_fix_ave_chunk.html, "fix property/atom"_fix_property_atom.html [Default:] none diff --git a/doc/src/compute_temp.txt b/doc/src/compute_temp.txt index e10fed0970..07be3c46ac 100644 --- a/doc/src/compute_temp.txt +++ b/doc/src/compute_temp.txt @@ -7,7 +7,6 @@ :line compute temp command :h3 -compute temp/cuda command :h3 compute temp/kk command :h3 [Syntax:] @@ -65,7 +64,7 @@ thermostatting. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -73,9 +72,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/compute_temp_deform.txt b/doc/src/compute_temp_deform.txt index ed7da650e0..168b0b3880 100644 --- a/doc/src/compute_temp_deform.txt +++ b/doc/src/compute_temp_deform.txt @@ -88,7 +88,7 @@ matches the box deformation. If not, then the compute will subtract off an incorrect stream velocity, yielding a bogus thermal temperature. You should NOT assume that your atoms are streaming at the same rate the box is deforming. Rather, you should monitor their -velocity profile, e.g. via the "fix ave/spatial"_fix_ave_spatial.html +velocity profile, e.g. via the "fix ave/chunk"_fix_ave_chunk.html command. And you can compare the results of this compute to "compute temp/profile"_compute_temp_profile.html, which actually calculates the stream profile before subtracting it. If the two computes do not give diff --git a/doc/src/compute_temp_partial.txt b/doc/src/compute_temp_partial.txt index c86a52baf6..798d3a270b 100644 --- a/doc/src/compute_temp_partial.txt +++ b/doc/src/compute_temp_partial.txt @@ -7,7 +7,6 @@ :line compute temp/partial command :h3 -compute temp/partial/cuda command :h3 [Syntax:] @@ -72,7 +71,7 @@ thermostatting. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -80,9 +79,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_charmm.txt b/doc/src/dihedral_charmm.txt index 3a3716f0c6..7fbdd40296 100644 --- a/doc/src/dihedral_charmm.txt +++ b/doc/src/dihedral_charmm.txt @@ -45,46 +45,45 @@ d (integer value of degrees) weighting factor (1.0, 0.5, or 0.0) :ul The weighting factor is required to correct for double counting -pairwise non-bonded Lennard-Jones interactions in cyclic systems -or when using the CHARMM dihedral style with non-CHARMM force fields. -With the CHARMM dihedral style, interactions between the 1st and -4th atoms in a dihedral are skipped during the normal non-bonded -force computation and instead evaluated as part of the dihedral -using special epsilon and sigma values specified with the -"pair_coeff"_pair_charmm.html command of pair styles that -contain "lj/charmm" (e.g. "pair_style lj/charmm/coul/long"_pair_charmm.html) -In 6-membered rings, the same 1-4 interaction would be computed -twice (once for the clockwise 1-4 pair in dihedral 1-2-3-4 and -once in the counterclockwise dihedral 1-6-5-4) and thus the -weighting factor has to be 0.5 in this case. -In 4-membered or 5-membered rings, the 1-4 dihedral also is -counted as a 1-2 or 1-3 interaction when going around the -ring in the opposite direction and thus the weighting factor -is 0.0, as the 1-2 and 1-3 exclusions take precedence. +pairwise non-bonded Lennard-Jones interactions in cyclic systems or +when using the CHARMM dihedral style with non-CHARMM force fields. +With the CHARMM dihedral style, interactions between the 1st and 4th +atoms in a dihedral are skipped during the normal non-bonded force +computation and instead evaluated as part of the dihedral using +special epsilon and sigma values specified with the +"pair_coeff"_pair_charmm.html command of pair styles that contain +"lj/charmm" (e.g. "pair_style lj/charmm/coul/long"_pair_charmm.html) +In 6-membered rings, the same 1-4 interaction would be computed twice +(once for the clockwise 1-4 pair in dihedral 1-2-3-4 and once in the +counterclockwise dihedral 1-6-5-4) and thus the weighting factor has +to be 0.5 in this case. In 4-membered or 5-membered rings, the 1-4 +dihedral also is counted as a 1-2 or 1-3 interaction when going around +the ring in the opposite direction and thus the weighting factor is +0.0, as the 1-2 and 1-3 exclusions take precedence. -Note that this dihedral weighting factor is unrelated to the -scaling factor specified by the "special bonds"_special_bonds.html -command which applies to all 1-4 interactions in the system. -For CHARMM force fields, the special_bonds 1-4 interaction scaling -factor should be set to 0.0. Since the corresponding 1-4 non-bonded -interactions are computed with the dihedral. -This means that if any of the weighting factors defined as dihedral -coefficients (4th coeff above) are non-zero, then you must use a -pair style with "lj/charmm" and set the special_bonds 1-4 scaling -factor to 0.0 (which is the default). Otherwise 1-4 non-bonded -interactions in dihedrals will be computed twice. +Note that this dihedral weighting factor is unrelated to the scaling +factor specified by the "special bonds"_special_bonds.html command +which applies to all 1-4 interactions in the system. For CHARMM force +fields, the special_bonds 1-4 interaction scaling factor should be set +to 0.0. Since the corresponding 1-4 non-bonded interactions are +computed with the dihedral. This means that if any of the weighting +factors defined as dihedral coefficients (4th coeff above) are +non-zero, then you must use a pair style with "lj/charmm" and set the +special_bonds 1-4 scaling factor to 0.0 (which is the +default). Otherwise 1-4 non-bonded interactions in dihedrals will be +computed twice. -For AMBER force fields, which use pair styles with "lj/cut", -the special_bonds 1-4 scaling factor should be set to the AMBER -defaults (1/2 and 5/6) and all the dihedral weighting factors -(4th coeff above) must be set to 0.0. In this case, you can use -any pair style you wish, since the dihedral does not need any -Lennard-Jones parameter information and will not compute any -1-4 non-bonded interactions. +Also note that for AMBER force fields, which use pair styles with +"lj/cut", the special_bonds 1-4 scaling factor should be set to the +AMBER defaults (1/2 and 5/6) and all the dihedral weighting factors +(4th coeff above) must be set to 0.0. In this case, you can use any +pair style you wish, since the dihedral does not need any +Lennard-Jones parameter information and will not compute any 1-4 +non-bonded interactions. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -92,9 +91,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_class2.txt b/doc/src/dihedral_class2.txt index 6f91881126..e5431f5557 100644 --- a/doc/src/dihedral_class2.txt +++ b/doc/src/dihedral_class2.txt @@ -137,7 +137,7 @@ r3 (distance) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -145,9 +145,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_cosine_shift_exp.txt b/doc/src/dihedral_cosine_shift_exp.txt index 1db6060946..b4c8351d6d 100644 --- a/doc/src/dihedral_cosine_shift_exp.txt +++ b/doc/src/dihedral_cosine_shift_exp.txt @@ -49,7 +49,7 @@ A (real number) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -57,9 +57,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_fourier.txt b/doc/src/dihedral_fourier.txt index 47cff75828..5cda91fe48 100644 --- a/doc/src/dihedral_fourier.txt +++ b/doc/src/dihedral_fourier.txt @@ -40,7 +40,7 @@ dm (degrees) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -48,9 +48,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_harmonic.txt b/doc/src/dihedral_harmonic.txt index 6651687bbe..ac124ffd48 100644 --- a/doc/src/dihedral_harmonic.txt +++ b/doc/src/dihedral_harmonic.txt @@ -49,7 +49,7 @@ Some force fields let {n} be positive or negative which corresponds to :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -57,9 +57,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_helix.txt b/doc/src/dihedral_helix.txt index da9fece845..573d9f14d4 100644 --- a/doc/src/dihedral_helix.txt +++ b/doc/src/dihedral_helix.txt @@ -43,7 +43,7 @@ C (energy) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -51,9 +51,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_multi_harmonic.txt b/doc/src/dihedral_multi_harmonic.txt index ddb9af407b..c2de676a96 100644 --- a/doc/src/dihedral_multi_harmonic.txt +++ b/doc/src/dihedral_multi_harmonic.txt @@ -37,7 +37,7 @@ A5 (energy) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -45,9 +45,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_nharmonic.txt b/doc/src/dihedral_nharmonic.txt index c0c8e9ddef..cd614ae907 100644 --- a/doc/src/dihedral_nharmonic.txt +++ b/doc/src/dihedral_nharmonic.txt @@ -37,7 +37,7 @@ An (energy) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -45,9 +45,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_opls.txt b/doc/src/dihedral_opls.txt index f885102dcb..b5e8da93a8 100644 --- a/doc/src/dihedral_opls.txt +++ b/doc/src/dihedral_opls.txt @@ -45,7 +45,7 @@ K4 (energy) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -53,9 +53,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_quadratic.txt b/doc/src/dihedral_quadratic.txt index 8aba2ea0cb..ce018e2b0e 100644 --- a/doc/src/dihedral_quadratic.txt +++ b/doc/src/dihedral_quadratic.txt @@ -38,7 +38,7 @@ phi0 (degrees) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -46,9 +46,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/dihedral_table.txt b/doc/src/dihedral_table.txt index 198a25fb23..b19bf52319 100644 --- a/doc/src/dihedral_table.txt +++ b/doc/src/dihedral_table.txt @@ -171,7 +171,7 @@ that matches the specified keyword. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -179,9 +179,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 5d0e7763db..c55ebb03b3 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -122,11 +122,10 @@ custom"_thermo_style.html or "fix ave/time"_fix_ave_time.html command. Or the values can be referenced in a "variable equal"_variable.html or "variable atom"_variable.html command. :ulb,l -Per-atom values can be output via the "dump custom"_dump.html command -or the "fix ave/spatial"_fix_ave_spatial.html command. Or they can be -time-averaged via the "fix ave/atom"_fix_ave_atom.html command or -reduced by the "compute reduce"_compute_reduce.html command. Or the -per-atom values can be referenced in an "atom-style +Per-atom values can be output via the "dump custom"_dump.html command. +Or they can be time-averaged via the "fix ave/atom"_fix_ave_atom.html +command or reduced by the "compute reduce"_compute_reduce.html +command. Or the per-atom values can be referenced in an "atom-style variable"_variable.html. :l Local values can be reduced by the "compute @@ -171,7 +170,6 @@ of "this page"_Section_commands.html#cmd_5. "ave/chunk"_fix_ave_chunk.html - compute per-chunk time-averaged quantities "ave/correlate"_fix_ave_correlate.html - compute/output time correlations "ave/histo"_fix_ave_histo.html - compute/output time-averaged histograms -"ave/spatial"_fix_ave_spatial.html - compute/output time-averaged per-atom quantities by layer "ave/time"_fix_ave_time.html - compute/output global time-averaged quantities "balance"_fix_balance.html - perform dynamic load-balancing "bond/break"_fix_bond_break.html - break bonds on the fly @@ -183,6 +181,7 @@ of "this page"_Section_commands.html#cmd_5. "drag"_fix_drag.html - drag atoms towards a defined coordinate "dt/reset"_fix_dt_reset.html - reset the timestep based on velocity, forces "efield"_fix_efield.html - impose electric field on system +"ehex"_fix_ehex.html - ehanced heat exchange algorithm "enforce2d"_fix_enforce2d.html - zero out z-dimension velocity and force "evaporate"_fix_evaporate.html - remove atoms from simulation periodically "external"_fix_external.html - callback to an external driver program diff --git a/doc/src/fix_addforce.txt b/doc/src/fix_addforce.txt index 17d281b53e..9a9c71b300 100644 --- a/doc/src/fix_addforce.txt +++ b/doc/src/fix_addforce.txt @@ -7,7 +7,6 @@ :line fix addforce command :h3 -fix addforce/cuda command :h3 [Syntax:] @@ -104,15 +103,15 @@ converge properly. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in +Styles with a uffix are functionally the same as the corresponding +style without the suffix. They have been optimized to run faster, +depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making +These accelerated styles are part of the ackage. They are only +enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_ave_atom.txt b/doc/src/fix_ave_atom.txt index af38f3a1e0..1d5053d37b 100644 --- a/doc/src/fix_ave_atom.txt +++ b/doc/src/fix_ave_atom.txt @@ -38,7 +38,7 @@ Use one or more per-atom vectors as inputs every few timesteps, and average them atom by atom over longer timescales. The resulting per-atom averages can be used by other "output commands"_Section_howto.html#howto_15 such as the "fix -ave/spatial"_fix_ave_spatial.html or "dump custom"_dump.html commands. +ave/chunk"_fix_ave_chunk.html or "dump custom"_dump.html commands. The group specified with the command means only atoms within the group have their averages computed. Results are set to 0.0 for atoms not in @@ -147,7 +147,7 @@ minimization"_minimize.html. [Related commands:] "compute"_compute.html, "fix ave/histo"_fix_ave_histo.html, "fix -ave/spatial"_fix_ave_spatial.html, "fix ave/time"_fix_ave_time.html, +ave/chunk"_fix_ave_chunk.html, "fix ave/time"_fix_ave_time.html, "variable"_variable.html, [Default:] none diff --git a/doc/src/fix_ave_chunk.txt b/doc/src/fix_ave_chunk.txt index fd31369d2a..0ebbafd6ca 100644 --- a/doc/src/fix_ave_chunk.txt +++ b/doc/src/fix_ave_chunk.txt @@ -67,8 +67,8 @@ fix 1 flow ave/chunk 100 5 1000 binchunk density/mass ave running :pre [NOTE:] -If you are trying to replace an older fix ave/spatial command with the -newer, more flexible fix ave/chunk and "compute +If you are trying to replace a deprectated fix ave/spatial command +with the newer, more flexible fix ave/chunk and "compute chunk/atom"_compute_chunk_atom.html commands, you simply need to split the fix ave/spatial arguments across the two new commands. For example, this command: diff --git a/doc/src/fix_ave_correlate.txt b/doc/src/fix_ave_correlate.txt index 2394185b5d..ae785b4fc5 100644 --- a/doc/src/fix_ave_correlate.txt +++ b/doc/src/fix_ave_correlate.txt @@ -83,10 +83,10 @@ Each listed value can be the result of a "compute"_compute.html or must produce a global quantity, not a per-atom or local quantity. If you wish to spatial- or time-average or histogram per-atom quantities from a compute, fix, or variable, then see the "fix -ave/spatial"_fix_ave_spatial.html, "fix ave/atom"_fix_ave_atom.html, -or "fix ave/histo"_fix_ave_histo.html commands. If you wish to -convert a per-atom quantity into a single global value, see the -"compute reduce"_compute_reduce.html command. +ave/chunk"_fix_ave_chunk.html, "fix ave/atom"_fix_ave_atom.html, or +"fix ave/histo"_fix_ave_histo.html commands. If you wish to convert a +per-atom quantity into a single global value, see the "compute +reduce"_compute_reduce.html command. "Computes"_compute.html that produce global quantities are those which do not have the word {atom} in their style name. Only a few @@ -332,7 +332,7 @@ minimization"_minimize.html. "fix ave/correlate/long"_fix_ave_correlate_long.html, "compute"_compute.html, "fix ave/time"_fix_ave_time.html, "fix -ave/atom"_fix_ave_atom.html, "fix ave/spatial"_fix_ave_spatial.html, +ave/atom"_fix_ave_atom.html, "fix ave/chunk"_fix_ave_chunk.html, "fix ave/histo"_fix_ave_histo.html, "variable"_variable.html [Default:] none diff --git a/doc/src/fix_ave_histo.txt b/doc/src/fix_ave_histo.txt index 58b234d363..3d287d4fe4 100644 --- a/doc/src/fix_ave_histo.txt +++ b/doc/src/fix_ave_histo.txt @@ -331,7 +331,7 @@ minimization"_minimize.html. [Related commands:] "compute"_compute.html, "fix ave/atom"_fix_ave_atom.html, "fix -ave/spatial"_fix_ave_spatial.html, "fix ave/time"_fix_ave_time.html, +ave/chunk"_fix_ave_chunk.html, "fix ave/time"_fix_ave_time.html, "variable"_variable.html, "fix ave/correlate"_fix_ave_correlate.html, [Default:] none diff --git a/doc/src/fix_ave_spatial.txt b/doc/src/fix_ave_spatial.txt deleted file mode 100644 index 12b452cd56..0000000000 --- a/doc/src/fix_ave_spatial.txt +++ /dev/null @@ -1,418 +0,0 @@ -"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Section_commands.html#comm) - -:line - -fix ave/spatial command :h3 - -[Syntax:] - -fix ID group-ID ave/spatial Nevery Nrepeat Nfreq dim origin delta ... value1 value2 ... keyword args ... :pre - -ID, group-ID are documented in "fix"_fix.html command :ulb,l -ave/spatial = style name of this fix command :l -Nevery = use input values every this many timesteps :l -Nrepeat = # of times to use input values for calculating averages :l -Nfreq = calculate averages every this many timesteps :l -dim, origin, delta can be repeated 1, 2, or 3 times for 1d, 2d, or 3d bins :l - dim = {x} or {y} or {z} - origin = {lower} or {center} or {upper} or coordinate value (distance units) - delta = thickness of spatial bins in dim (distance units) :pre -one or more input values can be listed :l -value = vx, vy, vz, fx, fy, fz, density/mass, density/number, c_ID, c_ID\[I\], f_ID, f_ID\[I\], v_name :l - vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component) - density/number, density/mass = number or mass density - c_ID = per-atom vector calculated by a compute with ID - c_ID\[I\] = Ith column of per-atom array calculated by a compute with ID - f_ID = per-atom vector calculated by a fix with ID - f_ID\[I\] = Ith column of per-atom array calculated by a fix with ID - v_name = per-atom vector calculated by an atom-style variable with name :pre - -zero or more keyword/arg pairs may be appended :l -keyword = {region} or {bound} or {discard} or {norm} or {ave} or {units} or {file} or {overwrite} or {title1} or {title2} or {title3} :l - {region} arg = region-ID - {bound} args = x/y/z lo hi - x/y/z = {x} or {y} or {z} to bound bins in this dimension - lo = {lower} or coordinate value (distance units) - hi = {upper} or coordinate value (distance units) - {discard} arg = {mixed} or {no} or {yes} - mixed = discard atoms outside bins only if bin bounds are explicitly set - no = always keep out-of-bounds atoms - yes = always discard out-of-bounds atoms - {norm} arg = {all} or {sample} - region-ID = ID of region atoms must be in to contribute to spatial averaging - {ave} args = {one} or {running} or {window M} - one = output new average value every Nfreq steps - running = output cumulative average of all previous Nfreq steps - window M = output average of M most recent Nfreq steps - {units} arg = {box} or {lattice} or {reduced} - {file} arg = filename - filename = file to write results to - {overwrite} arg = none = overwrite output file with only latest output - {title1} arg = string - string = text to print as 1st line of output file - {title2} arg = string - string = text to print as 2nd line of output file - {title3} arg = string - string = text to print as 3rd line of output file :pre -:ule - -[Examples:] - -fix 1 all ave/spatial 10000 1 10000 z lower 0.02 c_myCentro units reduced & - title1 "My output values" -fix 1 flow ave/spatial 100 10 1000 y 0.0 1.0 vx vz norm sample file vel.profile -fix 1 flow ave/spatial 100 5 1000 z lower 1.0 y 0.0 2.5 density/mass ave running -fix 1 flow ave/spatial 100 5 1000 z lower 1.0 y 0.0 2.5 density/mass bound y 5.0 20.0 discard yes ave running :pre - -[NOTE:] - - The fix ave/spatial command has been replaced by the more flexible -"fix ave/chunk"_fix_ave_chunk.html and "compute -chunk/atom"_compute_chunk_atom.html commands. The fix ave/spatial -command will be removed from LAMMPS sometime in the summer of 2015. - -Any fix ave/spatial command can be replaced by the two new commands. -You simply need to split the fix ave/spatial arguments across the two -new commands. For example, this command: - -fix 1 flow ave/spatial 100 10 1000 y 0.0 1.0 vx vz norm sample file vel.profile :pre - -could be replaced by: - -compute cc1 flow chunk/atom bin/1d y 0.0 1.0 -fix 1 flow ave/chunk 100 10 1000 cc1 vx vz norm sample file vel.profile :pre - -[Description:] - -Use one or more per-atom vectors as inputs every few timesteps, bin -their values spatially into 1d, 2d, or 3d bins based on current atom -coordinates, and average the bin values over longer timescales. The -resulting bin averages can be used by other "output -commands"_Section_howto.html#howto_15 such as "thermo_style -custom"_thermo_style.html, and can also be written to a file. - -The group specified with the command means only atoms within the group -contribute to bin averages. If the {region} keyword is used, the atom -must be in both the specified group and the specified geometric -"region"_region.html in order to contribute to bin averages. - -Each listed value can be an atom attribute (position, velocity, force -component), a mass or number density, or the result of a -"compute"_compute.html or "fix"_fix.html or the evaluation of an -atom-style "variable"_variable.html. In the latter cases, the -compute, fix, or variable must produce a per-atom quantity, not a -global quantity. If you wish to time-average global quantities from a -compute, fix, or variable, then see the "fix -ave/time"_fix_ave_time.html command. - -"Computes"_compute.html that produce per-atom quantities are those -which have the word {atom} in their style name. See the doc pages for -individual "fixes"_fix.html to determine which ones produce per-atom -quantities. "Variables"_variable.html of style {atom} are the only -ones that can be used with this fix since all other styles of variable -produce global quantities. - -The per-atom values of each input vector are binned and averaged -independently of the per-atom values in other input vectors. - -The size and dimensionality of the bins (1d = layers or slabs, 2d = -pencils, 3d = boxes) are determined by the {dim}, {origin}, and -{delta} settings and how many times they are specified (1, 2, or 3). -See details below. - -NOTE: This fix works by creating an array of size Nbins by Nvalues on -each processor. Nbins is the total number of bins; Nvalues is the -number of input values specified. Each processor loops over its -atoms, tallying its values to the appropriate bin. Then the entire -array is summed across all processors. This means that using a large -number of bins (easy to do for 2d or 3d bins) will incur an overhead -in memory and computational cost (summing across processors), so be -careful to use reasonable numbers of bins. - -:line - -The {Nevery}, {Nrepeat}, and {Nfreq} arguments specify on what -timesteps the input values will be used to bin them and contribute to -the average. The final averaged quantities are generated on timesteps -that are a multiples of {Nfreq}. The average is over {Nrepeat} -quantities, computed in the preceding portion of the simulation every -{Nevery} timesteps. {Nfreq} must be a multiple of {Nevery} and -{Nevery} must be non-zero even if {Nrepeat} is 1. Also, the timesteps -contributing to the average value cannot overlap, -i.e. Nrepeat*Nevery can not exceed Nfreq. - -For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on -timesteps 90,92,94,96,98,100 will be used to compute the final average -on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on -timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time -averaging is done; values are simply generated on timesteps -100,200,etc. - -:line - -Each per-atom property is also averaged over atoms in each bin. The -way the averaging is one across the {Nrepeat} timesteps to produce -output on the {Nfreq} timesteps, and across multiple {Nfreq} outputs, -is determined by the {norm} and {av} keyword settings, as discussed -below. - -Bins can be 1d layers or slabs, 2d pencils, or 3d boxes. This depends -on how many times (1, 2, or 3) the {dim}, {origin}, and {delta} -settings are specified in the fix ave/spatial command. For 2d or 3d -bins, there is no restriction on specifying dim = x before dim = y, or -dim = y before dim = z. Bins in a particular {dim} have a bin size in -that dimension given by {delta}. Every Nfreq steps, when averaging is -being performed and the per-atom property is calculated for the first -time, the number of bins and the bin sizes and boundaries are -computed. Thus if the simulation box changes size during a -simulation, the number of bins and their boundaries may also change. -In each dimension, bins are defined relative to a specified {origin}, -which may be the lower/upper edge of the simulation box in that -dimension, or its center point, or a specified coordinate value. -Starting at the origin, sufficient bins are created in both directions -to completely span the bin extent in that dimension. By default the -bin extent is the entire simulation box. - -The {bound} keyword can be used one or more times to limit the extent -of bin coverage in specified dimensions, i.e. to only bin a portion of -the box. If the {lo} setting is {lower} or the {hi} setting is -{upper}, the bin extent in that direction extends to the box boundary. -If a numeric value is used for {lo} and/or {hi}, then the bin extent -in the {lo} or {hi} direction extends only to that value, which is -assumed to be inside (or at least near) the simulation box boundaries, -though LAMMPS does not check for this. - -On each sampling timestep, each atom is mapped to the bin it currently -belongs to, based on its current position. Note that the group-ID and -region keyword can exclude specific atoms from this operation, as -discussed above. Note that between reneighboring timesteps, atoms can -move outside the current simulation box. If the box is periodic (in -that dimension) the atom is remapping into the periodic box for -purposes of binning. If the box in not periodic, the atom may have -moved outside the bounds of any bin. - -The {discard} keyword determines what is done with any atom which is -outside the bounds of any bin. If {discard} is set to {yes}, the atom -will be ignored and not contribute to any bin averages. If {discard} -is set to {no}, the atom will be counted as if it were in the first or -last bin in that dimension. If (discard} is set to {mixed}, which is -the default, it will only be counted in the first or last bin if bins -extend to the box boundary in that dimension. This is the case if the -{bound} keyword settings are {lower} and {upper}, which is the -default. If the {bound} keyword settings are numeric values, then the -atom will be ignored if it is outside the bounds of any bin. Note -that in this case, it is possible that the first or last bin extends -beyond the numeric {bounds} settings, depending on the specified -{origin}. If this is the case, the atom is only ignored if it is -outside the first or last bin, not if it is simply outside the numeric -{bounds} setting. - -For orthogonal simulation boxes, the bins are also layers, pencils, or -boxes aligned with the xyz coordinate axes. For triclinic -(non-orthogonal) simulation boxes, the bins are so that they are -parallel to the tilted faces of the simulation box. See "this -section"_Section_howto.html#howto_12 of the manual for a discussion of -the geometry of triclinic boxes in LAMMPS. As described there, a -tilted simulation box has edge vectors a,b,c. In that nomenclature, -bins in the x dimension have faces with normals in the "b" cross "c" -direction. Bins in y have faces normal to the "a" cross "c" -direction. And bins in z have faces normal to the "a" cross "b" -direction. Note that in order to define the size and position of -these bins in an unambiguous fashion, the {units} option must be set -to {reduced} when using a triclinic simulation box, as noted below. - -:line - -The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory. -Note that other atom attributes (including atom postitions x,y,z) can -be used as inputs to this fix by using the "compute -property/atom"_compute_property_atom.html command and then specifying -an input value from that compute. - -The {density/number} value means the number density is computed in -each bin, i.e. a weighting of 1 for each atom. The {density/mass} -value means the mass density is computed in each bind, i.e. each atom -is weighted by its mass. The resulting density is normalized by the -volume of the bin so that units of number/volume or density are -output. See the "units"_units.html command doc page for the -definition of density for each choice of units, e.g. gram/cm^3. - -If a value begins with "c_", a compute ID must follow which has been -previously defined in the input script. If no bracketed integer is -appended, the per-atom vector calculated by the compute is used. If a -bracketed integer is appended, the Ith column of the per-atom array -calculated by the compute is used. Users can also write code for -their own compute styles and "add them to LAMMPS"_Section_modify.html. - -If a value begins with "f_", a fix ID must follow which has been -previously defined in the input script. If no bracketed integer is -appended, the per-atom vector calculated by the fix is used. If a -bracketed integer is appended, the Ith column of the per-atom array -calculated by the fix is used. Note that some fixes only produce -their values on certain timesteps, which must be compatible with -{Nevery}, else an error results. Users can also write code for their -own fix styles and "add them to LAMMPS"_Section_modify.html. - -If a value begins with "v_", a variable name must follow which has -been previously defined in the input script. Variables of style -{atom} can reference thermodynamic keywords and various per-atom -attributes, or invoke other computes, fixes, or variables when they -are evaluated, so this is a very general means of generating per-atom -quantities to spatially average. - -:line - -Additional optional keywords also affect the operation of this fix. -The {region}, {bound}, and {discard} keywords were discussed above. - -The {norm} keyword affects how averaging is done for the output -produced every {Nfreq} timesteps. For an {all} setting, a bin -quantity is summed over all atoms in all {Nrepeat} samples, as is the -count of atoms in the bin. The printed value for the bin is -Total-quantity / Total-count. In other words it is an average over -the entire {Nfreq} timescale. - -For a {sample} setting, the bin quantity is summed over atoms for only -a single sample, as is the count, and a "average sample value" is -computed, i.e. Sample-quantity / Sample-count. The printed value for -the bin is the average of the {Nrepeat} "average sample values", In -other words it is an average of an average. - -The {ave} keyword determines how the bin values produced every {Nfreq} -steps are averaged with bin values produced on previous steps that -were multiples of {Nfreq}, before they are accessed by another output -command or written to a file. - -If the {ave} setting is {one}, then the bin values produced on -timesteps that are multiples of {Nfreq} are independent of each other; -they are output as-is without further averaging. - -If the {ave} setting is {running}, then the bin values produced on -timesteps that are multiples of {Nfreq} are summed and averaged in a -cumulative sense before being output. Each output bin value is thus -the average of the bin value produced on that timestep with all -preceding values for the same bin. This running average begins when -the fix is defined; it can only be restarted by deleting the fix via -the "unfix"_unfix.html command, or re-defining the fix by -re-specifying it. - -If the {ave} setting is {window}, then the bin values produced on -timesteps that are multiples of {Nfreq} are summed and averaged within -a moving "window" of time, so that the last M values for the same bin -are used to produce the output. E.g. if M = 3 and Nfreq = 1000, then -the output on step 10000 will be the average of the individual bin -values on steps 8000,9000,10000. Outputs on early steps will average -over less than M values if they are not available. - -The {units} keyword determines the meaning of the distance units used -for the bin size {delta} and for {origin} and {bounds} values if they -are coordinate value. For orthogonal simulation boxes, any of the 3 -options may be used. For non-orthogonal (triclinic) simulation boxes, -only the {reduced} option may be used. - -A {box} value selects standard distance units as defined by the -"units"_units.html command, e.g. Angstroms for units = real or metal. -A {lattice} value means the distance units are in lattice spacings. -The "lattice"_lattice.html command must have been previously used to -define the lattice spacing. A {reduced} value means normalized -unitless values between 0 and 1, which represent the lower and upper -faces of the simulation box respectively. Thus an {origin} value of -0.5 means the center of the box in any dimension. A {delta} value of -0.1 means 10 bins span the box in that dimension. - -Consider a non-orthogonal box, with bins that are 1d layers or slabs -in the x dimension. No matter how the box is tilted, an {origin} of -0.0 means start layers at the lower "b" cross "c" plane of the -simulation box and an {origin} of 1.0 means to start layers at the -upper "b" cross "c" face of the box. A {delta} value of 0.1 means -there will be 10 layers from 0.0 to 1.0, regardless of the current -size or shape of the simulation box. - -The {file} keyword allows a filename to be specified. Every {Nfreq} -timesteps, a section of bin info will be written to a text file in the -following format. A line with the timestep and number of bin is -written. Then one line per bin is written, containing the bin ID -(1-N), the coordinate of the center of the bin, the number of atoms -in the bin, and one or more calculated values. The number of values -in each line corresponds to the number of values specified in the fix -ave/spatial command. The number of atoms and the value(s) are average -quantities. If the value of the {units} keyword is {box} or -{lattice}, the "coord" is printed in box units. If the value of the -{units} keyword is {reduced}, the "coord" is printed in reduced units -(0-1). - -The {overwrite} keyword will continuously overwrite the output file -with the latest output, so that it only contains one timestep worth of -output. This option can only be used with the {ave running} setting. - -The {title1} and {title2} and {title3} keywords allow specification of -the strings that will be printed as the first 3 lines of the output -file, assuming the {file} keyword was used. LAMMPS uses default -values for each of these, so they do not need to be specified. - -By default, these header lines are as follows: - -# Spatial-averaged data for fix ID and group name -# Timestep Number-of-bins -# Bin Coord1 Coord2 Coord3 Count value1 value2 ... :pre - -In the first line, ID and name are replaced with the fix-ID and group -name. The second line describes the two values that are printed at -the first of each section of output. In the third line the values are -replaced with the appropriate fields from the fix ave/spatial command. -The Coord2 and Coord3 entries in the third line only appear for 2d and -3d bins respectively. For 1d bins, the word Coord1 is replaced by -just Coord. - -:line - -[Restart, fix_modify, output, run start/stop, minimize info:] - -No information about this fix is written to "binary restart -files"_restart.html. None of the "fix_modify"_fix_modify.html options -are relevant to this fix. - -This fix computes a global array of values which can be accessed by -various "output commands"_Section_howto.html#howto_15. The values can -only be accessed on timesteps that are multiples of {Nfreq} since that -is when averaging is performed. The global array has # of rows = -Nbins and # of columns = Ndim+1+Nvalues, where Ndim = 1,2,3 for -1d,2d,3d bins. The first 1 or 2 or 3 columns have the bin coordinates -(center of the bin) in the appropriate dimensions, the next column has -the count of atoms in that bin, and the remaining columns are the -Nvalue quantities. When the array is accessed with an I that exceeds -the current number of bins, than a 0.0 is returned by the fix instead -of an error, since the number of bins can vary as a simulation runs, -depending on the simulation box size. 2d or 3d bins are ordered so -that the last dimension(s) vary fastest. The array values calculated -by this fix are "intensive", since they are already normalized by the -count of atoms in each bin. - -No parameter of this fix can be used with the {start/stop} keywords of -the "run"_run.html command. This fix is not invoked during "energy -minimization"_minimize.html. - -[Restrictions:] - -When the {ave} keyword is set to {running} or {window} then the number -of bins must remain the same during the simulation, so that the -appropriate averaging can be done. This will be the case if the -simulation box size doesn't change or if the {units} keyword is set to -{reduced}. - -[Related commands:] - -"compute"_compute.html, "fix ave/atom"_fix_ave_atom.html, "fix -ave/histo"_fix_ave_histo.html, "fix ave/time"_fix_ave_time.html, -"variable"_variable.html, "fix ave/correlate"_fix_ave_correlate.html, -"fix ave/spatial/sphere"_fix_ave_spatial_sphere.html - -[Default:] - -The option defaults are bound = lower and upper in all dimensions, -discard = mixed, norm = all, ave = one, units = lattice, no file -output, and title 1,2,3 = strings as described above. diff --git a/doc/src/fix_ave_spatial_sphere.txt b/doc/src/fix_ave_spatial_sphere.txt deleted file mode 100644 index 8223e7fd5b..0000000000 --- a/doc/src/fix_ave_spatial_sphere.txt +++ /dev/null @@ -1,324 +0,0 @@ -"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Section_commands.html#comm) - -:line - -fix ave/spatial/sphere command :h3 - -[Syntax:] - -fix ID group-ID ave/spatial/sphere Nevery Nrepeat Nfreq origin_x origin_y origin_z r_min r_max nbins value1 value2 ... keyword args ... :pre - -ID, group-ID are documented in "fix"_fix.html command :ulb,l -ave/spatial = style name of this fix command :l -Nevery = use input values every this many timesteps :l -Nrepeat = # of times to use input values for calculating averages :l -Nfreq = calculate averages every this many timesteps :l -origin_x, origin_y, origin_z = center of the sphere. can be the result of variables or computes (see below) :l -r_min = radial distance at which binning begins :l -r_max = radial distance at which binning ends :l -nbins = number of spherical shells to create between r_min and r_max :l -one or more input values can be listed :l -value = vx, vy, vz, fx, fy, fz, density/mass, density/number, c_ID, c_ID\[I\], f_ID, f_ID\[I\], v_name :l - vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component) - density/number, density/mass = number or mass density - c_ID = per-atom vector calculated by a compute with ID - c_ID\[I\] = Ith column of per-atom array calculated by a compute with ID - f_ID = per-atom vector calculated by a fix with ID - f_ID\[I\] = Ith column of per-atom array calculated by a fix with ID - v_name = per-atom vector calculated by an atom-style variable with name :pre - -zero or more keyword/arg pairs may be appended :l -keyword = {region} or {norm} or {units} or {ave} or {file} or {overwrite} or {title1} or {title2} or {title3} :l - {region} arg = region-ID - region-ID = ID of region atoms must be in to contribute to spatial averaging - {norm} arg = {all} or {sample} - {units} arg = {box} or {lattice} or {reduced} - {ave} args = {one} or {running} or {window M} - one = output new average value every Nfreq steps - running = output cumulative average of all previous Nfreq steps - window M = output average of M most recent Nfreq steps - {file} arg = filename - filename = file to write results to - {overwrite} arg = none = overwrite output file with only latest output - {title1} arg = string - string = text to print as 1st line of output file - {title2} arg = string - string = text to print as 2nd line of output file - {title3} arg = string - string = text to print as 3rd line of output file :pre -:ule - -[Examples:] - -fix 1 all ave/spatial/sphere 10000 1 10000 0.5 0.5 0.5 0.1 0.5 5 density/number vx vy vz units reduced title1 "My output values" -fix 1 flow ave/spatial/sphere 100 10 1000 20.0 20.0 20.0 0.0 20.0 20 vx vz norm sample file vel.profile :pre - -[Description:] - -Use one or more per-atom vectors as inputs every few timesteps, bin -their values spatially into spherical shells based on current atom -coordinates, and average the bin values over longer timescales. The -resulting bin averages can be used by other "output -commands"_Section_howto.html#howto_15 such as "thermo_style -custom"_thermo_style.html, and can also be written to a file. - -The group specified with the command means only atoms within the group -contribute to bin averages. If the {region} keyword is used, the atom -must be in both the group and the specified geometric -"region"_region.html in order to contribute to bin averages. - -Each listed value can be an atom attribute (position, velocity, force -component), a mass or number density, or the result of a -"compute"_compute.html or "fix"_fix.html or the evaluation of an -atom-style "variable"_variable.html. In the latter cases, the -compute, fix, or variable must produce a per-atom quantity, not a -global quantity. If you wish to time-average global quantities from a -compute, fix, or variable, then see the "fix -ave/time"_fix_ave_time.html command. - -"Computes"_compute.html that produce per-atom quantities are those -which have the word {atom} in their style name. See the doc pages for -individual "fixes"_fix.html to determine which ones produce per-atom -quantities. "Variables"_variable.html of style {atom} are the only -ones that can be used with this fix since all other styles of variable -produce global quantities. - -The per-atom values of each input vector are binned and averaged -independently of the per-atom values in other input vectors. - -{Nbins} specifies the number of spherical shells which will be created -between r_min and r_max centered at (origin_x, origin_y, origin_z). - -NOTE: This fix works by creating an array of size Nbins by Nvalues on -each processor. Nbins is the total number of bins; Nvalues is the -number of input values specified. Each processor loops over its -atoms, tallying its values to the appropriate bin. Then the entire -array is summed across all processors. This means that using a large -number of bins will incur an overhead in memory and computational cost -(summing across processors), so be careful to use reasonable numbers -of bins. - -:line - -The {Nevery}, {Nrepeat}, and {Nfreq} arguments specify on what -timesteps the input values will be used to bin them and contribute to -the average. The final averaged quantities are generated on timesteps -that are a multiples of {Nfreq}. The average is over {Nrepeat} -quantities, computed in the preceding portion of the simulation every -{Nevery} timesteps. {Nfreq} must be a multiple of {Nevery} and -{Nevery} must be non-zero even if {Nrepeat} is 1. -Also, the timesteps -contributing to the average value cannot overlap, -i.e. Nrepeat*Nevery can not exceed Nfreq. - -For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on -timesteps 90,92,94,96,98,100 will be used to compute the final average -on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on -timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time -averaging is done; values are simply generated on timesteps -100,200,etc. - -:line - -The {origin_x}, {origin_y}, and {origin_z} parameters may be specified -by either a compute or a variable. This allows, for example, the -center of the spherical bins to be attached to the center of mass of a -group of atoms. If a variable origin is used and periodic boundary -conditions are in effect, then the origin will be wrapped across -periodic boundaries whenever it changes so that it is always inside -the simulation box. - -:line - -The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory. -Note that other atom attributes (including atom postitions x,y,z) can -be used as inputs to this fix by using the "compute -property/atom"_compute_property_atom.html command and then specifying -an input value from that compute. - -The {density/number} value means the number density is computed in -each bin, i.e. a weighting of 1 for each atom. The {density/mass} -value means the mass density is computed in each bin, i.e. each atom -is weighted by its mass. The resulting density is normalized by the -volume of the bin so that units of number/volume or density are -output. See the "units"_units.html command doc page for the -definition of density for each choice of units, e.g. gram/cm^3. -The bin volume will always be calculated in box units, independent -of the use of the {units} keyword in this command. - -If a value begins with "c_", a compute ID must follow which has been -previously defined in the input script. If no bracketed integer is -appended, the per-atom vector calculated by the compute is used. If a -bracketed integer is appended, the Ith column of the per-atom array -calculated by the compute is used. Users can also write code for -their own compute styles and "add them to LAMMPS"_Section_modify.html. - -If a value begins with "f_", a fix ID must follow which has been -previously defined in the input script. If no bracketed integer is -appended, the per-atom vector calculated by the fix is used. If a -bracketed integer is appended, the Ith column of the per-atom array -calculated by the fix is used. Note that some fixes only produce -their values on certain timesteps, which must be compatible with -{Nevery}, else an error results. Users can also write code for their -own fix styles and "add them to LAMMPS"_Section_modify.html. - -If a value begins with "v_", a variable name must follow which has -been previously defined in the input script. Variables of style -{atom} can reference thermodynamic keywords and various per-atom -attributes, or invoke other computes, fixes, or variables when they -are evaluated, so this is a very general means of generating per-atom -quantities to spatially average. - -:line - -Additional optional keywords also affect the operation of this fix. -The {region} keyword was discussed above. - -The {norm} keyword affects how averaging is done for the output -produced every {Nfreq} timesteps. For an {all} setting, a bin -quantity is summed over all atoms in all {Nrepeat} samples, as is the -count of atoms in the bin. The printed value for the bin is -Total-quantity / Total-count. In other words it is an average over -the entire {Nfreq} timescale. - -For a {sample} setting, the bin quantity is summed over atoms for only -a single sample, as is the count, and a "average sample value" is -computed, i.e. Sample-quantity / Sample-count. The printed value for -the bin is the average of the {Nrepeat} "average sample values", In -other words it is an average of an average. - -The {ave} keyword determines how the bin values produced every {Nfreq} -steps are averaged with bin values produced on previous steps that -were multiples of {Nfreq}, before they are accessed by another output -command or written to a file. - -If the {ave} setting is {one}, then the bin values produced on -timesteps that are multiples of {Nfreq} are independent of each other; -they are output as-is without further averaging. - -If the {ave} setting is {running}, then the bin values produced on -timesteps that are multiples of {Nfreq} are summed and averaged in a -cumulative sense before being output. Each output bin value is thus -the average of the bin value produced on that timestep with all -preceding values for the same bin. This running average begins when -the fix is defined; it can only be restarted by deleting the fix via -the "unfix"_unfix.html command, or re-defining the fix by -re-specifying it. - -If the {ave} setting is {window}, then the bin values produced on -timesteps that are multiples of {Nfreq} are summed and averaged within -a moving "window" of time, so that the last M values for the same bin -are used to produce the output. E.g. if M = 3 and Nfreq = 1000, then -the output on step 10000 will be the average of the individual bin -values on steps 8000,9000,10000. Outputs on early steps will average -over less than M values if they are not available. - -The {units} keyword determines the meaning of the distance units used -for the sphere origin and the two radial lengths. For orthogonal -simulation boxes, any of the 3 options may be used. For -non-orthogonal (triclinic) simulation boxes, only the {reduced} option -may be used. - -A {box} value selects standard distance units as defined by the -"units"_units.html command, e.g. Angstroms for units = real or metal. -A {lattice} value means the distance units are in lattice spacings. -The "lattice"_lattice.html command must have been previously used to -define the lattice spacing. - -NOTE: The {lattice} style may only be used if the lattice spacing is -the same in each direction. - -A {reduced} value means normalized unitless values between 0 and 1, -which represent the lower and upper faces of the simulation box -respectively. Thus an {origin} value of 0.5 means the center of the -box in any dimension. - -The {file} keyword allows a filename to be specified. Every {Nfreq} -timesteps, a section of bin info will be written to a text file in the -following format. A line with the timestep and number of bin is -written. Then one line per bin is written, containing the bin ID -(1-N), the coordinate of the center of the bin, the number of atoms in -the bin, and one or more calculated values. The number of values in -each line corresponds to the number of values specified in the fix -ave/spatial command. The number of atoms and the value(s) are average -quantities. If the value of the {units} keyword is {box} or -{lattice}, the "coord" is printed in box units. If the value of the -{units} keyword is {reduced}, the "coord" is printed in reduced units -(0-1). - -The {overwrite} keyword will continuously overwrite the output file -with the latest output, so that it only contains one timestep worth of -output. This option can only be used with the {ave running} setting. - -The {title1} and {title2} and {title3} keywords allow specification of -the strings that will be printed as the first 3 lines of the output -file, assuming the {file} keyword was used. LAMMPS uses default -values for each of these, so they do not need to be specified. - -By default, these header lines are as follows: - -# Spatial-averaged data for fix ID and group name -# Timestep Number-of-bins -# Bin r Count value1 value2 ... :pre - -In the first line, ID and name are replaced with the fix-ID and group -name. The second line describes the two values that are printed at -the first of each section of output. In the third line the values are -replaced with the appropriate fields from the fix ave/spatial command. -The Coord2 and Coord3 entries in the third line only appear for 2d and -3d bins respectively. For 1d bins, the word Coord1 is replaced by -just Coord. - -:line - -[Restart, fix_modify, output, run start/stop, minimize info:] - -No information about this fix is written to "binary restart -files"_restart.html. None of the "fix_modify"_fix_modify.html options -are relevant to this fix. - -This fix computes a global array of values which can be accessed by -various "output commands"_Section_howto.html#howto_15. The values can -only be accessed on timesteps that are multiples of {Nfreq} since that -is when averaging is performed. The global array has # of rows = -Nbins and # of columns = 2+Nvalues. The first column contains the -radius at the center of the shell. For units {reduced}, this is in -reduced units, while for units {box} and {lattice} this is in box -units. The next column has the count of atoms in that bin, and the -remaining columns are the Nvalue quantities. When the array is -accessed with an I that exceeds the current number of bins, than a 0.0 -is returned by the fix instead of an error. The array values -calculated by this fix are "intensive", since they are already -normalized by the count of atoms in each bin. - -No parameter of this fix can be used with the {start/stop} keywords of -the "run"_run.html command. This fix is not invoked during "energy -minimization"_minimize.html. - -[Restrictions:] - -When the {ave} keyword is set to {running} or {window} then the number -of bins must remain the same during the simulation, so that the -appropriate averaging can be done. This will be the case if the -simulation box size doesn't change or if the {units} keyword is set to -{reduced}. - -This style is part of the USER-MISC package. It is only enabled if -LAMMPS is build with that package. See the "Making of -LAMMPS"_Section_start.html#3 section for more info. - -[Related commands:] - -"compute"_compute.html, "fix ave/atom"_fix_ave_atom.html, "fix -ave/histo"_fix_ave_histo.html, "fix ave/time"_fix_ave_time.html, -"variable"_variable.html, "fix ave/correlate"_fix_ave_correlate.html, -"fix ave/spatial"_fix_ave_spatial.html, - -[Default:] - -The option defaults are norm = all, ave = one, units = lattice, no -file output, and title 1,2,3 = strings as described above. diff --git a/doc/src/fix_ave_time.txt b/doc/src/fix_ave_time.txt index 386bbcf6a0..7eca1abe6d 100644 --- a/doc/src/fix_ave_time.txt +++ b/doc/src/fix_ave_time.txt @@ -79,7 +79,7 @@ Each listed value can be the result of a "compute"_compute.html or must produce a global quantity, not a per-atom or local quantity. If you wish to spatial- or time-average or histogram per-atom quantities from a compute, fix, or variable, then see the "fix -ave/spatial"_fix_ave_spatial.html, "fix ave/atom"_fix_ave_atom.html, +ave/chunk"_fix_ave_chunk.html, "fix ave/atom"_fix_ave_atom.html, or "fix ave/histo"_fix_ave_histo.html commands. If you wish to sum a per-atom quantity into a single global quantity, see the "compute reduce"_compute_reduce.html command. @@ -322,7 +322,7 @@ minimization"_minimize.html. [Related commands:] "compute"_compute.html, "fix ave/atom"_fix_ave_atom.html, "fix -ave/spatial"_fix_ave_spatial.html, "fix ave/histo"_fix_ave_histo.html, +ave/chunk"_fix_ave_chunk.html, "fix ave/histo"_fix_ave_histo.html, "variable"_variable.html, "fix ave/correlate"_fix_ave_correlate.html, [Default:] diff --git a/doc/src/fix_aveforce.txt b/doc/src/fix_aveforce.txt index 2b8aff6618..00ba38aaf1 100644 --- a/doc/src/fix_aveforce.txt +++ b/doc/src/fix_aveforce.txt @@ -7,7 +7,6 @@ :line fix aveforce command :h3 -fix aveforce/cuda command :h3 [Syntax:] @@ -64,15 +63,15 @@ to it. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in +Styles with a uffix are functionally the same as the corresponding +style without the suffix. They have been optimized to run faster, +depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making +These accelerated styles are part of the ackage. They are only +enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_deform.txt b/doc/src/fix_deform.txt index 1d786cc322..2f86440664 100644 --- a/doc/src/fix_deform.txt +++ b/doc/src/fix_deform.txt @@ -496,7 +496,7 @@ box. E.g. for a shearing system the box deformation velocity may vary from 0 at the bottom to 10 at the top of the box. But the stream velocity profile of the atoms may vary from -5 at the bottom to +5 at the top. You can monitor these effects using the "fix -ave/spatial"_fix_ave_spatial.html, "compute +ave/chunk"_fix_ave_chunk.html, "compute temp/deform"_compute_temp_deform.html, and "compute temp/profile"_compute_temp_profile.html commands. One way to induce atoms to stream consistent with the box deformation is to give them an @@ -542,7 +542,7 @@ command if you want to include lattice spacings in a variable formula. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -550,9 +550,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_ehex.txt b/doc/src/fix_ehex.txt index 7710f04163..c55e6722ee 100644 --- a/doc/src/fix_ehex.txt +++ b/doc/src/fix_ehex.txt @@ -61,59 +61,31 @@ hundred (LJ and SPC/E water) with little computational overhead. In both algorithms (non-translational) kinetic energy is constantly swapped between regions (reservoirs) to impose a heat flux onto the system. The equations of motion are therefore modified if a particle -{i} is located inside a reservoir - -:c,image(Eqs/fix_ehex01.jpg) - -where - -:c,image(Eqs/fix_ehex02.jpg) - -We use - -:c,image(Eqs/fix_ehex03.jpg) - -to label those parts of the simulation box which are not -thermostatted.) The input parameter {region-ID} of this fix -corresponds to {k}. The energy swap is modelled by introducing an +\(i\) is located inside a reservoir \(\Gamma_{k}\) where \(k>0\). We +use \(\Gamma_{0}\) to label those parts of the simulation box which +are not thermostatted.) The input parameter {region-ID} of this fix +corresponds to \(k\). The energy swap is modelled by introducing an additional thermostatting force to the equations of motion, such that -the time evolution of coordinates and momenta of particle {i} becomes -"(Wirnsberger)"_#Wirnsberger +the time evolution of coordinates and momenta of particle \(i\) +becomes "(Wirnsberger)"_#Wirnsberger -:c,image(Eqs/fix_ehex04.jpg) +:c,image(Eqs/fix_ehex_eom.jpg) The thermostatting force is given by -:c,image(Eqs/fix_ehex05.jpg) +:c,image(Eqs/fix_ehex_f.jpg) -where - -:c,image(Eqs/fix_ehex06.jpg) - -is the mass and - -:c,image(Eqs/fix_ehex07.jpg) - -maps the particle position to the respective reservoir. The quantity - -:c,image(Eqs/fix_ehex08.jpg) - -corresponds to the input parameter {F}, which is the energy flux into -the reservoir. Furthermore, - -:c,image(Eqs/fix_ehex09.jpg) - -and - -:c,image(Eqs/fix_ehex10.jpg) - -denote the non-translational kinetic -energy and the centre of mass velocity of that reservoir. The -thermostatting force does not affect the centre of mass velocities of -the individual reservoirs and the entire simulation box. A derivation -of the equations and details on the numerical implementation with -velocity Verlet in LAMMPS can be found in reference -"(Wirnsberger)"#_Wirnsberger. +where \(m_i\) is the mass and \(k(\mathbf r_i)\) maps the particle +position to the respective reservoir. The quantity +\(F_{\Gamma_{k(\mathbf r_i)}}\) corresponds to the input parameter +{F}, which is the energy flux into the reservoir. Furthermore, +\(K_{\Gamma_{k(\mathbf r_i)}}\) and \(v_{\Gamma_{k(\mathbf r_i)}}\) +denote the non-translational kinetic energy and the centre of mass +velocity of that reservoir. The thermostatting force does not affect +the centre of mass velocities of the individual reservoirs and the +entire simulation box. A derivation of the equations and details on +the numerical implementation with velocity Verlet in LAMMPS can be +found in reference "(Wirnsberger)"#_Wirnsberger. NOTE: This fix only integrates the thermostatting force and must be combined with another integrator, such as "fix nve"_fix_nve.html, to @@ -165,7 +137,7 @@ implementation of the eHEX algorithm introduces a small error in the bond distances, which goes to zero with order three in the timestep. For example, in a simulation of SPC/E water with a timestep of 2 fs the maximum relative error in the bond distances was found to -be on the order of :c,image(Eqs/fix_ehex07.jpg) for relatively large +be on the order of \(10^{-7}\) for relatively large temperature gradients. A higher precision can be achieved by decreasing the timestep. @@ -190,8 +162,9 @@ LAMMPS"_Section_start.html#start_3 section for more info. [Related commands:] "fix heat"_fix_heat.html, "fix -thermal/conductivity"_fix_thermal_conductivity.html, -"compute temp"_compute_temp.html, "compute temp/region"_compute_temp_region.html +thermal/conductivity"_fix_thermal_conductivity.html, "compute +temp"_compute_temp.html, "compute +temp/region"_compute_temp_region.html [Default:] none @@ -203,4 +176,3 @@ thermal/conductivity"_fix_thermal_conductivity.html, :link(Wirnsberger) [(Wirnsberger)] Wirnsberger, Frenkel, and Dellago, J Chem Phys, 143, 124104 (2015). - diff --git a/doc/src/fix_enforce2d.txt b/doc/src/fix_enforce2d.txt index 6a07e7ec5d..1a2f186bd5 100644 --- a/doc/src/fix_enforce2d.txt +++ b/doc/src/fix_enforce2d.txt @@ -7,7 +7,6 @@ :line fix enforce2d command :h3 -fix enforce2d/cuda command :h3 [Syntax:] @@ -28,15 +27,15 @@ not move from their initial z coordinate. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in +Styles with a uffix are functionally the same as the corresponding +style without the suffix. They have been optimized to run faster, +depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making +These accelerated styles are part of the ackage. They are only +enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_eos_cv.txt b/doc/src/fix_eos_cv.txt index 4d0f5306d9..49909f035b 100644 --- a/doc/src/fix_eos_cv.txt +++ b/doc/src/fix_eos_cv.txt @@ -38,8 +38,12 @@ possible. [Restrictions:] -The fix {eos/cv} is only available if LAMMPS is built with the -USER-DPD package. +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. [Related commands:] diff --git a/doc/src/fix_eos_table.txt b/doc/src/fix_eos_table.txt index 7dfeb173a6..b6b7daacad 100644 --- a/doc/src/fix_eos_table.txt +++ b/doc/src/fix_eos_table.txt @@ -98,13 +98,17 @@ one that matches the specified keyword. [Restrictions:] -The fix {eos/table} is only available if LAMMPS is built with the -USER-DPD package. +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. The equation of state must be a monotonically increasing function. -An exit error will occur if the internal temperature or internal -energies are not within the table cutoffs. +An error will occur if the internal temperature or internal energies +are not within the table cutoffs. [Related commands:] diff --git a/doc/src/fix_eos_table_rx.txt b/doc/src/fix_eos_table_rx.txt new file mode 100644 index 0000000000..9c97151202 --- /dev/null +++ b/doc/src/fix_eos_table_rx.txt @@ -0,0 +1,142 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +fix eos/table/rx command :h3 + +[Syntax:] + +fix ID group-ID eos/table/rx style file1 N keyword file2 :pre + +ID, group-ID are documented in "fix"_fix.html command +eos/table/rx = style name of this fix command +style = {linear} = method of interpolation +file1 = filename containing the tabulated equation of state +N = use N values in {linear} tables +keyword = name of table keyword correponding to table file +file2 = filename containing the heats of formation of each species :ul + +[Examples:] + +fix 1 all eos/table/rx linear eos.table 10000 KEYWORD thermo.table :pre + +[Description:] + +Fix {eos/table/rx} applies a tabulated mesoparticle equation +of state to relate the concentration-dependent particle internal +energy (u_i) to the particle internal temperature (dpdTheta_i). + +The concentration-dependent particle internal energy (u_i) is +computed according to the following relation: + +:c,image(Eqs/fix_eos_table_rx.jpg) + +where {m} is the number of species, {c_i,j} is the concentration of +species {j} in particle {i}, {u_j} is the internal energy of species j, +{DeltaH_f,j} is the heat of formation of species {j}, N is the number of +molecules represented by the coarse-grained particle, kb is the +Boltzmann constant, and T is the temperature of the system. + +Fix {eos/table/rx} creates interpolation tables of length {N} from {m} +internal energy values of each species {u_j} listed in a file as a +function of internal temperature. During a simulation, these tables +are used to interpolate internal energy or temperature values as needed. +The interpolation is done with the {linear} style. For the {linear} style, +the internal temperature is used to find 2 surrounding table values from +which an internal energy is computed by linear interpolation. A secant +solver is used to determine the internal temperature from the internal energy. + +The first filename specifies a file containing tabulated internal +temperature and {m} internal energy values for each species {u_j}. +The keyword specifies a section of the file. The format of this +file is described below. + +The second filename specifies a file containing heat of formation +{DeltaH_f,j} for each species. + +:line + +The format of a tabulated file is as follows (without the +parenthesized comments): + +# EOS TABLE (one or more comment or blank lines) :pre + +KEYWORD (keyword is first text on line) +N 500 h2 no2 n2 ... no (N parameter species1 species2 ... speciesN) + (blank) +1 1.00 0.000 ... 0.0000 (index, internal temperature, internal energy of species 1, ..., internal energy of species m) +2 1.02 0.001 ... 0.0002 +... +500 10.0 0.500 ... 1.0000 :pre + +A section begins with a non-blank line whose 1st character is not a +"#"; blank lines or lines starting with "#" can be used as comments +between sections. The first line begins with a keyword which +identifies the section. The line can contain additional text, but the +initial text must match the argument specified in the fix command. + +The next line lists the number of table entries and the species names +that correspond with all the species listed in the reaction equations +through the {fix rx} command. +The parameter "N" is required and its value is the number of table +entries that follow. Let Nfile = "N" in the tabulated file. +What LAMMPS does is a preliminary interpolation by creating splines +using the Nfile tabulated values as nodal points. + +Following a blank line, the next N lines list the tabulated values. +On each line, the 1st value is the index from 1 to N, the 2nd value is +the internal temperature (in temperature units), the 3rd value until +the {m+3} value are the internal energies of the m species (in energy units). + +Note that all internal temperature and internal energy values must +increase from one line to the next. + +Note that one file can contain many sections, each with a tabulated +potential. LAMMPS reads the file section by section until it finds +one that matches the specified keyword. + +:line + +The format of a heat of formation file is as follows (without the +parenthesized comments): + +# HEAT OF FORMATION TABLE (one or more comment or blank lines) :pre + (blank) +h2 0.00 (species name, heat of formation) +no2 0.34 +n2 0.00 +... +no 0.93 :pre + +Note that the species can be listed in any order. The tag that is +used as the species name must correspond with the tags used to define +the reactions with the "fix rx"_fix_rx.html command. + +:line + +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. + +The equation of state must be a monotonically increasing function. + +An error will occur if the internal temperature or internal energies +are not within the table cutoffs. + +[Related commands:] + +"fix rx"_fix_rx.html, +"pair dpd/fdt"_dpd_fdt.html + +[Default:] none + +:line diff --git a/doc/src/fix_freeze.txt b/doc/src/fix_freeze.txt index da5f2c801a..63fff5ab9a 100644 --- a/doc/src/fix_freeze.txt +++ b/doc/src/fix_freeze.txt @@ -7,7 +7,6 @@ :line fix freeze command :h3 -fix freeze/cuda command :h3 [Syntax:] @@ -32,15 +31,15 @@ using "fix setforce"_fix_setforce.html. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in +Styles with a uffix are functionally the same as the corresponding +style without the suffix. They have been optimized to run faster, +depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making +These accelerated styles are part of the ackage. They are only +enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_gravity.txt b/doc/src/fix_gravity.txt index 0e07e6a72e..a1c1895a82 100644 --- a/doc/src/fix_gravity.txt +++ b/doc/src/fix_gravity.txt @@ -7,7 +7,6 @@ :line fix gravity command :h3 -fix gravity/cuda command :h3 fix gravity/omp command :h3 [Syntax:] @@ -88,7 +87,7 @@ field. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -96,9 +95,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 8b86d763a3..8d0011d8ff 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -261,7 +261,7 @@ generates an average temperature of 220 K, instead of 300 K. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -269,9 +269,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_lb_rigid_pc_sphere.txt b/doc/src/fix_lb_rigid_pc_sphere.txt index b040b6243c..89474d8052 100755 --- a/doc/src/fix_lb_rigid_pc_sphere.txt +++ b/doc/src/fix_lb_rigid_pc_sphere.txt @@ -80,7 +80,7 @@ assumes the constituent atoms are point particles); see No information about the {rigid} and {rigid/nve} fixes are written to "binary restart files"_restart.html. -Similar to the "fix rigid"_fix_rigid.html command: " The rigid +Similar to the "fix rigid"_fix_rigid.html command: The rigid fix computes a global scalar which can be accessed by various "output commands"_Section_howto.html#howto_15. The scalar value calculated by these fixes is "intensive". The scalar is the current temperature of @@ -91,9 +91,9 @@ mass of the body and v = the velocity of its center of mass. The rotational energy of a rigid body is 1/2 I w^2, where I = the moment of inertia tensor of the body and w = its angular velocity. Degrees of freedom constrained by the {force} and {torque} keywords are -removed from this calculation." +removed from this calculation. -"All of these fixes compute a global array of values which can be +All of these fixes compute a global array of values which can be accessed by various "output commands"_Section_howto.html#howto_15. The number of rows in the array is equal to the number of rigid bodies. The number of columns is 15. Thus for each rigid body, 15 @@ -117,7 +117,7 @@ they are independent of the number of atoms in the simulation. No parameter of these fixes can be used with the {start/stop} keywords of the "run"_run.html command. These fixes are not invoked during -"energy minimization"_minimize.html. " +"energy minimization"_minimize.html. [Restrictions:] diff --git a/doc/src/fix_nh.txt b/doc/src/fix_nh.txt index 0537bba3b2..94435a38f4 100644 --- a/doc/src/fix_nh.txt +++ b/doc/src/fix_nh.txt @@ -7,12 +7,10 @@ :line fix nvt command :h3 -fix nvt/cuda command :h3 fix nvt/intel command :h3 fix nvt/kk command :h3 fix nvt/omp command :h3 fix npt command :h3 -fix npt/cuda command :h3 fix npt/intel command :h3 fix npt/kk command :h3 fix npt/omp command :h3 @@ -481,7 +479,7 @@ the various ways to do this. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -489,9 +487,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nph_asphere.txt b/doc/src/fix_nph_asphere.txt index ca690ace3e..8977962402 100644 --- a/doc/src/fix_nph_asphere.txt +++ b/doc/src/fix_nph_asphere.txt @@ -78,7 +78,7 @@ It also means that changing attributes of {thermo_temp} or :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -86,9 +86,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nph_body.txt b/doc/src/fix_nph_body.txt index 41fe32dded..71dd4c607c 100755 --- a/doc/src/fix_nph_body.txt +++ b/doc/src/fix_nph_body.txt @@ -77,7 +77,7 @@ It also means that changing attributes of {thermo_temp} or :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -85,9 +85,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nph_sphere.txt b/doc/src/fix_nph_sphere.txt index 264f86bc5a..85df2ee7aa 100644 --- a/doc/src/fix_nph_sphere.txt +++ b/doc/src/fix_nph_sphere.txt @@ -78,7 +78,7 @@ It also means that changing attributes of {thermo_temp} or :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -86,9 +86,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nphug.txt b/doc/src/fix_nphug.txt index 4e274c8d5c..7b499b8b3c 100644 --- a/doc/src/fix_nphug.txt +++ b/doc/src/fix_nphug.txt @@ -137,7 +137,7 @@ It also means that changing attributes of {thermo_temp} or :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -145,9 +145,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_npt_asphere.txt b/doc/src/fix_npt_asphere.txt index ec089427ec..4c39a5ccd5 100644 --- a/doc/src/fix_npt_asphere.txt +++ b/doc/src/fix_npt_asphere.txt @@ -102,7 +102,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -110,9 +110,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_npt_body.txt b/doc/src/fix_npt_body.txt index 4ab021c723..db5052fa8a 100755 --- a/doc/src/fix_npt_body.txt +++ b/doc/src/fix_npt_body.txt @@ -101,7 +101,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -109,9 +109,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_npt_sphere.txt b/doc/src/fix_npt_sphere.txt index 44ecf1aaf3..447e51fc4d 100644 --- a/doc/src/fix_npt_sphere.txt +++ b/doc/src/fix_npt_sphere.txt @@ -101,7 +101,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -109,9 +109,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nve.txt b/doc/src/fix_nve.txt index 0ca3d6c60e..3dda010e78 100644 --- a/doc/src/fix_nve.txt +++ b/doc/src/fix_nve.txt @@ -7,7 +7,6 @@ :line fix nve command :h3 -fix nve/cuda command :h3 fix nve/intel command :h3 fix nve/kk command :h3 fix nve/omp command :h3 @@ -32,7 +31,7 @@ ensemble. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -40,9 +39,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nve_asphere.txt b/doc/src/fix_nve_asphere.txt index c9eef361d2..f43ff23d04 100644 --- a/doc/src/fix_nve_asphere.txt +++ b/doc/src/fix_nve_asphere.txt @@ -42,7 +42,7 @@ This fix is not invoked during "energy minimization"_minimize.html. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -50,9 +50,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nve_sphere.txt b/doc/src/fix_nve_sphere.txt index cdc7eced34..c797cc8ddb 100644 --- a/doc/src/fix_nve_sphere.txt +++ b/doc/src/fix_nve_sphere.txt @@ -45,7 +45,7 @@ dipole"_atom_style.html command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -53,9 +53,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nvt_asphere.txt b/doc/src/fix_nvt_asphere.txt index 4784d767be..316320a0e2 100644 --- a/doc/src/fix_nvt_asphere.txt +++ b/doc/src/fix_nvt_asphere.txt @@ -83,7 +83,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -91,9 +91,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nvt_body.txt b/doc/src/fix_nvt_body.txt index 954da870f4..de570d0a22 100755 --- a/doc/src/fix_nvt_body.txt +++ b/doc/src/fix_nvt_body.txt @@ -82,7 +82,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -90,9 +90,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nvt_sllod.txt b/doc/src/fix_nvt_sllod.txt index dac39d2a3d..edd58f0ed5 100644 --- a/doc/src/fix_nvt_sllod.txt +++ b/doc/src/fix_nvt_sllod.txt @@ -106,7 +106,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -114,9 +114,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_nvt_sphere.txt b/doc/src/fix_nvt_sphere.txt index 83b3ceaf0d..99effb9211 100644 --- a/doc/src/fix_nvt_sphere.txt +++ b/doc/src/fix_nvt_sphere.txt @@ -83,7 +83,7 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -91,9 +91,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_qeq_comb.txt b/doc/src/fix_qeq_comb.txt index 690be91d95..a697008fab 100644 --- a/doc/src/fix_qeq_comb.txt +++ b/doc/src/fix_qeq_comb.txt @@ -59,7 +59,7 @@ equilibration calculation is written to the specifed file. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -67,9 +67,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_rigid.txt b/doc/src/fix_rigid.txt index 1f45a4580a..6ddce4f8e5 100644 --- a/doc/src/fix_rigid.txt +++ b/doc/src/fix_rigid.txt @@ -632,7 +632,7 @@ rigid/nvt. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -640,9 +640,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_rx.txt b/doc/src/fix_rx.txt new file mode 100644 index 0000000000..f9d1aa0d55 --- /dev/null +++ b/doc/src/fix_rx.txt @@ -0,0 +1,151 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +fix rx command :h3 + +[Syntax:] + +fix ID group-ID rx file localTemp solver ... :pre + +ID, group-ID are documented in "fix"_fix.html command +rx = style name of this fix command +file = filename containing the reaction kinetic equations and Arrhenius parameters +localTemp = {none,lucy} = no local temperature averaging or local temperature defined through Lucy weighting function +solver = {lammps_rk4} = Explicit 4th order Runge-Kutta method +minSteps = # of steps for rk4 solver :ul + +[Examples:] + +fix 1 all rx kinetics.rx none lammps_rk4 +fix 1 all rx kinetics.rx none lammps_rk4 1 +fix 1 all rx kinetics.rx lucy lammps_rk4 10 :pre + +[Description:] + +Fix {rx} solves the reaction kinetic ODEs for a given reaction set that is +defined within the file associated with this command. + +For a general reaction such that + +:c,image(Eqs/fix_rx_reaction.jpg) + +the reaction rate equation is defined to be of the form + +:c,image(Eqs/fix_rx_reactionRate.jpg) + +In the current implementation, the exponents are defined to be equal +to the stoichiometric coefficients. A given reaction set consisting +of {n} reaction equations will contain a total of {m} species. A set +of {m} ordinary differential equations (ODEs) that describe the change +in concentration of a given species as a function of time are then +constructed based on the {n} reaction rate equations. + +The ODE systems are solved over the full DPD timestep {dt} using a 4th +order Runge-Kutta {rk4} method with a fixed step-size {h}, specified +by the {lammps_rk4} keyword. The number of ODE steps per DPD timestep +for the rk4 method is optionally specified immediately after the rk4 +keyword. The ODE step-size is set as {dt/num_steps}. Smaller +step-sizes tend to yield more accurate results but there is not +control on the error. + +:line + +The filename specifies a file that contains the entire set of reaction +kinetic equations and corresponding Arrhenius parameters. The format of +this file is described below. + +There is no restriction on the total number or reaction equations that +are specified. The species names are arbitrary string names that are +associated with the species concentrations. Each species in a given +reaction must be preceded by it's stoichiometric coefficient. The +only delimiters that are recognized between the species are either a +{+} or {=} character. The {=} character corresponds to an +irreversible reaction. After specifying the reaction, the reaction +rate constant is determined through the temperature dependent +Arrhenius equation: + +:c,image(Eqs/fix_rx.jpg) + +where {A} is the Arrhenius factor in time units or concentration/time +units, {n} is the unitless exponent of the temperature dependence, and +{E_a} is the activation energy in energy units. The temperature +dependence can be removed by specifying the exponent as zero. + +The internal temperature of the coarse-grained particles can be used +in constructing the reaction rate constants at every DPD timestep by +specifying the keyword {none}. Alternatively, the keyword {lucy} can +be specified to compute a local-average particle internal temperature +for use in the reaction rate constant expressions. The local-average +particle internal temperature is defined as: + +:c,image(Eqs/fix_rx_localTemp.jpg) + +where the Lucy function is expressed as: + +:c,image(Eqs/fix_rx_localTemp2.jpg) + +The self-particle interaction is included in the above equation. + +:line + +The format of a tabulated file is as follows (without the +parenthesized comments): + +# Rxn equations and parameters (one or more comment or blank lines) :pre +1.0 hcn + 1.0 no2 = 1.0 no + 0.5 n2 + 0.5 h2 + 1.0 co 2.49E+01 0.0 1.34 (rxn equation, A, n, Ea) +1.0 hcn + 1.0 no = 1.0 co + 1.0 n2 + 0.5 h2 2.16E+00 0.0 1.52 +... +1.0 no + 1.0 co = 0.5 n2 + 1.0 co2 1.66E+06 0.0 0.69 :pre + +A section begins with a non-blank line whose 1st character is not a +"#"; blank lines or lines starting with "#" can be used as comments +between sections. + +Following a blank line, the next N lines list the N reaction +equations. Each species within the reaction equation is specified +through its stoichiometric coefficient and a species tag. Reactant +species are specified on the left-hand side of the equation and +product species are specified on the right-hand side of the equation. +After specifying the reactant and product species, the final three +arguments of each line represent the Arrhenius parameter {A}, the +temperature exponent {n}, and the activation energy {Ea}. + +Note that the species tags that are defined in the reaction equations +are used by the "fix eos/table/rx"_fix_eos_table_rx.html command to +define the thermodynamic properties of each species. Furthermore, the +number of species molecules (i.e., concentration) can be specified +either with the "set"_set.html command using the "d_" prefix or by +reading directly the concentrations from a data file. For the latter +case, the "read_data"_read_data.html command with the fix keyword +should be specified, where the fix-ID will be the "fix rx" ID with a +"_SPECIES" suffix, e.g. + +fix foo all rx reaction.file ... +read_data data.dpd fix foo_SPECIES NULL Species + +:line + +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +This command also requires use of the "atom_style dpd"_atom_style.html +command. + +This command can only be used with a constant energy or constant +enthalpy DPD simulation. + +[Related commands:] + +"fix eos/table/rx"_fix_eos_table_rx.html, +"fix shardlow"_fix_shardlow.html, +"pair dpd/fdt/energy"_dpd_fdt_energy.html + +[Default:] none diff --git a/doc/src/fix_setforce.txt b/doc/src/fix_setforce.txt index f5bbf606c7..0b151cbabd 100644 --- a/doc/src/fix_setforce.txt +++ b/doc/src/fix_setforce.txt @@ -7,7 +7,6 @@ :line fix setforce command :h3 -fix setforce/cuda command :h3 fix setforce/kk command :h3 [Syntax:] @@ -66,7 +65,7 @@ to it. :line -Styles with a {cuda} or {kk} suffix are functionally the same as the +Styles with a r {kk} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The @@ -74,10 +73,10 @@ accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. The region keyword is also supported by Kokkos, but a Kokkos-enabled -region must be used. See the region "region"_region.html command for more -information. +region must be used. See the region "region"_region.html command for +more information. -These accelerated styles are part of the USER-CUDA or Kokkos package. They are +These accelerated styles are part of the r Kokkos package. They are only enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. diff --git a/doc/src/fix_shake.txt b/doc/src/fix_shake.txt index d970e6cefa..69cdb3c12c 100644 --- a/doc/src/fix_shake.txt +++ b/doc/src/fix_shake.txt @@ -7,7 +7,6 @@ :line fix shake command :h3 -fix shake/cuda command :h3 fix rattle command :h3 [Syntax:] @@ -146,15 +145,15 @@ info of atoms in the molecule. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in +Styles with a uffix are functionally the same as the corresponding +style without the suffix. They have been optimized to run faster, +depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making +These accelerated styles are part of the ackage. They are only +enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/fix_shardlow.txt b/doc/src/fix_shardlow.txt index 2cb102f8fe..485f0a4b6f 100644 --- a/doc/src/fix_shardlow.txt +++ b/doc/src/fix_shardlow.txt @@ -54,9 +54,9 @@ examples/USER/dpd directory. [Restrictions:] -This fix is only available if LAMMPS is built with the USER-DPD -package. See the "Making LAMMPS"_Section_start.html#start_3 section -for more info. +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. This fix is currently limited to orthogonal simulation cell geometries. @@ -66,7 +66,7 @@ integration, e.g. "fix nve"_fix_nve.html or "fix nph"_fix_nh.html. The Shardlow splitting algorithm requires the sizes of the sub-domain lengths to be larger than twice the cutoff+skin. Generally, the -domain decomposition is dependant on the number of processors +domain decomposition is dependent on the number of processors requested. [Related commands:] diff --git a/doc/src/fix_temp_berendsen.txt b/doc/src/fix_temp_berendsen.txt index 6aab8cebac..202be8921f 100644 --- a/doc/src/fix_temp_berendsen.txt +++ b/doc/src/fix_temp_berendsen.txt @@ -7,7 +7,6 @@ :line fix temp/berendsen command :h3 -fix temp/berendsen/cuda command :h3 [Syntax:] @@ -105,27 +104,6 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in -"Section_accelerate"_Section_accelerate.html of the manual. The -accelerated styles take the same arguments and should produce the same -results, except for round-off and precision issues. - -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can -use the "suffix"_suffix.html command in your input script. - -See "Section_accelerate"_Section_accelerate.html of the manual for -more instructions on how to use the accelerated styles effectively. - -:line - [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart diff --git a/doc/src/fix_temp_rescale.txt b/doc/src/fix_temp_rescale.txt index 83ba39fd8f..4f8f216ce4 100644 --- a/doc/src/fix_temp_rescale.txt +++ b/doc/src/fix_temp_rescale.txt @@ -7,8 +7,6 @@ :line fix temp/rescale command :h3 -fix temp/rescale/cuda command :h3 -fix temp/rescale/limit/cuda command :h3 [Syntax:] @@ -113,27 +111,6 @@ thermal degrees of freedom, and the bias is added back in. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in -"Section_accelerate"_Section_accelerate.html of the manual. The -accelerated styles take the same arguments and should produce the same -results, except for round-off and precision issues. - -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can -use the "suffix"_suffix.html command in your input script. - -See "Section_accelerate"_Section_accelerate.html of the manual for -more instructions on how to use the accelerated styles effectively. - -:line - [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart diff --git a/doc/src/fix_thermal_conductivity.txt b/doc/src/fix_thermal_conductivity.txt index 307bb9982a..05984b7e3f 100644 --- a/doc/src/fix_thermal_conductivity.txt +++ b/doc/src/fix_thermal_conductivity.txt @@ -63,8 +63,8 @@ temperature profile (assuming z = edim) to the file tmp.profile: compute ke all ke/atom variable temp atom c_ke/1.5 -fix 3 all ave/spatial 10 100 1000 z lower 0.05 v_temp & - file tmp.profile units reduced :pre +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 3 all ave/chunk 10 100 1000 layers v_temp file tmp.profile :pre Note that by default, Nswap = 1, though this can be changed by the optional {swap} keyword. Setting this parameter appropriately, in @@ -145,10 +145,9 @@ bewteen solvent particles. [Related commands:] -"fix ehex"_fix_ehex.html, "fix heat"_fix_heat.html, -"fix ave/spatial"_fix_ave_spatial.html, "fix -viscosity"_fix_viscosity.html, "compute -heat/flux"_compute_heat_flux.html +"fix ehex"_fix_ehex.html, "fix heat"_fix_heat.html, "fix +ave/chunk"_fix_ave_chunk.html, "fix viscosity"_fix_viscosity.html, +"compute heat/flux"_compute_heat_flux.html [Default:] diff --git a/doc/src/fix_viscosity.txt b/doc/src/fix_viscosity.txt index 4b9c8174b0..744197256d 100644 --- a/doc/src/fix_viscosity.txt +++ b/doc/src/fix_viscosity.txt @@ -60,8 +60,8 @@ directions. Over time, this induces a shear velocity profile in the system which can be measured using commands such as the following, which writes the profile to the file tmp.profile: -fix f1 all ave/spatial 100 10 1000 z lower 0.05 vx & - file tmp.profile units reduced :pre +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix f1 all ave/chunk 100 10 1000 layers vx file tmp.profile :pre Note that by default, Nswap = 1 and vtarget = INF, though this can be changed by the optional {swap} and {vtarget} keywords. When vtarget = @@ -152,7 +152,7 @@ solvent particles. [Related commands:] -"fix ave/spatial"_fix_ave_spatial.html, "fix +"fix ave/chunk"_fix_ave_chunk.html, "fix thermal/conductivity"_fix_thermal_conductivity.html [Default:] diff --git a/doc/src/fix_viscous.txt b/doc/src/fix_viscous.txt index ab54f81d5a..3993b897a1 100644 --- a/doc/src/fix_viscous.txt +++ b/doc/src/fix_viscous.txt @@ -7,7 +7,6 @@ :line fix viscous command :h3 -fix viscous/cuda command :h3 [Syntax:] @@ -78,27 +77,6 @@ easily be used as a thermostat. :line -Styles with a {cuda} suffix are functionally the same as the -corresponding style without the suffix. They have been optimized to -run faster, depending on your available hardware, as discussed in -"Section_accelerate"_Section_accelerate.html of the manual. The -accelerated styles take the same arguments and should produce the same -results, except for round-off and precision issues. - -These accelerated styles are part of the USER-CUDA package. They are -only enabled if LAMMPS was built with that package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can -use the "suffix"_suffix.html command in your input script. - -See "Section_accelerate"_Section_accelerate.html of the manual for -more instructions on how to use the accelerated styles effectively. - -:line - [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart diff --git a/doc/src/fix_wall_reflect.txt b/doc/src/fix_wall_reflect.txt index 32206a66d5..d87326f4b8 100644 --- a/doc/src/fix_wall_reflect.txt +++ b/doc/src/fix_wall_reflect.txt @@ -127,7 +127,7 @@ position = c0 + A (1 - cos(omega*delta)) :pre :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -135,9 +135,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_class2.txt b/doc/src/improper_class2.txt index 890e15f04a..249beaf219 100644 --- a/doc/src/improper_class2.txt +++ b/doc/src/improper_class2.txt @@ -83,7 +83,7 @@ radians internally; hence the units of M are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -91,9 +91,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_cossq.txt b/doc/src/improper_cossq.txt index 9686c621da..551e137fd8 100644 --- a/doc/src/improper_cossq.txt +++ b/doc/src/improper_cossq.txt @@ -53,7 +53,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -61,9 +61,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_cvff.txt b/doc/src/improper_cvff.txt index 9f47d928de..4f82d90e7d 100644 --- a/doc/src/improper_cvff.txt +++ b/doc/src/improper_cvff.txt @@ -51,7 +51,7 @@ n (0,1,2,3,4,6) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -59,9 +59,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_fourier.txt b/doc/src/improper_fourier.txt index 586ffe0b03..a5a42647f8 100644 --- a/doc/src/improper_fourier.txt +++ b/doc/src/improper_fourier.txt @@ -45,7 +45,7 @@ all (integer >= 0) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -53,9 +53,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_harmonic.txt b/doc/src/improper_harmonic.txt index 8663465de6..7aa3829280 100644 --- a/doc/src/improper_harmonic.txt +++ b/doc/src/improper_harmonic.txt @@ -55,7 +55,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -63,9 +63,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_ring.txt b/doc/src/improper_ring.txt index 8968769a26..a9399802e9 100644 --- a/doc/src/improper_ring.txt +++ b/doc/src/improper_ring.txt @@ -57,7 +57,7 @@ internally; hence the units of K are in energy/radian^2. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -65,9 +65,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/improper_umbrella.txt b/doc/src/improper_umbrella.txt index f54c24482a..dbb6c3f237 100644 --- a/doc/src/improper_umbrella.txt +++ b/doc/src/improper_umbrella.txt @@ -48,7 +48,7 @@ omega0 (degrees) :ul :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -56,9 +56,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index 477a4f5ce9..ac713ba297 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -253,7 +253,7 @@ relative RMS error. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -271,7 +271,7 @@ calculation can be performed concurrently on the GPU while other calculations for non-bonded and bonded force calculation are performed on the CPU. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, USER-OMP, and OPT packages respectively. They are only enabled if LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. @@ -285,10 +285,10 @@ Note that the long-range electrostatic solvers in LAMMPS assume conducting metal (tinfoil) boundary conditions for both charge and dipole interactions. Vacuum boundary conditions are not currently supported. -The {ewald/disp}, {ewald}, {pppm}, and {msm} styles support -non-orthogonal (triclinic symmetry) simulation boxes. However, triclinic -simulation cells may not yet be supported by suffix versions of these -styles (such as {pppm/cuda}). +The {ewald/disp}, {ewald}, {pppm}, and {msm} styles support +non-orthogonal (triclinic symmetry) simulation boxes. However, +triclinic simulation cells may not yet be supported by suffix versions +of these styles. All of the kspace styles are part of the KSPACE package. They are only enabled if LAMMPS was built with that package. See the "Making diff --git a/doc/src/package.txt b/doc/src/package.txt index df7e01bf47..e6ea31ca39 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -12,24 +12,8 @@ package command :h3 package style args :pre -style = {cuda} or {gpu} or {intel} or {kokkos} or {omp} :ulb,l +style = {gpu} or {intel} or {kokkos} or {omp} :ulb,l args = arguments specific to the style :l - {cuda} args = Ngpu keyword value ... - Ngpu = # of GPUs per node - zero or more keyword/value pairs may be appended - keywords = {newton} or {gpuID} or {timing} or {test} or {thread} - {newton} = {off} or {on} - off = set Newton pairwise and bonded flags off (default) - on = set Newton pairwise and bonded flags on - {gpuID} values = gpu1 .. gpuN - gpu1 .. gpuN = IDs of the Ngpu GPUs to use - {timing} values = none - {test} values = id - id = atom-ID of a test particle - {thread} = auto or tpa or bpa - auto = test whether tpa or bpa is faster - tpa = one thread per atom - bpa = one block per atom {gpu} args = Ngpu keyword value ... Ngpu = # of GPUs per node zero or more keyword/value pairs may be appended @@ -107,8 +91,6 @@ args = arguments specific to the style :l package gpu 1 package gpu 1 split 0.75 package gpu 2 split -1.0 -package cuda 2 gpuID 0 2 -package cuda 1 test 3948 package kokkos neigh half comm device package omp 0 neigh no package omp 4 @@ -119,8 +101,8 @@ package intel 2 omp 4 mode mixed balance 0.5 :pre This command invokes package-specific settings for the various accelerator packages available in LAMMPS. Currently the following -packages use settings from this command: USER-CUDA, GPU, USER-INTEL, -KOKKOS, and USER-OMP. +packages use settings from this command: GPU, USER-INTEL, KOKKOS, and +USER-OMP. If this command is specified in an input script, it must be near the top of the script, before the simulation box has been defined. This @@ -139,10 +121,9 @@ without using it in a particular simulation). However, in all cases, a default version of the command is typically invoked by other accelerator settings. -The USER-CUDA and KOKKOS packages require a "-c on" or "-k on" -"command-line switch"_Section_start.html#start_7 respectively, which -invokes a "package cuda" or "package kokkos" command with default -settings. +The KOKKOS package requires a "-k on" "command-line +switch"_Section_start.html#start_7 respectively, which invokes a +"package kokkos" command with default settings. For the GPU, USER-INTEL, and USER-OMP packages, if a "-sf gpu" or "-sf intel" or "-sf omp" "command-line switch"_Section_start.html#start_7 @@ -164,62 +145,6 @@ for speeding up LAMMPS simulations. :line -The {cuda} style invokes settings associated with the use of the -USER-CUDA package. - -The {Ngpus} argument sets the number of GPUs per node. There must be -exactly one MPI task per GPU, as set by the mpirun or mpiexec command. - -Optional keyword/value pairs can also be specified. Each has a -default value as listed below. - -The {newton} keyword sets the Newton flags for pairwise and bonded -interactions to {off} or {on}, the same as the "newton"_newton.html -command allows. The default is {off} because this will almost always -give better performance for the USER-CUDA package. This means -more computation is done, but less communication. - -The {gpuID} keyword allows selection of which GPUs on each node will -be used for a simulation. GPU IDs range from 0 to N-1 where N is the -physical number of GPUs/node. An ID is specified for each of the -Ngpus being used. For example if you have three GPUs on a machine, -one of which is used for the X-Server (the GPU with the ID 1) while -the others (with IDs 0 and 2) are used for computations you would -specify: - -package cuda 2 gpuID 0 2 :pre - -The purpose of the {gpuID} keyword is to allow two (or more) -simulations to be run on one workstation. In that case one could set -the first simulation to use GPU 0 and the second to use GPU 1. This is -not necessary however, if the GPUs are in what is called {compute -exclusive} mode. Using that setting, every process will get its own -GPU automatically. This {compute exclusive} mode can be set as root -using the {nvidia-smi} tool which is part of the CUDA installation. - -Also note that if the {gpuID} keyword is not used, the USER-CUDA -package sorts existing GPUs on each node according to their number of -multiprocessors. This way, compute GPUs will be priorized over -X-Server GPUs. - -If the {timing} keyword is specified, detailed timing information for -various subroutines will be output. - -If the {test} keyword is specified, information for the specified atom -with atom-ID will be output at several points during each timestep. -This is mainly usefull for debugging purposes. Note that the -simulation slow down dramatically if this option is used. - -The {thread} keyword can be used to specify how GPU threads are -assigned work during pair style force evaluation. If the value = -{tpa}, one thread per atom is used. If the value = {bpa}, one block -per atom is used. If the value = {auto}, a short test is performed at -the beginning of each run to determing where {tpa} or {bpa} mode is -faster. The result of this test is output. Since {auto} is the -default value, it is usually not necessary to use this keyword. - -:line - The {gpu} style invokes settings associated with the use of the GPU package. @@ -594,10 +519,6 @@ within its own pages. This command cannot be used after the simulation box is defined by a "read_data"_read_data.html or "create_box"_create_box.html command. -The cuda style of this command can only be invoked if LAMMPS was built -with the USER-CUDA package. See the "Making -LAMMPS"_Section_start.html#start_3 section for more info. - The gpu style of this command can only be invoked if LAMMPS was built with the GPU package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. @@ -621,14 +542,6 @@ setting"_Section_start.html#start_7 [Default:] -For the USER-CUDA package, the default is Ngpu = 1 and the option -defaults are newton = off, gpuID = 0 to Ngpu-1, timing = not enabled, -test = not enabled, and thread = auto. These settings are made -automatically by the required "-c on" "command-line -switch"_Section_start.html#start_7. You can change them bu using the -package cuda command in your input script or via the "-pk cuda" -"command-line switch"_Section_start.html#start_7. - For the GPU package, the default is Ngpu = 1 and the option defaults are neigh = yes, newton = off, binsize = 0.0, split = 1.0, gpuID = 0 to Ngpu-1, tpa = 1, and device = not used. These settings are made diff --git a/doc/src/pair_adp.txt b/doc/src/pair_adp.txt index be55f54b54..f9cf0940d6 100644 --- a/doc/src/pair_adp.txt +++ b/doc/src/pair_adp.txt @@ -122,7 +122,7 @@ array tabulated with a scaling by r. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -130,9 +130,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_airebo.txt b/doc/src/pair_airebo.txt index 1e7b795696..be7c575218 100644 --- a/doc/src/pair_airebo.txt +++ b/doc/src/pair_airebo.txt @@ -163,7 +163,7 @@ thermo_style custom step temp epair v_REBO v_LJ v_TORSION :pre :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -171,9 +171,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_beck.txt b/doc/src/pair_beck.txt index 1b2309ef70..0c1b1f67f2 100644 --- a/doc/src/pair_beck.txt +++ b/doc/src/pair_beck.txt @@ -48,7 +48,7 @@ Rc is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -56,9 +56,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_born.txt b/doc/src/pair_born.txt index 8da606f9da..265571e15f 100644 --- a/doc/src/pair_born.txt +++ b/doc/src/pair_born.txt @@ -12,7 +12,6 @@ pair_style born/omp command :h3 pair_style born/gpu command :h3 pair_style born/coul/long command :h3 pair_style born/coul/long/cs command :h3 -pair_style born/coul/long/cuda command :h3 pair_style born/coul/long/gpu command :h3 pair_style born/coul/long/omp command :h3 pair_style born/coul/msm command :h3 @@ -123,7 +122,7 @@ same global Coulombic cutoff specified in the pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -131,9 +130,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_brownian.txt b/doc/src/pair_brownian.txt index b79a11040c..7e96336d52 100644 --- a/doc/src/pair_brownian.txt +++ b/doc/src/pair_brownian.txt @@ -71,16 +71,16 @@ must be specified. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "this section"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_buck.txt b/doc/src/pair_buck.txt index 90e5232355..8967e64c4c 100644 --- a/doc/src/pair_buck.txt +++ b/doc/src/pair_buck.txt @@ -7,20 +7,17 @@ :line pair_style buck command :h3 -pair_style buck/cuda command :h3 pair_style buck/gpu command :h3 pair_style buck/intel command :h3 pair_style buck/kk command :h3 pair_style buck/omp command :h3 pair_style buck/coul/cut command :h3 -pair_style buck/coul/cut/cuda command :h3 pair_style buck/coul/cut/gpu command :h3 pair_style buck/coul/cut/intel command :h3 pair_style buck/coul/cut/kk command :h3 pair_style buck/coul/cut/omp command :h3 pair_style buck/coul/long command :h3 pair_style buck/coul/long/cs command :h3 -pair_style buck/coul/long/cuda command :h3 pair_style buck/coul/long/gpu command :h3 pair_style buck/coul/long/intel command :h3 pair_style buck/coul/long/kk command :h3 @@ -138,7 +135,7 @@ pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -146,9 +143,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_buck_long.txt b/doc/src/pair_buck_long.txt index 3a52747416..aad5bdb0fe 100644 --- a/doc/src/pair_buck_long.txt +++ b/doc/src/pair_buck_long.txt @@ -98,7 +98,7 @@ global Coulombic cutoff is allowed. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -106,9 +106,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_charmm.txt b/doc/src/pair_charmm.txt index 3c0cc94bcc..05baa9c026 100644 --- a/doc/src/pair_charmm.txt +++ b/doc/src/pair_charmm.txt @@ -7,13 +7,10 @@ :line pair_style lj/charmm/coul/charmm command :h3 -pair_style lj/charmm/coul/charmm/cuda command :h3 pair_style lj/charmm/coul/charmm/omp command :h3 pair_style lj/charmm/coul/charmm/implicit command :h3 -pair_style lj/charmm/coul/charmm/implicit/cuda command :h3 pair_style lj/charmm/coul/charmm/implicit/omp command :h3 pair_style lj/charmm/coul/long command :h3 -pair_style lj/charmm/coul/long/cuda command :h3 pair_style lj/charmm/coul/long/gpu command :h3 pair_style lj/charmm/coul/long/intel command :h3 pair_style lj/charmm/coul/long/opt command :h3 @@ -120,7 +117,7 @@ the pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -128,9 +125,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_class2.txt b/doc/src/pair_class2.txt index 457d34f658..1c84b35960 100644 --- a/doc/src/pair_class2.txt +++ b/doc/src/pair_class2.txt @@ -7,16 +7,13 @@ :line pair_style lj/class2 command :h3 -pair_style lj/class2/cuda command :h3 pair_style lj/class2/gpu command :h3 pair_style lj/class2/kk command :h3 pair_style lj/class2/omp command :h3 pair_style lj/class2/coul/cut command :h3 -pair_style lj/class2/coul/cut/cuda command :h3 pair_style lj/class2/coul/cut/kk command :h3 pair_style lj/class2/coul/cut/omp command :h3 pair_style lj/class2/coul/long command :h3 -pair_style lj/class2/coul/long/cuda command :h3 pair_style lj/class2/coul/long/gpu command :h3 pair_style lj/class2/coul/long/kk command :h3 pair_style lj/class2/coul/long/omp command :h3 @@ -102,7 +99,7 @@ cutoff distance. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -110,9 +107,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_coeff.txt b/doc/src/pair_coeff.txt index cffdd5648a..fe9238f423 100644 --- a/doc/src/pair_coeff.txt +++ b/doc/src/pair_coeff.txt @@ -106,7 +106,7 @@ bash: Windows: -% set LAMMPS_POTENTIALS="C:\Path to LAMMPS\Potentials" :pre +% set LAMMPS_POTENTIALS="C:\\Path to LAMMPS\\Potentials" :pre :line diff --git a/doc/src/pair_colloid.txt b/doc/src/pair_colloid.txt index 39b89e710e..cb43ec5c6e 100644 --- a/doc/src/pair_colloid.txt +++ b/doc/src/pair_colloid.txt @@ -124,7 +124,7 @@ commands for efficiency: "neighbor multi"_neighbor.html and :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -132,9 +132,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_comb.txt b/doc/src/pair_comb.txt index 1e02078134..423d2830d5 100644 --- a/doc/src/pair_comb.txt +++ b/doc/src/pair_comb.txt @@ -109,7 +109,7 @@ nor file {ffield.comb3} with style {comb}. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -117,9 +117,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_coul.txt b/doc/src/pair_coul.txt index 8de32dcf0d..8261e10f8d 100644 --- a/doc/src/pair_coul.txt +++ b/doc/src/pair_coul.txt @@ -259,7 +259,7 @@ command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -267,9 +267,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_dipole.txt b/doc/src/pair_dipole.txt index 2d9babf2e1..f8f5dbf87f 100644 --- a/doc/src/pair_dipole.txt +++ b/doc/src/pair_dipole.txt @@ -172,7 +172,7 @@ type pair. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -180,9 +180,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_dpd.txt b/doc/src/pair_dpd.txt index dcfcf27d84..a9061f710a 100644 --- a/doc/src/pair_dpd.txt +++ b/doc/src/pair_dpd.txt @@ -106,7 +106,7 @@ random force. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -114,9 +114,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_dpd_fdt.txt b/doc/src/pair_dpd_fdt.txt index ac31e82e30..07d5f3d5bb 100644 --- a/doc/src/pair_dpd_fdt.txt +++ b/doc/src/pair_dpd_fdt.txt @@ -110,8 +110,9 @@ specified. [Restrictions:] -Pair styles {dpd/fdt} and {dpd/fdt/energy} are only available if -LAMMPS is built with the USER-DPD package. +These commands are part of the USER-DPD package. They are only +enabled if LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. Pair styles {dpd/fdt} and {dpd/fdt/energy} require use of the "communicate vel yes"_communicate.html option so that velocites are diff --git a/doc/src/pair_eam.txt b/doc/src/pair_eam.txt index 02a68f17f5..9373f326fb 100644 --- a/doc/src/pair_eam.txt +++ b/doc/src/pair_eam.txt @@ -7,13 +7,11 @@ :line pair_style eam command :h3 -pair_style eam/cuda command :h3 pair_style eam/gpu command :h3 pair_style eam/kk command :h3 pair_style eam/omp command :h3 pair_style eam/opt command :h3 pair_style eam/alloy command :h3 -pair_style eam/alloy/cuda command :h3 pair_style eam/alloy/gpu command :h3 pair_style eam/alloy/kk command :h3 pair_style eam/alloy/omp command :h3 @@ -21,7 +19,6 @@ pair_style eam/alloy/opt command :h3 pair_style eam/cd command :h3 pair_style eam/cd/omp command :h3 pair_style eam/fs command :h3 -pair_style eam/fs/cuda command :h3 pair_style eam/fs/gpu command :h3 pair_style eam/fs/kk command :h3 pair_style eam/fs/omp command :h3 @@ -368,7 +365,7 @@ are listed. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -376,9 +373,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_edip.txt b/doc/src/pair_edip.txt index 58b2b1b9be..33784afa33 100644 --- a/doc/src/pair_edip.txt +++ b/doc/src/pair_edip.txt @@ -101,7 +101,7 @@ the EDIP package. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -109,9 +109,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_eim.txt b/doc/src/pair_eim.txt index c5d2b7ac92..7fb757ab9a 100644 --- a/doc/src/pair_eim.txt +++ b/doc/src/pair_eim.txt @@ -133,7 +133,7 @@ needs. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -141,9 +141,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_exp6_rx.txt b/doc/src/pair_exp6_rx.txt new file mode 100644 index 0000000000..d9e91cd97b --- /dev/null +++ b/doc/src/pair_exp6_rx.txt @@ -0,0 +1,120 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +pair_style exp6/rx command :h3 + +[Syntax:] + +pair_style exp6/rx cutoff :pre + +cutoff = global cutoff for DPD interactions (distance units) :ul + +[Examples:] + +pair_style exp6/rx 10.0 +pair_coeff * * exp6.params h2o h2o 1.0 1.0 10.0 +pair_coeff * * exp6.params h2o 1fluid 1.0 1.0 10.0 +pair_coeff * * exp6.params 1fluid 1fluid 1.0 1.0 10.0 :pre + +[Description:] + +Style {exp6/rx} is used in reaction DPD simulations, where the +coarse-grained (CG) particles are composed of {m} species whose +reaction rate kinetics are determined from a set of {n} reaction rate +equations through the "fix rx"_fix_rx.html command. The species of +one CG particle can interact with a species in a neighboring CG +particle through a site-site interaction potential model. The +{exp6/rx} style computes an exponential-6 potential given by + +:c,image(Eqs/pair_exp6_rx.jpg) + +where the {epsilon} parameter determines the depth of the potential +minimum located at {Rm}, and {alpha} determines the softness of the repulsion. + +The coefficients must be defined for each species in a given particle +type via the "pair_coeff"_pair_coeff.html command as in the examples +above, where the first argument is the filename that includes the +exponential-6 parameters for each species. The file includes the +species tag followed by the {alpha}, {epsilon} and {Rm} +parameters. The format of the file is described below. + +The second and third arguments specify the site-site interaction +potential between two species contained within two different +particles. The species tags must either correspond to the species +defined in the reaction kinetics files specified with the "fix +rx"_fix_rx.html command or they must correspond to the tag "1fluid", +signifying interaction with a product species mixture determined +through a one-fluid approximation. The interaction potential is +weighted by the geometric average of the concentrations of the two +species. The coarse-grained potential is stored before and after the +reaction kinetics solver is applied, where the difference is defined +to be the internal chemical energy (uChem). + +The fourth and fifth arguments specify the {Rm} and {epsilon} scaling exponents. + +The final argument specifies the interaction cutoff. + +:line + +The format of a tabulated file is as follows (without the +parenthesized comments): + +# exponential-6 parameters for various species (one or more comment or blank lines) :pre +h2o exp6 11.00 0.02 3.50 (species, exp6, alpha, Rm, epsilon) +no2 exp6 13.60 0.01 3.70 +... +co2 exp6 13.00 0.03 3.20 :pre + +A section begins with a non-blank line whose 1st character is not a +"#"; blank lines or lines starting with "#" can be used as comments +between sections. + +Following a blank line, the next N lines list the species and their +corresponding parameters. The first argument is the species tag, the +second argument is the exp6 tag, the 3rd argument is the {alpha} +parameter (energy units), the 4th argument is the {epsilon} parameter +(energy-distance^6 units), and the 5th argument is the {Rm} parameter +(distance units). If a species tag of "1fluid" is listed as a pair +coefficient, a one-fluid approximation is specified where a +concentration-dependent combination of the parameters is computed +through the following equations: + +:c,image(Eqs/pair_exp6_rx_oneFluid.jpg) + +where + +:c,image(Eqs/pair_exp6_rx_oneFluid2.jpg) + +and xa and xb are the mole fractions of a and b, respectively, which +comprise the gas mixture. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair style does not support mixing. Thus, coefficients for all +I,J pairs must be specified explicitly. + +This style does not support the "pair_modify"_pair_modify.html shift option +for the energy of the exp() and 1/r^6 portion of the pair interaction. + +This style does not support the pair_modify tail option for adding long-range +tail corrections to energy and pressure for the A,C terms in the +pair interaction. + +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none diff --git a/doc/src/pair_gauss.txt b/doc/src/pair_gauss.txt index 5d541b4854..b5bab5374d 100644 --- a/doc/src/pair_gauss.txt +++ b/doc/src/pair_gauss.txt @@ -79,7 +79,7 @@ The global cutoff (r_c) specified in the pair_style command is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -87,9 +87,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_gayberne.txt b/doc/src/pair_gayberne.txt index 5783a2ce91..109f578549 100644 --- a/doc/src/pair_gayberne.txt +++ b/doc/src/pair_gayberne.txt @@ -130,7 +130,7 @@ pair_coeff sigma to 1.0 as well. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -138,9 +138,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_gran.txt b/doc/src/pair_gran.txt index deafa85f22..5ab7fb54fd 100644 --- a/doc/src/pair_gran.txt +++ b/doc/src/pair_gran.txt @@ -7,7 +7,6 @@ :line pair_style gran/hooke command :h3 -pair_style gran/cuda command :h3 pair_style gran/omp command :h3 pair_style gran/hooke/history command :h3 pair_style gran/hooke/history/omp command :h3 @@ -170,7 +169,7 @@ potential. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -178,9 +177,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_gromacs.txt b/doc/src/pair_gromacs.txt index 37bdf57d13..47620cd044 100644 --- a/doc/src/pair_gromacs.txt +++ b/doc/src/pair_gromacs.txt @@ -7,11 +7,9 @@ :line pair_style lj/gromacs command :h3 -pair_style lj/gromacs/cuda command :h3 pair_style lj/gromacs/gpu command :h3 pair_style lj/gromacs/omp command :h3 pair_style lj/gromacs/coul/gromacs command :h3 -pair_style lj/gromacs/coul/gromacs/cuda command :h3 pair_style lj/gromacs/coul/gromacs/omp command :h3 [Syntax:] @@ -90,7 +88,7 @@ cutoff(s) specified in the pair_style command. :line -Styles {intel}, {kk}, with a {cuda}, {gpu}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -98,9 +96,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_hbond_dreiding.txt b/doc/src/pair_hbond_dreiding.txt index f14d68d36e..ce82e1c808 100644 --- a/doc/src/pair_hbond_dreiding.txt +++ b/doc/src/pair_hbond_dreiding.txt @@ -163,7 +163,7 @@ optional parameters. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -171,9 +171,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_hybrid.txt b/doc/src/pair_hybrid.txt index ff5d390e60..ba62e59a2e 100644 --- a/doc/src/pair_hybrid.txt +++ b/doc/src/pair_hybrid.txt @@ -304,19 +304,19 @@ off C/C interaction, i.e. by setting the appropriate coefficients to :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html of the manual. -Since the {hybrid} and {hybrid/overlay} styles delegate computation -to the individual sub-styles, the suffix versions of the {hybrid} -and {hybrid/overlay} styles are used to propagate the corresponding -suffix to all sub-styles, if those versions exist. Otherwise the +Since the {hybrid} and {hybrid/overlay} styles delegate computation to +the individual sub-styles, the suffix versions of the {hybrid} and +{hybrid/overlay} styles are used to propagate the corresponding suffix +to all sub-styles, if those versions exist. Otherwise the non-accelerated version will be used. -The individual accelerated sub-styles are part of the USER-CUDA, GPU, +The individual accelerated sub-styles are part of the GPU, USER-OMP and OPT packages, respectively. They are only enabled if LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. diff --git a/doc/src/pair_lj.txt b/doc/src/pair_lj.txt index e2810063dc..3f97c0b8cc 100644 --- a/doc/src/pair_lj.txt +++ b/doc/src/pair_lj.txt @@ -7,18 +7,15 @@ :line pair_style lj/cut command :h3 -pair_style lj/cut/cuda command :h3 pair_style lj/cut/gpu command :h3 pair_style lj/cut/intel command :h3 pair_style lj/cut/kk command :h3 pair_style lj/cut/opt command :h3 pair_style lj/cut/omp command :h3 pair_style lj/cut/coul/cut command :h3 -pair_style lj/cut/coul/cut/cuda command :h3 pair_style lj/cut/coul/cut/gpu command :h3 pair_style lj/cut/coul/cut/omp command :h3 pair_style lj/cut/coul/debye command :h3 -pair_style lj/cut/coul/debye/cuda command :h3 pair_style lj/cut/coul/debye/gpu command :h3 pair_style lj/cut/coul/debye/kk command :h3 pair_style lj/cut/coul/debye/omp command :h3 @@ -28,7 +25,6 @@ pair_style lj/cut/coul/dsf/kk command :h3 pair_style lj/cut/coul/dsf/omp command :h3 pair_style lj/cut/coul/long command :h3 pair_style lj/cut/coul/long/cs command :h3 -pair_style lj/cut/coul/long/cuda command :h3 pair_style lj/cut/coul/long/gpu command :h3 pair_style lj/cut/coul/long/intel command :h3 pair_style lj/cut/coul/long/opt command :h3 @@ -242,7 +238,7 @@ pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -250,9 +246,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj96.txt b/doc/src/pair_lj96.txt index 2ecc55ee84..42a670107a 100644 --- a/doc/src/pair_lj96.txt +++ b/doc/src/pair_lj96.txt @@ -7,7 +7,6 @@ :line pair_style lj96/cut command :h3 -pair_style lj96/cut/cuda command :h3 pair_style lj96/cut/gpu command :h3 pair_style lj96/cut/omp command :h3 @@ -47,7 +46,7 @@ cutoff specified in the pair_style command is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -55,9 +54,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_cubic.txt b/doc/src/pair_lj_cubic.txt index ecf7ea583b..f420b5ca87 100644 --- a/doc/src/pair_lj_cubic.txt +++ b/doc/src/pair_lj_cubic.txt @@ -60,7 +60,7 @@ located at rmin = 2^(1/6)*sigma. In the above example, sigma = :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -68,9 +68,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_expand.txt b/doc/src/pair_lj_expand.txt index df639880d4..aa0adad943 100644 --- a/doc/src/pair_lj_expand.txt +++ b/doc/src/pair_lj_expand.txt @@ -7,7 +7,6 @@ :line pair_style lj/expand command :h3 -pair_style lj/expand/cuda command :h3 pair_style lj/expand/gpu command :h3 pair_style lj/expand/omp command :h3 @@ -51,7 +50,7 @@ optional. If not specified, the global LJ cutoff is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -59,9 +58,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_long.txt b/doc/src/pair_lj_long.txt index 438d2d1ac7..dbb49e9afb 100644 --- a/doc/src/pair_lj_long.txt +++ b/doc/src/pair_lj_long.txt @@ -152,7 +152,7 @@ specified in the pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -160,9 +160,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_sf.txt b/doc/src/pair_lj_sf.txt index 2242815840..f0e37fcbc4 100644 --- a/doc/src/pair_lj_sf.txt +++ b/doc/src/pair_lj_sf.txt @@ -44,7 +44,7 @@ LJ cutoff specified in the pair_style command is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -52,9 +52,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_smooth.txt b/doc/src/pair_lj_smooth.txt index 1281293f9f..e26e5650d2 100644 --- a/doc/src/pair_lj_smooth.txt +++ b/doc/src/pair_lj_smooth.txt @@ -7,7 +7,6 @@ :line pair_style lj/smooth command :h3 -pair_style lj/smooth/cuda command :h3 pair_style lj/smooth/omp command :h3 [Syntax:] @@ -60,7 +59,7 @@ specified, the global values for Rin and Rc are used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -68,9 +67,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_smooth_linear.txt b/doc/src/pair_lj_smooth_linear.txt index ad4ac44d03..63fb3ca163 100644 --- a/doc/src/pair_lj_smooth_linear.txt +++ b/doc/src/pair_lj_smooth_linear.txt @@ -46,7 +46,7 @@ for Rc is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -54,9 +54,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lj_soft.txt b/doc/src/pair_lj_soft.txt index 4384a5394c..dc211c6be4 100644 --- a/doc/src/pair_lj_soft.txt +++ b/doc/src/pair_lj_soft.txt @@ -203,7 +203,7 @@ directory tree, under examples/USER/fep. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -211,9 +211,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_lubricate.txt b/doc/src/pair_lubricate.txt index 909f094952..5dbd7f4b80 100644 --- a/doc/src/pair_lubricate.txt +++ b/doc/src/pair_lubricate.txt @@ -140,16 +140,16 @@ must be specified. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "this section"_Section_accelerate.html of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_meam_spline.txt b/doc/src/pair_meam_spline.txt index b85b7c7c79..c7aa5fbbc3 100644 --- a/doc/src/pair_meam_spline.txt +++ b/doc/src/pair_meam_spline.txt @@ -79,7 +79,7 @@ MEAM potentials. It may be extended for alloy systems in the future. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -87,9 +87,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_morse.txt b/doc/src/pair_morse.txt index c57d50a0fc..8b4edfe673 100644 --- a/doc/src/pair_morse.txt +++ b/doc/src/pair_morse.txt @@ -7,7 +7,6 @@ :line pair_style morse command :h3 -pair_style morse/cuda command :h3 pair_style morse/gpu command :h3 pair_style morse/omp command :h3 pair_style morse/opt command :h3 @@ -98,7 +97,7 @@ cutoff is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -106,9 +105,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script @@ -152,8 +151,8 @@ The {morse/smooth/linear} pair style is only enabled if LAMMPS was built with the USER-MISC package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. -The {morse/soft} pair style is only enabled if LAMMPS was -built with the USER-FEP package. See the "Making +The {morse/soft} pair style is only enabled if LAMMPS was built with +the USER-FEP package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. [Related commands:] diff --git a/doc/src/pair_multi_lucy.txt b/doc/src/pair_multi_lucy.txt index 48dad8be29..2d0852e79c 100644 --- a/doc/src/pair_multi_lucy.txt +++ b/doc/src/pair_multi_lucy.txt @@ -22,14 +22,15 @@ pair_coeff * * multibody.table ENTRY1 7.0 :pre [Description:] -Style {multi/lucy} computes a density-dependent force following from the many-body -form described in "(Moore)"_#Moore and "(Warren)"_#Warren as +Style {multi/lucy} computes a density-dependent force following from +the many-body form described in "(Moore)"_#Moore and +"(Warren)"_#Warren as :c,image(Eqs/pair_multi_lucy.jpg) -which consists of a density-dependent function, A(rho), and a radial-dependent weight -function, omegaDD(rij). The radial-dependent weight function, omegaDD(rij), is taken -as the Lucy function: +which consists of a density-dependent function, A(rho), and a +radial-dependent weight function, omegaDD(rij). The radial-dependent +weight function, omegaDD(rij), is taken as the Lucy function: :c,image(Eqs/pair_multi_lucy2.jpg) @@ -37,24 +38,29 @@ The density-dependent energy for a given particle is given by: :c,image(Eqs/pair_multi_lucy_energy.jpg) -See the supporting information of "(Brennan)"_#Brennan or the publication by "(Moore)"_#Moore -for more details on the functional form. +See the supporting information of "(Brennan)"_#Brennan or the +publication by "(Moore)"_#Moore for more details on the functional +form. -An interpolation table is used to evaluate the density-dependent energy (Integral(A(rho)drho) and force (A(rho)). -Note that the pre-factor to the energy is computed after the interpolation, thus the Integral(A(rho)drho will -have units of energy / length^4. +An interpolation table is used to evaluate the density-dependent +energy (Integral(A(rho)drho) and force (A(rho)). Note that the +pre-factor to the energy is computed after the interpolation, thus the +Integral(A(rho)drho will have units of energy / length^4. -The interpolation table is created as a pre-computation by fitting cubic splines to -the file values and interpolating the density-dependent energy and force at each of {N} densities. -During a simulation, the tables are used to interpolate the density-dependent energy and force as -needed for each pair of particles separated by a distance {R}. The interpolation is done in -one of 2 styles: {lookup} and {linear}. +The interpolation table is created as a pre-computation by fitting +cubic splines to the file values and interpolating the +density-dependent energy and force at each of {N} densities. During a +simulation, the tables are used to interpolate the density-dependent +energy and force as needed for each pair of particles separated by a +distance {R}. The interpolation is done in one of 2 styles: {lookup} +and {linear}. -For the {lookup} style, the density is used to find the nearest table entry, which is the -density-dependent energy and force. +For the {lookup} style, the density is used to find the nearest table +entry, which is the density-dependent energy and force. -For the {linear} style, the density is used to find the 2 surrounding table values from -which the density-dependent energy and force are computed by linear interpolation. +For the {linear} style, the density is used to find the 2 surrounding +table values from which the density-dependent energy and force are +computed by linear interpolation. The following coefficients must be defined for each pair of atoms types via the "pair_coeff"_pair_coeff.html command as in the examples @@ -64,13 +70,14 @@ filename keyword cutoff (distance units) :ul -The filename specifies a file containing the tabulated density-dependent -energy and force. The keyword specifies a section of the file. -The cutoff is an optional coefficient. If not specified, the outer cutoff in the -table itself (see below) will be used to build an interpolation table -that extend to the largest tabulated distance. If specified, only -file values up to the cutoff are used to create the interpolation -table. The format of this file is described below. +The filename specifies a file containing the tabulated +density-dependent energy and force. The keyword specifies a section +of the file. The cutoff is an optional coefficient. If not +specified, the outer cutoff in the table itself (see below) will be +used to build an interpolation table that extend to the largest +tabulated distance. If specified, only file values up to the cutoff +are used to create the interpolation table. The format of this file +is described below. :line @@ -98,19 +105,19 @@ numeric values. The parameter "N" is required and its value is the number of table entries that follow. Note that this may be different than the {N} -specified in the "pair_style multi/lucy"_pair_multi_lucy.html command. Let -Ntable = {N} in the pair_style command, and Nfile = "N" in the +specified in the "pair_style multi/lucy"_pair_multi_lucy.html command. +Let Ntable = {N} in the pair_style command, and Nfile = "N" in the tabulated file. What LAMMPS does is a preliminary interpolation by creating splines using the Nfile tabulated values as nodal points. It -uses these to interpolate the density-dependent energy and force at Ntable different -points. The resulting tables of length Ntable are then used as -described above, when computing the density-dependent energy and force. -This means that if you want the interpolation tables of -length Ntable to match exactly what is in the tabulated file (with -effectively no preliminary interpolation), you should set Ntable = -Nfile, and use the "RSQ" parameter. This is because the -internal table abscissa is always RSQ (separation distance squared), -for efficient lookup. +uses these to interpolate the density-dependent energy and force at +Ntable different points. The resulting tables of length Ntable are +then used as described above, when computing the density-dependent +energy and force. This means that if you want the interpolation +tables of length Ntable to match exactly what is in the tabulated file +(with effectively no preliminary interpolation), you should set Ntable += Nfile, and use the "RSQ" parameter. This is because the internal +table abscissa is always RSQ (separation distance squared), for +efficient lookup. All other parameters are optional. If "R" or "RSQ" does not appear, then the distances in each line of the table are used @@ -167,7 +174,11 @@ This pair style can only be used via the {pair} keyword of the :line -[Restrictions:] none +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. [Related commands:] diff --git a/doc/src/pair_multi_lucy_rx.txt b/doc/src/pair_multi_lucy_rx.txt new file mode 100644 index 0000000000..5df2995a75 --- /dev/null +++ b/doc/src/pair_multi_lucy_rx.txt @@ -0,0 +1,220 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +pair_style multi/lucy/rx command :h3 + +[Syntax:] + +pair_style multi/lucy/rx style N keyword ... :pre + +style = {lookup} or {linear} = method of interpolation +N = use N values in {lookup}, {linear} tables :ul + +[Examples:] + +pair_style multi/lucy/rx linear 1000 +pair_coeff * * multibody.table ENTRY1 h2o h2o 7.0 +pair_coeff * * multibody.table ENTRY1 h2o 1fluid 7.0 :pre + +[Description:] + +Style {multi/lucy/rx} is used in reaction DPD simulations, where the +coarse-grained (CG) particles are composed of {m} species whose +reaction rate kinetics are determined from a set of {n} reaction rate +equations through the "fix rx"_fix_rx.html command. The species of +one CG particle can interact with a species in a neighboring CG +particle through a site-site interaction potential model. Style +{multi/lucy/rx} computes the site-site density-dependent force +following from the many-body form described in "(Moore)"_#Moore and +"(Warren)"_#Warren as + +:c,image(Eqs/pair_multi_lucy.jpg) + +which consists of a density-dependent function, A(rho), and a +radial-dependent weight function, omegaDD(rij). The radial-dependent +weight function, omegaDD(rij), is taken as the Lucy function: + +:c,image(Eqs/pair_multi_lucy2.jpg) + +The density-dependent energy for a given particle is given by: + +:c,image(Eqs/pair_multi_lucy_energy.jpg) + +See the supporting information of "(Brennan)"_#Brennan or the +publication by "(Moore)"_#Moore for more details on the functional +form. + +An interpolation table is used to evaluate the density-dependent +energy (Integral(A(rho)drho) and force (A(rho)). Note that the +pre-factor to the energy is computed after the interpolation, thus the +Integral(A(rho)drho will have units of energy / length^4. + +The interpolation table is created as a pre-computation by fitting +cubic splines to the file values and interpolating the +density-dependent energy and force at each of {N} densities. During a +simulation, the tables are used to interpolate the density-dependent +energy and force as needed for each pair of particles separated by a +distance {R}. The interpolation is done in one of 2 styles: {lookup} +and {linear}. + +For the {lookup} style, the density is used to find the nearest table +entry, which is the density-dependent energy and force. + +For the {linear} style, the density is used to find the 2 surrounding +table values from which the density-dependent energy and force are +computed by linear interpolation. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above. + +filename +keyword +species1 +species2 +cutoff (distance units) :ul + +The filename specifies a file containing the tabulated +density-dependent energy and force. The keyword specifies a section +of the file. The cutoff is an optional coefficient. If not +specified, the outer cutoff in the table itself (see below) will be +used to build an interpolation table that extend to the largest +tabulated distance. If specified, only file values up to the cutoff +are used to create the interpolation table. The format of this file +is described below. + +The species tags define the site-site interaction potential between +two species contained within two different particles. The species +tags must either correspond to the species defined in the reaction +kinetics files specified with the "fix rx"_fix_rx.html command or they +must correspond to the tag "1fluid", signifying interaction with a +product species mixture determined through a one-fluid approximation. +The interaction potential is weighted by the geometric average of the +concentrations of the two species. The coarse-grained potential is +stored before and after the reaction kinetics solver is applied, where +the difference is defined to be the internal chemical energy (uChem). + +:line + +The format of a tabulated file is a series of one or more sections, +defined as follows (without the parenthesized comments): + +# Density-dependent function (one or more comment or blank lines) :pre + +DD-FUNCTION (keyword is first text on line) +N 500 R 1.0 10.0 (N, R, RSQ parameters) + (blank) +1 1.0 25.5 102.34 (index, density, energy/r^4, force) +2 1.02 23.4 98.5 +... +500 10.0 0.001 0.003 :pre + +A section begins with a non-blank line whose 1st character is not a +"#"; blank lines or lines starting with "#" can be used as comments +between sections. The first line begins with a keyword which +identifies the section. The line can contain additional text, but the +initial text must match the argument specified in the pair_coeff +command. The next line lists (in any order) one or more parameters +for the table. Each parameter is a keyword followed by one or more +numeric values. + +The parameter "N" is required and its value is the number of table +entries that follow. Note that this may be different than the {N} +specified in the "pair_style multi/lucy/rx"_pair_multi_lucy_rx.html +command. Let Ntable = {N} in the pair_style command, and Nfile = "N" +in the tabulated file. What LAMMPS does is a preliminary +interpolation by creating splines using the Nfile tabulated values as +nodal points. It uses these to interpolate the density-dependent +energy and force at Ntable different points. The resulting tables of +length Ntable are then used as described above, when computing the +density-dependent energy and force. This means that if you want the +interpolation tables of length Ntable to match exactly what is in the +tabulated file (with effectively no preliminary interpolation), you +should set Ntable = Nfile, and use the "RSQ" parameter. This is +because the internal table abscissa is always RSQ (separation distance +squared), for efficient lookup. + +All other parameters are optional. If "R" or "RSQ" does not appear, +then the distances in each line of the table are used as-is to perform +spline interpolation. In this case, the table values can be spaced in +{density} uniformly or however you wish to position table values in +regions of large gradients. + +If used, the parameters "R" or "RSQ" are followed by 2 values {rlo} +and {rhi}. If specified, the density associated with each +density-dependent energy and force value is computed from these 2 +values (at high accuracy), rather than using the (low-accuracy) value +listed in each line of the table. The density values in the table +file are ignored in this case. For "R", distances uniformly spaced +between {rlo} and {rhi} are computed; for "RSQ", squared distances +uniformly spaced between {rlo*rlo} and {rhi*rhi} are computed. + +NOTE: If you use "R" or "RSQ", the tabulated distance values in the +file are effectively ignored, and replaced by new values as described +in the previous paragraph. If the density value in the table is not +very close to the new value (i.e. round-off difference), then you will +be assigning density-dependent energy and force values to a different +density, which is probably not what you want. LAMMPS will warn if +this is occurring. + +Following a blank line, the next N lines list the tabulated values. +On each line, the 1st value is the index from 1 to N, the 2nd value is +r (in density units), the 3rd value is the density-dependent function +value (in energy units / length^4), and the 4th is the force (in force +units). The density values must increase from one line to the next. + +Note that one file can contain many sections, each with a tabulated +potential. LAMMPS reads the file section by section until it finds +one that matches the specified keyword. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair style does not support mixing. Thus, coefficients for all +I,J pairs must be specified explicitly. + +The "pair_modify"_pair_modify.html shift, table, and tail options are +not relevant for this pair style. + +This pair style writes the settings for the "pair_style multi/lucy/rx" command +to "binary restart files"_restart.html, so a pair_style command does +not need to specified in an input script that reads a restart file. +However, the coefficient information is not stored in the restart +file, since it is tabulated in the potential files. Thus, pair_coeff +commands do need to be specified in the restart input script. + +This pair style can only be used via the {pair} keyword of the +"run_style respa"_run_style.html command. It does not support the +{inner}, {middle}, {outer} keywords. + +:line + +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + +:line + +:link(Warren) +[(Warren)] Warren, Phys Rev E, 68, 066702 (2003). + +:link(Brennan) +[(Brennan)] Brennan, J Chem Phys Lett, 5, 2144-2149 (2014). + +:link(Moore) +[(Moore)] Moore, J Chem Phys, 144, 104501 (2016). + diff --git a/doc/src/pair_nb3b_harmonic.txt b/doc/src/pair_nb3b_harmonic.txt index 878457237e..51686e9064 100644 --- a/doc/src/pair_nb3b_harmonic.txt +++ b/doc/src/pair_nb3b_harmonic.txt @@ -87,7 +87,7 @@ simulation; LAMMPS ignores those entries. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -95,9 +95,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_nm.txt b/doc/src/pair_nm.txt index c4caad57e6..472247e7b2 100644 --- a/doc/src/pair_nm.txt +++ b/doc/src/pair_nm.txt @@ -130,7 +130,7 @@ the "run_style respa"_run_style.html command. They do not support the :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -138,9 +138,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_peri.txt b/doc/src/pair_peri.txt index fa79bbbcbd..3701dc9a30 100644 --- a/doc/src/pair_peri.txt +++ b/doc/src/pair_peri.txt @@ -136,7 +136,7 @@ details please see the description in "(Mtchell2011a)". :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -144,9 +144,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_resquared.txt b/doc/src/pair_resquared.txt index 26b2c81c4a..f945aef9c2 100644 --- a/doc/src/pair_resquared.txt +++ b/doc/src/pair_resquared.txt @@ -142,7 +142,7 @@ specified in the pair_style command is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -150,9 +150,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_sdk.txt b/doc/src/pair_sdk.txt index 75b6bf0efd..56cd78f797 100644 --- a/doc/src/pair_sdk.txt +++ b/doc/src/pair_sdk.txt @@ -82,7 +82,7 @@ pair_style command. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp} or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp} or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -90,9 +90,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP, and OPT packages respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP, and OPT packages respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_soft.txt b/doc/src/pair_soft.txt index 9c5fc11dbf..c8e8179ac8 100644 --- a/doc/src/pair_soft.txt +++ b/doc/src/pair_soft.txt @@ -79,7 +79,7 @@ variables. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -87,9 +87,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_sw.txt b/doc/src/pair_sw.txt index 27a3c5046b..4c62d76a4a 100644 --- a/doc/src/pair_sw.txt +++ b/doc/src/pair_sw.txt @@ -7,7 +7,6 @@ :line pair_style sw command :h3 -pair_style sw/cuda command :h3 pair_style sw/gpu command :h3 pair_style sw/intel command :h3 pair_style sw/kk command :h3 @@ -142,7 +141,7 @@ taken from the ij and ik pairs (sigma, a, gamma) :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -150,9 +149,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_table.txt b/doc/src/pair_table.txt index bffcef4f8a..8a667e40f4 100644 --- a/doc/src/pair_table.txt +++ b/doc/src/pair_table.txt @@ -213,7 +213,7 @@ one that matches the specified keyword. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -221,9 +221,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_table_rx.txt b/doc/src/pair_table_rx.txt new file mode 100644 index 0000000000..6c765d2093 --- /dev/null +++ b/doc/src/pair_table_rx.txt @@ -0,0 +1,237 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +pair_style table/rx command :h3 + +[Syntax:] + +pair_style table style N :pre + +style = {lookup} or {linear} or {spline} or {bitmap} = method of interpolation +N = use N values in {lookup}, {linear}, {spline} tables +N = use 2^N values in {bitmap} tables + +[Examples:] + +pair_style table/rx linear 1000 +pair_style table/rx bitmap 12 +pair_coeff * * rxn.table ENTRY1 h2o h2o 10.0 +pair_coeff * * rxn.table ENTRY1 1fluid 1fluid 10.0 +pair_coeff * 3 rxn.table ENTRY1 h2o no2 10.0 :pre + +[Description:] + +Style {table/rx} is used in reaction DPD simulations,where the +coarse-grained (CG) particles are composed of {m} species whose +reaction rate kinetics are determined from a set of {n} reaction rate +equations through the "fix rx"_fix_rx.html command. The species of +one CG particle can interact with a species in a neighboring CG +particle through a site-site interaction potential model. Style +{table/rx} creates interpolation tables of length {N} from pair +potential and force values listed in a file(s) as a function of +distance. The files are read by the "pair_coeff"_pair_coeff.html +command. + +The interpolation tables are created by fitting cubic splines to the +file values and interpolating energy and force values at each of {N} +distances. During a simulation, these tables are used to interpolate +energy and force values as needed. The interpolation is done in one +of 4 styles: {lookup}, {linear}, {spline}, or {bitmap}. + +For the {lookup} style, the distance between 2 atoms is used to find +the nearest table entry, which is the energy or force. + +For the {linear} style, the pair distance is used to find 2 +surrounding table values from which an energy or force is computed by +linear interpolation. + +For the {spline} style, a cubic spline coefficients are computed and +stored at each of the {N} values in the table. The pair distance is +used to find the appropriate set of coefficients which are used to +evaluate a cubic polynomial which computes the energy or force. + +For the {bitmap} style, the N means to create interpolation tables +that are 2^N in length. The pair distance is used to index into the +table via a fast bit-mapping technique "(Wolff)"_#Wolff and a linear +interpolation is performed between adjacent table values. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above. + +filename +keyword +species1 +species2 +cutoff (distance units) :ul + +The filename specifies a file containing tabulated energy and force +values. The keyword specifies a section of the file. The cutoff is +an optional coefficient. If not specified, the outer cutoff in the +table itself (see below) will be used to build an interpolation table +that extend to the largest tabulated distance. If specified, only +file values up to the cutoff are used to create the interpolation +table. The format of this file is described below. + +The species tags define the site-site interaction potential between +two species contained within two different particles. The species +tags must either correspond to the species defined in the reaction +kinetics files specified with the "fix rx"_fix_rx.html command or they +must correspond to the tag "1fluid", signifying interaction with a +product species mixture determined through a one-fluid approximation. +The interaction potential is weighted by the geometric average of the +concentrations of the two species. The coarse-grained potential is +stored before and after the reaction kinetics solver is applied, where +the difference is defined to be the internal chemical energy (uChem). + +:line + +Here are some guidelines for using the pair_style table/rx command to +best effect: + +Vary the number of table points; you may need to use more than you think +to get good resolution. :ulb,l + +Always use the "pair_write"_pair_write.html command to produce a plot +of what the final interpolated potential looks like. This can show up +interpolation "features" you may not like. :l + +Start with the linear style; it's the style least likely to have problems. :l + +Use {N} in the pair_style command equal to the "N" in the tabulation +file, and use the "RSQ" or "BITMAP" parameter, so additional interpolation +is not needed. See discussion below. :l + +Make sure that your tabulated forces and tabulated energies are consistent +(dE/dr = -F) along the entire range of r values. :l + +Use as large an inner cutoff as possible. This avoids fitting splines +to very steep parts of the potential. :l,ule + +:line + +The format of a tabulated file is a series of one or more sections, +defined as follows (without the parenthesized comments): + +# Morse potential for Fe (one or more comment or blank lines) :pre + +MORSE_FE (keyword is first text on line) +N 500 R 1.0 10.0 (N, R, RSQ, BITMAP, FPRIME parameters) + (blank) +1 1.0 25.5 102.34 (index, r, energy, force) +2 1.02 23.4 98.5 +... +500 10.0 0.001 0.003 :pre + +A section begins with a non-blank line whose 1st character is not a +"#"; blank lines or lines starting with "#" can be used as comments +between sections. The first line begins with a keyword which +identifies the section. The line can contain additional text, but the +initial text must match the argument specified in the pair_coeff +command. The next line lists (in any order) one or more parameters +for the table. Each parameter is a keyword followed by one or more +numeric values. + +The parameter "N" is required and its value is the number of table +entries that follow. Note that this may be different than the {N} +specified in the "pair_style table/rx"_pair_style.html command. Let +Ntable = {N} in the pair_style command, and Nfile = "N" in the +tabulated file. What LAMMPS does is a preliminary interpolation by +creating splines using the Nfile tabulated values as nodal points. It +uses these to interpolate as needed to generate energy and force +values at Ntable different points. The resulting tables of length +Ntable are then used as described above, when computing energy and +force for individual pair distances. This means that if you want the +interpolation tables of length Ntable to match exactly what is in the +tabulated file (with effectively no preliminary interpolation), you +should set Ntable = Nfile, and use the "RSQ" or "BITMAP" parameter. +The internal table abscissa is RSQ (separation distance squared). + +All other parameters are optional. If "R" or "RSQ" or "BITMAP" does +not appear, then the distances in each line of the table are used +as-is to perform spline interpolation. In this case, the table values +can be spaced in {r} uniformly or however you wish to position table +values in regions of large gradients. + +If used, the parameters "R" or "RSQ" are followed by 2 values {rlo} +and {rhi}. If specified, the distance associated with each energy and +force value is computed from these 2 values (at high accuracy), rather +than using the (low-accuracy) value listed in each line of the table. +The distance values in the table file are ignored in this case. +For "R", distances uniformly spaced between {rlo} and {rhi} are +computed; for "RSQ", squared distances uniformly spaced between +{rlo*rlo} and {rhi*rhi} are computed. + +If used, the parameter "BITMAP" is also followed by 2 values {rlo} and +{rhi}. These values, along with the "N" value determine the ordering +of the N lines that follow and what distance is associated with each. +This ordering is complex, so it is not documented here, since this +file is typically produced by the "pair_write"_pair_write.html command +with its {bitmap} option. When the table is in BITMAP format, the "N" +parameter in the file must be equal to 2^M where M is the value +specified in the pair_style command. Also, a cutoff parameter cannot +be used as an optional 3rd argument in the pair_coeff command; the +entire table extent as specified in the file must be used. + +If used, the parameter "FPRIME" is followed by 2 values {fplo} and +{fphi} which are the derivative of the force at the innermost and +outermost distances listed in the table. These values are needed by +the spline construction routines. If not specified by the "FPRIME" +parameter, they are estimated (less accurately) by the first 2 and +last 2 force values in the table. This parameter is not used by +BITMAP tables. + +Following a blank line, the next N lines list the tabulated values. +On each line, the 1st value is the index from 1 to N, the 2nd value is +r (in distance units), the 3rd value is the energy (in energy units), +and the 4th is the force (in force units). The r values must increase +from one line to the next (unless the BITMAP parameter is specified). + +Note that one file can contain many sections, each with a tabulated +potential. LAMMPS reads the file section by section until it finds +one that matches the specified keyword. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair style does not support mixing. Thus, coefficients for all +I,J pairs must be specified explicitly. + +The "pair_modify"_pair_modify.html shift, table, and tail options are +not relevant for this pair style. + +This pair style writes the settings for the "pair_style table/rx" command +to "binary restart files"_restart.html, so a pair_style command does +not need to specified in an input script that reads a restart file. +However, the coefficient information is not stored in the restart +file, since it is tabulated in the potential files. Thus, pair_coeff +commands do need to be specified in the restart input script. + +This pair style can only be used via the {pair} keyword of the +"run_style respa"_run_style.html command. It does not support the +{inner}, {middle}, {outer} keywords. + +:line + +[Restrictions:] + +This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + +:line + +:link(Wolff) +[(Wolff)] Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999). diff --git a/doc/src/pair_tersoff.txt b/doc/src/pair_tersoff.txt index f0ba9f4485..466772373f 100644 --- a/doc/src/pair_tersoff.txt +++ b/doc/src/pair_tersoff.txt @@ -8,7 +8,6 @@ pair_style tersoff command :h3 pair_style tersoff/table command :h3 -pair_style tersoff/cuda :h3 pair_style tersoff/gpu :h3 pair_style tersoff/intel :h3 pair_style tersoff/kk :h3 @@ -19,7 +18,7 @@ pair_style tersoff/table/omp command :h3 pair_style style :pre -style = {tersoff} or {tersoff/table} or {tersoff/cuda} or {tersoff/gpu} or {tersoff/omp} or {tersoff/table/omp} +style = {tersoff} or {tersoff/table} or {tersoff/gpu} or {tersoff/omp} or {tersoff/table/omp} [Examples:] @@ -177,7 +176,7 @@ defined in various papers. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -185,9 +184,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_tersoff_mod.txt b/doc/src/pair_tersoff_mod.txt index 2b17800140..ad4f10686a 100644 --- a/doc/src/pair_tersoff_mod.txt +++ b/doc/src/pair_tersoff_mod.txt @@ -114,7 +114,7 @@ for SiSiSi means Si bonded to a Si with another Si atom influencing the bond. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -122,9 +122,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_tersoff_zbl.txt b/doc/src/pair_tersoff_zbl.txt index 7b8097dc0c..0230be3ab6 100644 --- a/doc/src/pair_tersoff_zbl.txt +++ b/doc/src/pair_tersoff_zbl.txt @@ -186,7 +186,7 @@ providing the base ZBL implementation. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -194,9 +194,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_thole.txt b/doc/src/pair_thole.txt index a8416bbdff..af1dffc1a6 100644 --- a/doc/src/pair_thole.txt +++ b/doc/src/pair_thole.txt @@ -127,7 +127,7 @@ the {pair_style} command line. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -135,9 +135,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_vashishta.txt b/doc/src/pair_vashishta.txt index 6effdf7944..24951b1df1 100644 --- a/doc/src/pair_vashishta.txt +++ b/doc/src/pair_vashishta.txt @@ -151,7 +151,7 @@ two-body parameters from the CCC and CSiSi entries. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -159,9 +159,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_yukawa.txt b/doc/src/pair_yukawa.txt index 7fd279f570..621952d70b 100644 --- a/doc/src/pair_yukawa.txt +++ b/doc/src/pair_yukawa.txt @@ -45,7 +45,7 @@ cutoff is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -53,9 +53,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_yukawa_colloid.txt b/doc/src/pair_yukawa_colloid.txt index 2a92f33cf3..03a0dbf1f4 100644 --- a/doc/src/pair_yukawa_colloid.txt +++ b/doc/src/pair_yukawa_colloid.txt @@ -77,7 +77,7 @@ yukawa/colloid cutoff is used. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -85,9 +85,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/pair_zbl.txt b/doc/src/pair_zbl.txt index 555e8cbf5b..741aa4514f 100644 --- a/doc/src/pair_zbl.txt +++ b/doc/src/pair_zbl.txt @@ -67,7 +67,7 @@ copper. :line -Styles with a {cuda}, {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in "Section_accelerate"_Section_accelerate.html @@ -75,9 +75,9 @@ of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. -These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the "Making +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. You can specify the accelerated styles explicitly in your input script diff --git a/doc/src/prd.txt b/doc/src/prd.txt index b4f5184e1d..484e36004c 100644 --- a/doc/src/prd.txt +++ b/doc/src/prd.txt @@ -295,9 +295,9 @@ for dephasing. This command cannot be used when any fixes are defined that keep track of elapsed time to perform time-dependent operations. Examples -include the "ave" fixes such as "fix -ave/spatial"_fix_ave_spatial.html. Also "fix -dt/reset"_fix_dt_reset.html and "fix deposit"_fix_deposit.html. +include the "ave" fixes such as "fix ave/chunk"_fix_ave_chunk.html. +Also "fix dt/reset"_fix_dt_reset.html and "fix +deposit"_fix_deposit.html. [Related commands:] diff --git a/doc/src/set.txt b/doc/src/set.txt index 184e147d11..83bab5c06c 100644 --- a/doc/src/set.txt +++ b/doc/src/set.txt @@ -93,6 +93,8 @@ keyword = {type} or {type/fraction} or {mol} or {x} or {y} or {z} or \ {smd/mass/density} = set particle mass based on volume by providing a mass density value can be an atom-style variable (see below) {dpd/theta} value = internal temperature of DPD particles (temperature units) + value can be an atom-style variable (see below) + value can be NULL which sets internal temp of each particle to KE temp {i_name} value = value for custom integer vector with name {d_name} value = value for custom floating-point vector with name :pre :ule @@ -390,8 +392,16 @@ other. Note that the SPH smoothing kernel diameter used for computing long range, nonlocal interactions, is set using the {diameter} keyword. -Keyword {dpd/theta} sets the internal temperature of a DPD particle -as defined by the USER-DPD package. +Keyword {dpd/theta} sets the internal temperature of a DPD particle as +defined by the USER-DPD package. If the specified value is a number +it must be >= 0.0. If the specified value is NULL, then the kinetic +temperature Tkin of each particle is computed as 3/2 k Tkin = KE = 1/2 +m v^2 = 1/2 m (vx*vx+vy*vy+vz*vz). Each particle's internal +temperature is set to Tkin. If the specified value is an atom-style +variable, then the variable is evaluated for each particle. If a +value >= 0.0, the internal temperature is set to that value. If it is +< 0.0, the computation of Tkin is performed and the internal +temperature is set to that value. Keywords {i_name} and {d_name} refer to custom integer and floating-point properties that have been added to each atom via the diff --git a/doc/src/suffix.txt b/doc/src/suffix.txt index 35197c0983..51aead3f37 100644 --- a/doc/src/suffix.txt +++ b/doc/src/suffix.txt @@ -12,7 +12,7 @@ suffix command :h3 suffix style args :pre -style = {off} or {on} or {cuda} or {gpu} or {intel} or {kk} or {omp} or {opt} or {hybrid} +style = {off} or {on} or {gpu} or {intel} or {kk} or {omp} or {opt} or {hybrid} args = for hybrid style, default suffix to be used and alternative suffix :ul [Examples:] @@ -31,22 +31,18 @@ exist. In that respect it operates the same as the "-suffix command-line switch"_Section_start.html#start_7. It also has options to turn off or back on any suffix setting made via the command line. -The specified style can be {cuda}, {gpu}, {intel}, {kk}, {omp}, {opt} -or {hybrid}. These refer to optional packages that LAMMPS can be built +The specified style can be {gpu}, {intel}, {kk}, {omp}, {opt} or +{hybrid}. These refer to optional packages that LAMMPS can be built with, as described in "this section of the -manual"_Section_start.html#start_3. The "cuda" style corresponds to -the USER-CUDA package, the "gpu" style to the GPU package, the "intel" -style to the USER-INTEL package, the "kk" style to the KOKKOS package, -the "omp" style to the USER-OMP package, and the "opt" style to the -OPT package. +manual"_Section_start.html#start_3. The "gpu" style corresponds to +the GPU package, the "intel" style to the USER-INTEL package, the "kk" +style to the KOKKOS package, the "omp" style to the USER-OMP package, +and the "opt" style to the OPT package. These are the variants these packages provide: -USER-CUDA = a collection of atom, pair, fix, compute, and intergrate -styles, optimized to run on one or more NVIDIA GPUs :ulb,l - GPU = a handful of pair styles and the PPPM kspace_style, optimized to -run on one or more GPUs or multicore CPU/GPU nodes :l +run on one or more GPUs or multicore CPU/GPU nodes :ulb,l USER-INTEL = a collection of pair styles and neighbor routines optimized to run in single, mixed, or double precision on CPUs and @@ -67,11 +63,11 @@ HYBRID = a combination of two packages can be specified (see below) :ule,l As an example, all of the packages provide a "pair_style lj/cut"_pair_lj.html variant, with style names lj/cut/opt, lj/cut/omp, -lj/cut/gpu, lj/cut/intel, lj/cut/cuda, or lj/cut/kk. A variant styles +lj/cut/gpu, lj/cut/intel, or lj/cut/kk. A variant styles can be specified explicitly in your input script, e.g. pair_style lj/cut/gpu. If the suffix command is used with the appropriate style, you do not need to modify your input script. The specified suffix -(opt,omp,gpu,intel,cuda,kk) is automatically appended whenever your +(opt,omp,gpu,intel,kk) is automatically appended whenever your input script command creates a new "atom"_atom_style.html, "pair"_pair_style.html, "bond"_bond_style.html, "angle"_angle_style.html, "dihedral"_dihedral_style.html, diff --git a/doc/src/tad.txt b/doc/src/tad.txt index 6a291d181d..8e93b93c3b 100644 --- a/doc/src/tad.txt +++ b/doc/src/tad.txt @@ -284,9 +284,9 @@ restart, but "fix langevin"_fix_langevin.html will not. This command cannot be used when any fixes are defined that keep track of elapsed time to perform time-dependent operations. Examples -include the "ave" fixes such as "fix -ave/spatial"_fix_ave_spatial.html. Also "fix -dt/reset"_fix_dt_reset.html and "fix deposit"_fix_deposit.html. +include the "ave" fixes such as "fix ave/chunk"_fix_ave_chunk.html. +Also "fix dt/reset"_fix_dt_reset.html and "fix +deposit"_fix_deposit.html. [Related commands:] diff --git a/doc/src/tutorial_drude.txt b/doc/src/tutorial_drude.txt index 43f3de3de9..3ab8afcae3 100644 --- a/doc/src/tutorial_drude.txt +++ b/doc/src/tutorial_drude.txt @@ -5,6 +5,14 @@ MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } }); +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + Tutorial for Thermalized Drude oscillators in LAMMPS :h3 This tutorial explains how to use Drude oscillators in LAMMPS to @@ -44,24 +52,23 @@ stiffness of the harmonic bond should be large, so that the Drude particle remains close ot the core. The values of Drude mass, Drude charge, and force constant can be chosen following different strategies, as in the following examples of polarizable force -fields. +fields: -"Lamoureux and Roux"_#Lamoureux suggest adopting a global -half-stiffness, \(K_D\) = 500 kcal/(mol Å2) — -which corresponds to a force constant \(k_D\) = 4184 kJ/(mol -Å2) — for all types of core-Drude bond, a -global mass \(m_D\) = 0.4 g/mol (or u) for all types of Drude -particle, and to calculate the Drude charges for individual atom types -from the atom polarizabilities using equation (1). This choice is -followed in the polarizable CHARMM force field. :ulb,l +"Lamoureux and Roux"_#Lamoureux suggest adopting a global half-stiffness, \ +\(K_D\) = 500 kcal/(mol Ang \(\{\}^2\)) - which corresponds to a force \ +constant \(k_D\) = 4184 kJ/(mol Ang \(\{\}^2\)) - for all types of \ +core-Drude bond, a global mass \(m_D\) = 0.4 g/mol (or u) for all types \ +of Drude particles, and to calculate the Drude charges for individual \ +atom types from the atom polarizabilities using equation (1). This \ +choice is followed in the polarizable CHARMM force field. :ulb,l +Alternately "Schroeder and Steinhauser"_#Schroeder suggest adopting a global \ +charge \(q_D\) = -1.0e and a global mass \(m_D\) = 0.1 g/mol (or u) \ +for all Drude particles, and to calculate the force constant for each \ +type of core-Drude bond from equation (1). The timesteps used by these \ +authors are between 0.5 and 2 fs, with the degrees of freedom of the \ +Drude oscillators kept cold at 1 K. :l +In both these force fields hydrogen atoms are treated as non-polarizable. :ule,l -"Schroeder and Steinhauser"_#Schroeder suggest adopting a global -charge \(q_D\) = -1.0e and a global mass \(m_D\) = 0.1 g/mol (or u) -for all Drude particles, and to calculate the force constant for each -type of core-Drude bond from equation (1). The timesteps used by these -authors are between 0.5 and 2 fs, with the degrees of freedom of the -Drude oscillators kept cold at 1 K. In both these force fields -hydrogen atoms are treated as non-polarizable. :ule,l The motion of of the Drude particles can be calculated by minimizing the energy of the induced dipoles at each timestep, by an interative, @@ -87,17 +94,16 @@ are such that the core-shell model is sufficiently stable. But to be applicable to molecular/covalent systems the Drude model includes two important features: -The possibility to thermostat the additional degrees of freedom -associated with the induced dipoles at very low temperature, in terms -of the reduced coordinates of the Drude particles with respect to -their cores. This makes the trajectory close to that of relaxed +The possibility to thermostat the additional degrees of freedom \ +associated with the induced dipoles at very low temperature, in terms \ +of the reduced coordinates of the Drude particles with respect to \ +their cores. This makes the trajectory close to that of relaxed \ induced dipoles. :olb,l - -The Drude dipoles on covalently bonded atoms interact too strongly -due to the short distances, so an atom may capture the Drude particle -(shell) of a neighbor, or the induced dipoles within the same molecule -may align too much. To avoid this, damping at short of the -interactions between the point charges composing the induced dipole +The Drude dipoles on covalently bonded atoms interact too strongly \ +due to the short distances, so an atom may capture the Drude particle \ +(shell) of a neighbor, or the induced dipoles within the same molecule \ +may align too much. To avoid this, damping at short of the \ +interactions between the point charges composing the induced dipole \ can be done by "Thole"_#Thole functions. :ole,l @@ -444,7 +450,7 @@ fix INVERSE all drude/transform/inverse :pre [(Lamoureux)] Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003) :link(Schroeder) -[(Schroeder)] Schröder and Steinhauser, J Chem Phys, 133, +[(Schroeder)] Schroeder and Steinhauser, J Chem Phys, 133, 154511 (2010). :link(Jiang) diff --git a/doc/src/variable.txt b/doc/src/variable.txt index 5012b3f4fb..53b59c3243 100644 --- a/doc/src/variable.txt +++ b/doc/src/variable.txt @@ -46,7 +46,7 @@ style = {delete} or {index} or {loop} or {world} or {universe} or {uloop} or {st constants = PI, version, on, off, true, false, yes, no thermo keywords = vol, ke, press, etc from "thermo_style"_thermo_style.html math operators = (), -x, x+y, x-y, x*y, x/y, x^y, x%y, - x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x + x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x math functions = sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x) @@ -428,9 +428,8 @@ references, and references to other variables. Number: 0.2, 100, 1.0e20, -15.4, etc Constant: PI, version, on, off, true, false, yes, no Thermo keywords: vol, pe, ebond, etc -Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x%y, Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x%y, \ - x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x + x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x Math functions: sqrt(x), exp(x), ln(x), log(x), abs(x), \ sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), \ random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), \ @@ -1096,7 +1095,7 @@ variable formula. Referencing a variable with a leading "v_" is an optional or required kind of argument for some commands (e.g. the "fix -ave/spatial"_fix_ave_spatial.html or "dump custom"_dump.html or +ave/chunk"_fix_ave_chunk.html or "dump custom"_dump.html or "thermo_style"_thermo_style.html commands) if you wish it to evaluate a variable periodically during a run. It can also be used in a variable formula if you wish to reference a second variable. The diff --git a/doc/utils/converters/lammpsdoc/txt2html.py b/doc/utils/converters/lammpsdoc/txt2html.py index ddb1b1978e..ab132a380d 100755 --- a/doc/utils/converters/lammpsdoc/txt2html.py +++ b/doc/utils/converters/lammpsdoc/txt2html.py @@ -138,12 +138,18 @@ class Formatting(object): elif command == "dl": return self.definition_list(paragraph) elif command == "l": + if "olb" in commands: + self.current_list_mode = Formatting.ORDERED_LIST_MODE + elif "ulb" in commands: + self.current_list_mode = Formatting.UNORDERED_LIST_MODE + return self.list_item(paragraph) elif command == "dt": return self.definition_term(paragraph) elif command == "dd": return self.definition_description(paragraph) elif command == "ulb": + self.current_list_mode = Formatting.UNORDERED_LIST_MODE return self.unordered_list_begin(paragraph) elif command == "ule": return self.unordered_list_end(paragraph) diff --git a/doc/utils/converters/lammpsdoc/txt2rst.py b/doc/utils/converters/lammpsdoc/txt2rst.py index ba3864008a..f9ceb9b7ae 100755 --- a/doc/utils/converters/lammpsdoc/txt2rst.py +++ b/doc/utils/converters/lammpsdoc/txt2rst.py @@ -165,7 +165,7 @@ class RSTFormatting(Formatting): return paragraph def unordered_list_end(self, paragraph): - return paragraph + return paragraph.rstrip() + '\n' def ordered_list_begin(self, paragraph): if paragraph.startswith('* '): @@ -179,7 +179,15 @@ class RSTFormatting(Formatting): return paragraph def ordered_list_end(self, paragraph): - return paragraph + return paragraph.rstrip() + '\n' + + def ordered_list(self, paragraph): + paragraph = super().ordered_list(paragraph) + return paragraph.rstrip() + '\n' + + def unordered_list(self, paragraph): + paragraph = super().unordered_list(paragraph) + return paragraph.rstrip() + '\n' def all_breaks(self, paragraph): indented = "" diff --git a/doc/utils/converters/tests/test_txt2rst.py b/doc/utils/converters/tests/test_txt2rst.py index 1be59ac714..e2c20434be 100644 --- a/doc/utils/converters/tests/test_txt2rst.py +++ b/doc/utils/converters/tests/test_txt2rst.py @@ -222,7 +222,7 @@ class TestListFormatting(unittest.TestCase): "three :ule,l\n") self.assertEqual("* one\n" "* two\n" - "* three\n", s) + "* three\n\n", s) def test_multi_line_unordered_list_elements(self): s = self.txt2rst.convert("one :ulb,l\n" @@ -232,7 +232,7 @@ class TestListFormatting(unittest.TestCase): self.assertEqual("* one\n" "* two\n" " words\n" - "* three\n", s) + "* three\n\n", s) def test_ordered_list(self): s = self.txt2rst.convert("one\n" @@ -248,7 +248,7 @@ class TestListFormatting(unittest.TestCase): "three :ole,l\n") self.assertEqual("#. one\n" "#. two\n" - "#. three\n", s) + "#. three\n\n", s) def test_multi_line_ordered_list_elements(self): s = self.txt2rst.convert("one :olb,l\n" @@ -258,7 +258,37 @@ class TestListFormatting(unittest.TestCase): self.assertEqual("#. one\n" "#. two\n" " words\n" - "#. three\n", s) + "#. three\n\n", s) + + def test_paragraphs_ordered_list(self): + s = self.txt2rst.convert("first\n" + "paragraph :olb,l\n" + "second\n" + "paragraph :l\n" + "third\n" + "paragraph :ole,l\n") + self.assertEqual("#. first\n" + " paragraph\n" + "#. second\n" + " paragraph\n" + "#. third\n" + " paragraph\n\n", s) + + def test_paragraphs_unordered_list(self): + s = self.txt2rst.convert("first\n" + "paragraph :ulb,l\n" + "second\n" + "paragraph :l\n" + "third\n" + "paragraph :ule,l\n") + self.assertEqual("* first\n" + " paragraph\n" + "* second\n" + " paragraph\n" + "* third\n" + " paragraph\n\n", s) + + def test_definition_list(self): s = self.txt2rst.convert("A\n" diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/badge_only.css.map b/doc/utils/sphinx-config/_themes/lammps_theme/static/css/badge_only.css.map deleted file mode 100644 index aeb56ddb04..0000000000 --- a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/badge_only.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": ";AAyDA,UAAY;EACV,sBAAsB,EAAE,WAAW;;;AAqDrC,SAAS;EARP,KAAK,EAAE,CAAC;;AACR,iCAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,eAAO;EACL,KAAK,EAAE,IAAI;;;AC1Gb,UAkBC;EAjBC,WAAW,ECFJ,WAAW;EDGlB,WAAW,EAHqC,MAAM;EAItD,UAAU,EAJsD,MAAM;EAapE,GAAG,EAAE,sCAAwB;EAC7B,GAAG,EAAE,8PAAyE;;ACZpF,UAAU;EACR,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,WAAW;EACxB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,CAAC;EACd,eAAe,EAAE,OAAO;;;AAG1B,KAAK;EACH,OAAO,EAAE,YAAY;EACrB,eAAe,EAAE,OAAO;;;AAIxB,MAAG;EACD,OAAO,EAAE,YAAY;;AACvB;mBAAiB;;EAGf,KAAK,EAAE,OAAY;;;AAEvB,MAAM;EACJ,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,MAAM;;AAEjB,aAAG;EACD,KAAK,EAAE,KAAI;;AACb;0BAAiB;;EAGf,cAAc,EAAE,QAAQ;;;AAG9B,eAAe;EACb,OAAO,EAAE,GAAO;;;AAElB,iBAAiB;EACf,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,uBAAuB;EACrB,OAAO,EAAE,GAAO;;;AAElB,mBAAmB;EACjB,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,uBAAuB;EACrB,OAAO,EAAE,GAAO;;;AAElB,sBAAsB;EACpB,OAAO,EAAE,GAAO;;;AAElB,wBAAwB;EACtB,OAAO,EAAE,GAAO;;;ACnElB,aAAa;EACX,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EC6E+B,KAAK;ED5EzC,KAAK,ECE+B,OAAyB;EDD7D,UAAU,EAAE,OAAkC;EAC9C,UAAU,EAAE,kBAAiC;EAC7C,WAAW,EEAyB,2DAAM;EFC1C,OAAO,EC+E6B,GAAG;;AD9EvC,eAAC;EACC,KAAK,ECqE6B,OAAW;EDpE7C,eAAe,EAAE,IAAI;;AACvB,8BAAgB;EACd,OAAO,EAAE,IAAI;;AACf,kCAAoB;EAClB,OAAO,EAAE,IAAqB;EAC9B,gBAAgB,EAAE,OAAkC;EACpD,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,OAAO;EACf,KAAK,ECiD6B,OAAM;EJgC1C,KAAK,EAAE,CAAC;;AACR,mFAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,wCAAO;EACL,KAAK,EAAE,IAAI;;AGrFX,sCAAG;EACD,KAAK,EClB2B,OAAyB;;ADmB3D,2CAAQ;EACN,KAAK,EAAE,IAAI;;AACb,6CAAU;EACR,KAAK,EAAE,IAAI;;AACb,kDAAiB;EACf,gBAAgB,ECQgB,OAAI;EDPpC,KAAK,EC0B2B,IAAM;;ADzBxC,yDAAwB;EACtB,gBAAgB,ECXgB,OAAO;EDYvC,KAAK,ECzB2B,IAAI;;AD0BxC,0CAA8B;EAC5B,OAAO,EAAE,KAAK;;AAChB,iCAAmB;EACjB,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,IAAqB;EAC9B,KAAK,ECE6B,IAAwB;EDD1D,OAAO,EAAE,IAAI;;AACb,oCAAE;EACA,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,MAAM;EACd,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,iBAA6C;;AAC3D,oCAAE;EACA,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,CAAC;;AACT,sCAAC;EACC,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,GAAqB;EAC9B,KAAK,ECjDyB,OAAyB;;ADkD7D,uBAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,IAAI;EACZ,SAAS,ECkByB,KAAK;;ADjBvC,kCAAU;EACR,KAAK,EAAE,IAAI;;AACb,gCAAQ;EACN,KAAK,EAAE,IAAI;;AACb,qDAA+B;EAC7B,UAAU,EAAE,KAAK;;AACjB,8DAAQ;EACN,KAAK,EAAE,IAAI;;AACb,gEAAU;EACR,KAAK,EAAE,IAAI;;AACf,4CAAoB;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAuB;EAChC,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,MAAM;;;AGhDpB,oCAAsB;EHmDxB,aAAa;IACX,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,IAAI;;EACb,mBAAO;IACL,OAAO,EAAE,KAAK;;;EAClB,GAAG;IACD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI", -"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"], -"names": [], -"file": "badge_only.css" -} diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css.map b/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css.map deleted file mode 100644 index 7e94d02442..0000000000 --- a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": ";AACE,CAAE;ECQI,kBAAoB,EDPJ,UAAU;ECY1B,eAAiB,EDZD,UAAU;EC2B1B,UAAY,ED3BI,UAAU;;;AEFlC,iFAAiF;EAC/E,OAAO,EAAE,KAAK;;;AAEhB,oBAAoB;EAClB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,CAAC;;;AAEV,qBAAqB;EACnB,OAAO,EAAE,IAAI;;;AAEf,QAAQ;EACN,OAAO,EAAE,IAAI;;;AAEf,CAAC;EDLO,kBAAoB,ECMd,UAAU;EDDhB,eAAiB,ECCX,UAAU;EDchB,UAAY,ECdN,UAAU;;;AAExB,IAAI;EACF,SAAS,EAAE,IAAI;EACf,wBAAwB,EAAE,IAAI;EAC9B,oBAAoB,EAAE,IAAI;;;AAE5B,IAAI;EACF,MAAM,EAAE,CAAC;;;AAEX,iBAAiB;EACf,OAAO,EAAE,CAAC;;;AAEZ,WAAW;EACT,aAAa,EAAE,UAAU;;;AAE3B,SAAS;EACP,WAAW,EAAE,IAAI;;;AAEnB,UAAU;EACR,MAAM,EAAE,CAAC;;;AAEX,GAAG;EACD,UAAU,EAAE,MAAM;;;AAGpB,GAAG;EACD,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,eAAe,EAAE,IAAI;;;AAEvB,IAAI;EACF,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,IAAI;;;AAEnB,wDAAoB;EAClB,WAAW,EAAE,gBAAS;EACtB,YAAY,EAAE,wBAAa;EAC3B,SAAS,EAAE,GAAG;;;AAEhB,GAAG;EACD,WAAW,EAAE,GAAG;;;AAElB,CAAC;EACC,MAAM,EAAE,IAAI;;;AAEd,iBAAiB;EACf,OAAO,EAAE,EAAE;EACX,OAAO,EAAE,IAAI;;;AAEf,KAAK;EACH,SAAS,EAAE,GAAG;;;AAEhB,QAAQ;EACN,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,CAAC;EACd,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,QAAQ;;;AAE1B,GAAG;EACD,GAAG,EAAE,MAAM;;;AAEb,GAAG;EACD,MAAM,EAAE,OAAO;;;AAEjB,UAAU;EACR,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,IAAI;;;AAExB,EAAE;EACA,UAAU,EAAE,IAAI;;;AAElB,EAAE;EACA,MAAM,EAAE,CAAC;;;AAEX,GAAG;EACD,MAAM,EAAE,CAAC;EACT,sBAAsB,EAAE,OAAO;EAC/B,cAAc,EAAE,MAAM;EACtB,SAAS,EAAE,IAAI;;;AAEjB,cAAc;EACZ,QAAQ,EAAE,MAAM;;;AAElB,MAAM;EACJ,MAAM,EAAE,CAAC;;;AAEX,IAAI;EACF,MAAM,EAAE,CAAC;;;AAEX,QAAQ;EACN,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;AAEZ,KAAK;EACH,MAAM,EAAE,OAAO;;;AAEjB,MAAM;EACJ,MAAM,EAAE,CAAC;EACT,YAAY,EAAE,IAAI;EAClB,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,MAAM;;;AAErB,+BAA+B;EAC7B,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,CAAC;EACT,cAAc,EAAE,QAAQ;EACxB,eAAe,EAAE,MAAM;;;AAEzB,aAAa;EACX,WAAW,EAAE,MAAM;;;AAErB,uEAAuE;EACrE,MAAM,EAAE,OAAO;EACf,kBAAkB,EAAE,MAAM;EAC1B,SAAS,EAAE,OAAO;;;AAEpB,iCAAiC;EAC/B,MAAM,EAAE,OAAO;;;AAEjB,2CAA2C;EACzC,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;;;AAEf,oBAAoB;EAClB,kBAAkB,EAAE,SAAS;EAC7B,eAAe,EAAE,WAAW;EAC5B,kBAAkB,EAAE,WAAW;EAC/B,UAAU,EAAE,WAAW;;;AAEzB,mGAAmG;EACjG,kBAAkB,EAAE,IAAI;;;AAE1B,iDAAiD;EAC/C,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;AAEZ,QAAQ;EACN,QAAQ,EAAE,IAAI;EACd,cAAc,EAAE,GAAG;EACnB,MAAM,EAAE,QAAQ;;;AAElB,KAAK;EACH,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;;;AAEnB,EAAE;EACA,cAAc,EAAE,GAAG;;;AAErB,YAAY;EACV,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,OAAO;;;AAElB,GAAG;EACD,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,MAAM;EACnB,QAAQ,EAAE,MAAM;EAChB,gBAAgB,EAAE,WAAW;EAC7B,iBAAiB,EAAE,SAAS;EAC5B,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,GAAG;EACd,YAAY,EAAE,CAAC;;;AAEjB,MAAM;EACJ,OAAO,EAAE,IAAI;;;AAEf,OAAO;EACL,OAAO,EAAE,eAAe;EACxB,UAAU,EAAE,MAAM;;;AAEpB,eAAe;EACb,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,aAAa;EACnB,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,GAAG;;;AAEZ,iEAAiE;EAC/D,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,OAAO;EACjB,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,IAAI;;;AAEb,UAAU;EACR,UAAU,EAAE,MAAM;;;AAEpB,SAAS;EACP,QAAQ,EAAE,QAAQ;;;AAEpB,UAAU;EACR,SAAS,EAAE,IAAI;;;AAEjB,YAAY;EACV,mBAAmB;IACjB,UAAU,EAAE,eAAe;;;EAC7B,CAAC;IACC,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,eAAe;IACvB,UAAU,EAAE,eAAe;;;EAC7B,YAAY;IACV,eAAe,EAAE,SAAS;;;EAC5B,6DAA6D;IAC3D,OAAO,EAAE,EAAE;;;EACb,eAAe;IACb,iBAAiB,EAAE,KAAK;;;EAC1B,KAAK;IACH,OAAO,EAAE,kBAAkB;;;EAC7B,OAAO;IACL,iBAAiB,EAAE,KAAK;;;EAC1B,GAAG;IACD,SAAS,EAAE,eAAe;;;;IAE1B,MAAM,EAAE,KAAK;;EAEf,kDAAS;IACP,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;;;EACX,+CAAM;IACJ,gBAAgB,EAAE,KAAK;;;AChM3B,woDAAY;EACV,sBAAsB,EAAE,WAAW;;;AAqDrC,SAAS;EARP,KAAK,EAAE,CAAC;;AACR,iCAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,eAAO;EACL,KAAK,EAAE,IAAI;;;;;;;;;AC1Gf,UAUC;EATC,WAAW,EAAE,aAAa;EAC1B,GAAG,EAAE,+CAAgE;EACrE,GAAG,EAAE,ySAAmG;EAKxG,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;;ACTpB,mgBAAmB;EACjB,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,uCAAuC;EAC7C,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;;;;ACLpC,MAAsB;EACpB,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAS;EACtB,cAAc,EAAE,IAAI;;;AAEtB,MAAsB;EAAE,SAAS,EAAE,GAAG;;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;;ACVtC,MAAsB;EACpB,KAAK,EAAE,SAAW;EAClB,UAAU,EAAE,MAAM;;;ACDpB,MAAsB;EACpB,YAAY,EAAE,CAAC;EACf,WAAW,ECIU,SAAS;EDH9B,eAAe,EAAE,IAAI;;AACrB,WAAK;EAAE,QAAQ,EAAE,QAAQ;;;AAE3B,MAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAa;EACnB,KAAK,ECHgB,SAAS;EDI9B,GAAG,EAAE,SAAU;EACf,UAAU,EAAE,MAAM;;AAClB,YAAuB;EACrB,IAAI,EAAE,UAA0B;;;AEbpC,UAA0B;EACxB,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,IAAI;;;AAGrB,WAAY;EAAE,KAAK,EAAE,KAAK;;;AAC1B,UAAW;EAAE,KAAK,EAAE,IAAI;;;AAGtB,mqBAAY;EAAE,YAAY,EAAE,IAAI;;AAChC,mrBAAa;EAAE,WAAW,EAAE,IAAI;;;ACXlC,QAAwB;EACtB,iBAAiB,EAAE,0BAA0B;EACrC,SAAS,EAAE,0BAA0B;;;AAG/C,0BASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;;;AAIrC,kBASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;;;ACvBrC,aAA8B;ECU5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,aAAgB;EAC/B,aAAa,EAAE,aAAgB;EAC3B,SAAS,EAAE,aAAgB;;;ADZrC,cAA8B;ECS5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;;ADXrC,cAA8B;ECQ5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;;ADTrC,mBAAmC;ECajC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;;ADfzC,iBAAmC;ECYjC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;;ADVzC;;;;uBAIuC;EACrC,MAAM,EAAE,IAAI;;;AEfd,SAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;;AAExB,0BAAyD;EACvD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;;AAEpB,YAA4B;EAAE,WAAW,EAAE,OAAO;;;AAClD,YAA4B;EAAE,SAAS,EAAE,GAAG;;;AAC5C,WAA2B;EAAE,KAAK,ELXZ,IAAI;;;;;AML1B,gBAAgC;EAAE,OAAO,ENwP1B,GAAO;;;AMvPtB,gBAAgC;EAAE,OAAO,ENkV1B,GAAO;;;AMjVtB,sCAAiC;EAAE,OAAO,ENyZ1B,GAAO;;;AMxZvB,qBAAqC;EAAE,OAAO,EN2K1B,GAAO;;;AM1K3B,gBAAgC;EAAE,OAAO,ENqQ1B,GAAO;;;AMpQtB,eAA+B;EAAE,OAAO,ENkc1B,GAAO;;;AMjcrB,iBAAiC;EAAE,OAAO,ENsc1B,GAAO;;;AMrcvB,eAA+B;EAAE,OAAO,EN0gB1B,GAAO;;;AMzgBrB,eAA+B;EAAE,OAAO,EN+M1B,GAAO;;;AM9MrB,mBAAmC;EAAE,OAAO,EN8d1B,GAAO;;;AM7dzB,aAA6B;EAAE,OAAO,EN4d1B,GAAO;;;AM3dnB,kBAAkC;EAAE,OAAO,EN6d1B,GAAO;;;AM5dxB,gBAAgC;EAAE,OAAO,EN+F1B,GAAO;;;AM9FtB;;gBAEgC;EAAE,OAAO,ENge1B,GAAO;;;AM/dtB,sBAAsC;EAAE,OAAO,EN6Y1B,GAAO;;;AM5Y5B,uBAAuC;EAAE,OAAO,EN2Y1B,GAAO;;;AM1Y7B,oBAAoC;EAAE,OAAO,ENqW1B,GAAO;;;AMpW1B,iBAAiC;EAAE,OAAO,ENwZ1B,GAAO;;;AMvZvB;cAC8B;EAAE,OAAO,ENmH1B,GAAO;;;AMlHpB,kBAAkC;EAAE,OAAO,ENoe1B,GAAO;;;AMnexB,kCAA+B;EAAE,OAAO,ENqP1B,GAAO;;;AMpPrB,iBAAiC;EAAE,OAAO,ENmL1B,GAAO;;;AMlLvB,kBAAkC;EAAE,OAAO,ENqG1B,GAAO;;;AMpGxB,eAA+B;EAAE,OAAO,ENqX1B,GAAO;;;AMpXrB,yHAAmC;EAAE,OAAO,ENyI1B,GAAO;;;AMxIzB,8BAA8C;EAAE,OAAO,ENG1B,GAAO;;;AMFpC,4BAA4C;EAAE,OAAO,ENK1B,GAAO;;;AMJlC,gBAAgC;EAAE,OAAO,ENmP1B,GAAO;;;AMlPtB,wBAAwC;EAAE,OAAO,ENkV1B,GAAO;;;AMjV9B;iBACiC;EAAE,OAAO,ENyW1B,GAAO;;;AMxWvB,kBAAkC;EAAE,OAAO,ENoW1B,GAAO;;;AMnWxB,mBAAmC;EAAE,OAAO,ENiR1B,GAAO;;;AMhRzB,eAA+B;EAAE,OAAO,ENoR1B,GAAO;;;AMnRrB,eAA+B;EAAE,OAAO,ENsL1B,GAAO;;;AMrLrB,qBAAqC;EAAE,OAAO,ENkO1B,GAAO;;;AMjO3B,qBAAqC;EAAE,OAAO,ENkf1B,GAAO;;;AMjf3B,sBAAsC;EAAE,OAAO,ENgf1B,GAAO;;;AM/e5B,oBAAoC;EAAE,OAAO,ENif1B,GAAO;;;AMhf1B,iBAAiC;EAAE,OAAO,ENiV1B,GAAO;;;AMhVvB,kBAAkC;EAAE,OAAO,ENU1B,GAAO;;;AMTxB,cAA8B;EAAE,OAAO,ENkb1B,GAAO;;;AMjbpB,eAA+B;EAAE,OAAO,ENkb1B,GAAO;;;AMjbrB,kCAA+B;EAAE,OAAO,ENyB1B,GAAO;;;AMxBrB,mBAAmC;EAAE,OAAO,ENyB1B,GAAO;;;AMxBzB,gBAAgC;EAAE,OAAO,ENwU1B,GAAO;;;AMvUtB,iBAAiC;EAAE,OAAO,ENqC1B,GAAO;;;AMpCvB,eAA+B;EAAE,OAAO,ENoL1B,GAAO;;;AMnLrB,eAA+B;EAAE,OAAO,ENiB1B,GAAO;;;AMhBrB,iBAAiC;EAAE,OAAO,ENqO1B,GAAO;;;AMpOvB,sBAAsC;EAAE,OAAO,EN+a1B,GAAO;;;AM9a5B,qBAAqC;EAAE,OAAO,EN+a1B,GAAO;;;AM9a3B,qBAAqC;EAAE,OAAO,EN3C1B,GAAO;;;AM4C3B,uBAAuC;EAAE,OAAO,EN9C1B,GAAO;;;AM+C7B,sBAAsC;EAAE,OAAO,EN5C1B,GAAO;;;AM6C5B,wBAAwC;EAAE,OAAO,EN/C1B,GAAO;;;AMgD9B,eAA+B;EAAE,OAAO,ENwP1B,GAAO;;;AMvPrB;kBACkC;EAAE,OAAO,EN0R1B,GAAO;;;AMzRxB,iBAAiC;EAAE,OAAO,ENoN1B,GAAO;;;AMnNvB,uBAAuC;EAAE,OAAO,ENqd1B,GAAO;;;AMpd7B;;oBAEoC;EAAE,OAAO,ENsS1B,GAAO;;;AMrS1B,iBAAiC;EAAE,OAAO,EN+R1B,GAAO;;;AM9RvB,qBAAqC;EAAE,OAAO,EN+P1B,GAAO;;;AM9P3B,iBAAiC;EAAE,OAAO,EN7D1B,GAAO;;;AM8DvB,eAA+B;EAAE,OAAO,EN4a1B,GAAO;;;AM3arB;0BAC0C;EAAE,OAAO,EN4R1B,GAAO;;;AM3RhC,yBAAyC;EAAE,OAAO,EN2V1B,GAAO;;;AM1V/B,yBAAyC;EAAE,OAAO,ENqC1B,GAAO;;;AMpC/B,iBAAiC;EAAE,OAAO,ENlC1B,GAAO;;;AMmCvB,wBAAwC;EAAE,OAAO,ENmY1B,GAAO;;;AMlY9B,wBAAwC;EAAE,OAAO,ENkH1B,GAAO;;;AMjH9B,mBAAmC;EAAE,OAAO,EN9B1B,GAAO;;;AM+BzB,eAA+B;EAAE,OAAO,ENgS1B,GAAO;;;AM/RrB,gBAAgC;EAAE,OAAO,EN+Q1B,GAAO;;;AM9QtB,eAA+B;EAAE,OAAO,ENiY1B,GAAO;;;AMhYrB,kBAAkC;EAAE,OAAO,ENqJ1B,GAAO;;;AMpJxB,uBAAuC;EAAE,OAAO,EN6G1B,GAAO;;;AM5G7B,uBAAuC;EAAE,OAAO,EN4X1B,GAAO;;;AM3X7B,gBAAgC;EAAE,OAAO,ENoF1B,GAAO;;;AMnFtB,uBAAuC;EAAE,OAAO,EN+B1B,GAAO;;;AM9B7B,wBAAwC;EAAE,OAAO,EN+B1B,GAAO;;;AM9B9B,sBAAsC;EAAE,OAAO,EN4R1B,GAAO;;;AM3R5B,uBAAuC;EAAE,OAAO,ENkP1B,GAAO;;;AMjP7B,+FAAuC;EAAE,OAAO,ENsZ1B,GAAO;;;AMrZ7B,gGAAuC;EAAE,OAAO,ENiB1B,GAAO;;;AMhB7B,0BAA0C;EAAE,OAAO,ENiS1B,GAAO;;;AMhShC,sBAAsC;EAAE,OAAO,ENuL1B,GAAO;;;AMtL5B,qBAAqC;EAAE,OAAO,ENuD1B,GAAO;;;AMtD3B,yBAAyC;EAAE,OAAO,ENkZ1B,GAAO;;;AMjZ/B,yBAAyC;EAAE,OAAO,ENa1B,GAAO;;;AMZ/B,cAA8B;EAAE,OAAO,ENhD1B,GAAO;;;AMiDpB,qBAAqC;EAAE,OAAO,EN5D1B,GAAO;;;AM6D3B,sBAAsC;EAAE,OAAO,EN5D1B,GAAO;;;AM6D5B,mBAAmC;EAAE,OAAO,EN5D1B,GAAO;;;AM6DzB,qBAAqC;EAAE,OAAO,ENhE1B,GAAO;;;AMiE3B;gBACgC;EAAE,OAAO,ENyT1B,GAAO;;;AMxTtB,iBAAiC;EAAE,OAAO,EN+E1B,GAAO;;;AM9EvB,mBAAmC;EAAE,OAAO,ENuC1B,GAAO;;;AMtCzB,eAA+B;EAAE,OAAO,ENyQ1B,GAAO;;;AMxQrB,gBAAgC;EAAE,OAAO,EN+N1B,GAAO;;;AM9NtB,mBAAmC;EAAE,OAAO,EN/D1B,GAAO;;;AMgEzB,mNAA6C;EAAE,OAAO,ENwE1B,GAAO;;;AMvEnC,eAA+B;EAAE,OAAO,ENmI1B,GAAO;;;AMlIrB,eAA+B;EAAE,OAAO,ENqL1B,GAAO;;;AMpLrB,kCAA+B;EAAE,OAAO,ENyG1B,GAAO;;;AMxGrB,cAA8B;EAAE,OAAO,ENyE1B,GAAO;;;AMxEpB,oBAAoC;EAAE,OAAO,ENyE1B,GAAO;;;AMxE1B;+BAC+C;EAAE,OAAO,ENkE1B,GAAO;;;AMjErC,gBAAgC;EAAE,OAAO,ENyP1B,GAAO;;;AMxPtB,mBAAmC;EAAE,OAAO,ENlC1B,GAAO;;;AMmCzB,iBAAiC;EAAE,OAAO,EN0Q1B,GAAO;;;AMzQvB,kBAAkC;EAAE,OAAO,ENmB1B,GAAO;;;AMlBxB,iBAAiC;EAAE,OAAO,ENqM1B,GAAO;;;AMpMvB,qBAAqC;EAAE,OAAO,ENH1B,GAAO;;;AMI3B,uBAAuC;EAAE,OAAO,ENP1B,GAAO;;;AMQ7B,kBAAkC;EAAE,OAAO,ENiR1B,GAAO;;;AMhRxB,wBAAwC;EAAE,OAAO,EN2S1B,GAAO;;;AM1S9B,iBAAiC;EAAE,OAAO,ENoG1B,GAAO;;;AMnGvB,sBAAsC;EAAE,OAAO,ENqG1B,GAAO;;;AMpG5B,mBAAmC;EAAE,OAAO,ENpF1B,GAAO;;;AMqFzB,mBAAmC;EAAE,OAAO,ENtF1B,GAAO;;;AMuFzB;oBACoC;EAAE,OAAO,ENhF1B,GAAO;;;AMiF1B,yBAAyC;EAAE,OAAO,ENkY1B,GAAO;;;AMjY/B,0BAA0C;EAAE,OAAO,ENyD1B,GAAO;;;AMxDhC,uBAAuC;EAAE,OAAO,EN/C1B,GAAO;;;AMgD7B,cAA8B;EAAE,OAAO,ENsJ1B,GAAO;;;AMrJpB;eAC+B;EAAE,OAAO,ENA1B,GAAO;;;AMCrB,mBAAmC;EAAE,OAAO,ENG1B,GAAO;;;AMFzB,sBAAsC;EAAE,OAAO,ENiW1B,GAAO;;;AMhW5B,wBAAwC;EAAE,OAAO,EN+V1B,GAAO;;;AM9V9B,oBAAoC;EAAE,OAAO,EN2T1B,GAAO;;;AM1T1B,kBAAkC;EAAE,OAAO,EN4H1B,GAAO;;;AM3HxB,mBAAmC;EAAE,OAAO,EN2R1B,GAAO;;;AM1RzB,0BAA0C;EAAE,OAAO,ENiK1B,GAAO;;;AMhKhC,qBAAqC;EAAE,OAAO,ENwV1B,GAAO;;;AMvV3B,wBAAwC;EAAE,OAAO,ENsC1B,GAAO;;;AMrC9B,kBAAkC;EAAE,OAAO,ENsR1B,GAAO;;;AMrRxB,iBAAiC;EAAE,OAAO,ENyW1B,GAAO;;;AMxWvB,wBAAwC;EAAE,OAAO,ENiG1B,GAAO;;;AMhG9B,iBAAiC;EAAE,OAAO,ENyX1B,GAAO;;;AMxXvB,kBAAkC;EAAE,OAAO,EN+I1B,GAAO;;;AM9IxB,gBAAgC;EAAE,OAAO,EN6M1B,GAAO;;;AM5MtB,mBAAmC;EAAE,OAAO,EN2S1B,GAAO;;;AM1SzB,qBAAqC;EAAE,OAAO,ENjF1B,GAAO;;;AMkF3B,uBAAuC;EAAE,OAAO,EN2M1B,GAAO;;;AM1M7B,kBAAkC;EAAE,OAAO,ENyW1B,GAAO;;;AMxWxB,mBAAmC;EAAE,OAAO,ENgC1B,GAAO;;;AM/BzB,sCAAiC;EAAE,OAAO,ENsF1B,GAAO;;;AMrFvB,iBAAiC;EAAE,OAAO,EN6W1B,GAAO;;;AM5WvB,sBAAsC;EAAE,OAAO,ENb1B,GAAO;;;AMc5B,cAA8B;EAAE,OAAO,ENmP1B,GAAO;;;AMlPpB,gBAAgC;EAAE,OAAO,ENoG1B,GAAO;;;AMnGtB,mBAAmC;EAAE,OAAO,ENpF1B,GAAO;;;AMqFzB,eAA+B;EAAE,OAAO,EN1G1B,GAAO;;;AM2GrB,sBAAsC;EAAE,OAAO,EN7D1B,GAAO;;;AM8D5B,uBAAuC;EAAE,OAAO,EN8F1B,GAAO;;;AM7F7B,sBAAsC;EAAE,OAAO,EN4F1B,GAAO;;;AM3F5B,oBAAoC;EAAE,OAAO,EN6F1B,GAAO;;;AM5F1B,sBAAsC;EAAE,OAAO,ENyF1B,GAAO;;;AMxF5B,4DAA4C;EAAE,OAAO,EN5I1B,GAAO;;;AM6IlC,8DAA6C;EAAE,OAAO,ENxI1B,GAAO;;;AMyInC,0BAA0C;EAAE,OAAO,ENxI1B,GAAO;;;AMyIhC,4BAA4C;EAAE,OAAO,ENhJ1B,GAAO;;;AMiJlC,gBAAgC;EAAE,OAAO,EN2E1B,GAAO;;;AM1EtB,iBAAiC;EAAE,OAAO,ENqX1B,GAAO;;;AMpXvB,gBAAgC;EAAE,OAAO,ENgT1B,GAAO;;;AM/StB,iBAAiC;EAAE,OAAO,ENuC1B,GAAO;;;AMtCvB,oBAAoC;EAAE,OAAO,ENxG1B,GAAO;;;AMyG1B,qBAAqC;EAAE,OAAO,ENzI1B,GAAO;;;AM0I3B;gBACgC;EAAE,OAAO,EN8V1B,GAAO;;;AM7VtB;;iBAC+B;EAAE,OAAO,ENwH1B,GAAO;;;AMvHrB,gBAAgC;EAAE,OAAO,ENxD1B,GAAO;;;AMyDtB,gBAAgC;EAAE,OAAO,ENsC1B,GAAO;;;AMrCtB;mBACmC;EAAE,OAAO,EN+N1B,GAAO;;;AM9NzB;kBACkC;EAAE,OAAO,ENyB1B,GAAO;;;AMxBxB,oBAAoC;EAAE,OAAO,EN8J1B,GAAO;;;AM7J1B;mBACmC;EAAE,OAAO,ENiC1B,GAAO;;;AMhCzB,iBAAiC;EAAE,OAAO,ENkQ1B,GAAO;;;AMjQvB;;eAE+B;EAAE,OAAO,EN9I1B,GAAO;;;AM+IrB,kBAAkC;EAAE,OAAO,ENiH1B,GAAO;;;AMhHxB,kBAAkC;EAAE,OAAO,EN+G1B,GAAO;;;AM9GxB,wBAAwC;EAAE,OAAO,EN4Q1B,GAAO;;;AM3Q9B,oBAAoC;EAAE,OAAO,ENgU1B,GAAO;;;AM/T1B,gBAAgC;EAAE,OAAO,ENkR1B,GAAO;;;AMjRtB,gBAAgC;EAAE,OAAO,ENmH1B,GAAO;;;AMlHtB,gBAAgC;EAAE,OAAO,ENmT1B,GAAO;;;AMlTtB,oBAAoC;EAAE,OAAO,ENgK1B,GAAO;;;AM/J1B,2BAA2C;EAAE,OAAO,ENgK1B,GAAO;;;AM/JjC,6BAA6C;EAAE,OAAO,EN8C1B,GAAO;;;AM7CnC,sBAAsC;EAAE,OAAO,EN4C1B,GAAO;;;AM3C5B,gBAAgC;EAAE,OAAO,ENgI1B,GAAO;;;AM/HtB,0EAAqC;EAAE,OAAO,ENxH1B,GAAO;;;AMyH3B,mBAAmC;EAAE,OAAO,ENlH1B,GAAO;;;AMmHzB,qBAAqC;EAAE,OAAO,ENzH1B,GAAO;;;AM0H3B,sBAAsC;EAAE,OAAO,ENzH1B,GAAO;;;AM0H5B,kBAAkC;EAAE,OAAO,EN3E1B,GAAO;;;AM4ExB;eAC+B;EAAE,OAAO,EN4N1B,GAAO;;;AM3NrB;oBACoC;EAAE,OAAO,ENgO1B,GAAO;;;AM/N1B;mBACmC;EAAE,OAAO,EN6N1B,GAAO;;;AM5NzB,mBAAmC;EAAE,OAAO,EN/C1B,GAAO;;;AMgDzB,mBAAmC;EAAE,OAAO,ENmF1B,GAAO;;;AMlFzB;eAC+B;EAAE,OAAO,EN0S1B,GAAO;;;AMzSrB;gBACgC;EAAE,OAAO,ENW1B,GAAO;;;AMVtB;qBACqC;EAAE,OAAO,EN0P1B,GAAO;;;AMzP3B,oBAAoC;EAAE,OAAO,ENxF1B,GAAO;;;AMyF1B,qBAAqC;EAAE,OAAO,ENvF1B,GAAO;;;AMwF3B;eAC+B;EAAE,OAAO,ENlK1B,GAAO;;;AMmKrB,kBAAkC;EAAE,OAAO,ENoM1B,GAAO;;;AMnMxB,mBAAmC;EAAE,OAAO,EN8R1B,GAAO;;;AM7RzB;oBACoC;EAAE,OAAO,EN9G1B,GAAO;;;AM+G1B,sBAAsC;EAAE,OAAO,ENiE1B,GAAO;;;AMhE5B,mBAAmC;EAAE,OAAO,EN1D1B,GAAO;;;AM2DzB,yBAAyC;EAAE,OAAO,EN7G1B,GAAO;;;AM8G/B,uBAAuC;EAAE,OAAO,EN7G1B,GAAO;;;AM8G7B,kBAAkC;EAAE,OAAO,ENkS1B,GAAO;;;AMjSxB,sBAAsC;EAAE,OAAO,ENgO1B,GAAO;;;AM/N5B,mBAAmC;EAAE,OAAO,ENqO1B,GAAO;;;AMpOzB,iBAAiC;EAAE,OAAO,ENxL1B,GAAO;;;AMyLvB,iBAAiC;EAAE,OAAO,EN7G1B,GAAO;;;AM8GvB,kBAAkC;EAAE,OAAO,EN3F1B,GAAO;;;AM4FxB,sBAAsC;EAAE,OAAO,ENpC1B,GAAO;;;AMqC5B,qBAAqC;EAAE,OAAO,ENzK1B,GAAO;;;AM0K3B,qBAAqC;EAAE,OAAO,ENqB1B,GAAO;;;AMpB3B,oBAAoC;EAAE,OAAO,EN3O1B,GAAO;;;AM4O1B,iBAAiC;EAAE,OAAO,EN4E1B,GAAO;;;AM3EvB,sBAAsC;EAAE,OAAO,ENxD1B,GAAO;;;AMyD5B,eAA+B;EAAE,OAAO,ENrM1B,GAAO;;;AMsMrB,mBAAmC;EAAE,OAAO,ENG1B,GAAO;;;AMFzB,sBAAsC;EAAE,OAAO,ENuH1B,GAAO;;;AMtH5B,4BAA4C;EAAE,OAAO,EN5O1B,GAAO;;;AM6OlC,6BAA6C;EAAE,OAAO,EN5O1B,GAAO;;;AM6OnC,0BAA0C;EAAE,OAAO,EN5O1B,GAAO;;;AM6OhC,4BAA4C;EAAE,OAAO,ENhP1B,GAAO;;;AMiPlC,qBAAqC;EAAE,OAAO,EN5O1B,GAAO;;;AM6O3B,sBAAsC;EAAE,OAAO,EN5O1B,GAAO;;;AM6O5B,mBAAmC;EAAE,OAAO,EN5O1B,GAAO;;;AM6OzB,qBAAqC;EAAE,OAAO,ENhP1B,GAAO;;;AMiP3B,kBAAkC;EAAE,OAAO,ENxG1B,GAAO;;;AMyGxB,iBAAiC;EAAE,OAAO,ENyB1B,GAAO;;;AMxBvB,iBAAiC;EAAE,OAAO,ENmN1B,GAAO;;;AMlNvB;iBACiC;EAAE,OAAO,ENmE1B,GAAO;;;AMlEvB,mBAAmC;EAAE,OAAO,ENlJ1B,GAAO;;;AMmJzB,qBAAqC;EAAE,OAAO,ENiH1B,GAAO;;;AMhH3B,sBAAsC;EAAE,OAAO,ENiH1B,GAAO;;;AMhH5B,kBAAkC;EAAE,OAAO,ENiL1B,GAAO;;;AMhLxB,iBAAiC;EAAE,OAAO,ENvJ1B,GAAO;;;AMwJvB;gBACgC;EAAE,OAAO,ENyH1B,GAAO;;;AMxHtB,qBAAqC;EAAE,OAAO,EN9B1B,GAAO;;;AM+B3B,mBAAmC;EAAE,OAAO,ENjD1B,GAAO;;;AMkDzB,wBAAwC;EAAE,OAAO,ENhD1B,GAAO;;;AMiD9B,kBAAkC;EAAE,OAAO,EN2J1B,GAAO;;;AM1JxB,kBAAkC;EAAE,OAAO,EN9C1B,GAAO;;;AM+CxB,gBAAgC;EAAE,OAAO,EN+C1B,GAAO;;;AM9CtB,kBAAkC;EAAE,OAAO,EN9C1B,GAAO;;;AM+CxB,qBAAqC;EAAE,OAAO,ENI1B,GAAO;;;AMH3B,iBAAiC;EAAE,OAAO,EN9D1B,GAAO;;;AM+DvB,yBAAyC;EAAE,OAAO,ENhE1B,GAAO;;;AMiE/B,mBAAmC;EAAE,OAAO,ENsM1B,GAAO;;;AMrMzB,eAA+B;EAAE,OAAO,EN1J1B,GAAO;;;AM2JrB;oBACoC;EAAE,OAAO,EN4G1B,GAAO;;;AM3G1B;;sBAEsC;EAAE,OAAO,ENwK1B,GAAO;;;AMvK5B,yBAAyC;EAAE,OAAO,ENmB1B,GAAO;;;AMlB/B,eAA+B;EAAE,OAAO,ENjJ1B,GAAO;;;AMkJrB,oBAAoC;EAAE,OAAO,ENjK1B,GAAO;;;AMkK1B;uBACuC;EAAE,OAAO,EN9L1B,GAAO;;;AM+L7B,mBAAmC;EAAE,OAAO,ENmF1B,GAAO;;;AMlFzB,eAA+B;EAAE,OAAO,ENvB1B,GAAO;;;AMwBrB,sBAAsC;EAAE,OAAO,ENvH1B,GAAO;;;AMwH5B,sBAAsC;EAAE,OAAO,EN6K1B,GAAO;;;AM5K5B,oBAAoC;EAAE,OAAO,ENyK1B,GAAO;;;AMxK1B,iBAAiC;EAAE,OAAO,EN9H1B,GAAO;;;AM+HvB,uBAAuC;EAAE,OAAO,EN0E1B,GAAO;;;AMzE7B,qBAAqC;EAAE,OAAO,ENwB1B,GAAO;;;AMvB3B,2BAA2C;EAAE,OAAO,ENwB1B,GAAO;;;AMvBjC,iBAAiC;EAAE,OAAO,ENqH1B,GAAO;;;AMpHvB,qBAAqC;EAAE,OAAO,EN9N1B,GAAO;;;AM+N3B,4BAA4C;EAAE,OAAO,EN1F1B,GAAO;;;AM2FlC,iBAAiC;EAAE,OAAO,EN2F1B,GAAO;;;AM1FvB,iBAAiC;EAAE,OAAO,ENc1B,GAAO;;;AMbvB,8BAA8C;EAAE,OAAO,ENtM1B,GAAO;;;AMuMpC,+BAA+C;EAAE,OAAO,ENtM1B,GAAO;;;AMuMrC,4BAA4C;EAAE,OAAO,ENtM1B,GAAO;;;AMuMlC,8BAA8C;EAAE,OAAO,EN1M1B,GAAO;;;AM2MpC,gBAAgC;EAAE,OAAO,EN7C1B,GAAO;;;AM8CtB,eAA+B;EAAE,OAAO,ENtK1B,GAAO;;;AMuKrB,iBAAiC;EAAE,OAAO,EN9S1B,GAAO;;;AM+SvB,qBAAqC;EAAE,OAAO,EN+M1B,GAAO;;;AM9M3B,mBAAmC;EAAE,OAAO,EN/O1B,GAAO;;;AMgPzB,qBAAqC;EAAE,OAAO,ENtJ1B,GAAO;;;AMuJ3B,qBAAqC;EAAE,OAAO,ENtJ1B,GAAO;;;AMuJ3B,qBAAqC;EAAE,OAAO,ENmF1B,GAAO;;;AMlF3B,sBAAsC;EAAE,OAAO,EN6C1B,GAAO;;;AM5C5B,iBAAiC;EAAE,OAAO,EN0K1B,GAAO;;;AMzKvB,uBAAuC;EAAE,OAAO,ENO1B,GAAO;;;AMN7B,4IAAyC;EAAE,OAAO,ENO1B,GAAO;;;AMN/B,mBAAmC;EAAE,OAAO,EN/B1B,GAAO;;;AMgCzB,qBAAqC;EAAE,OAAO,ENjC1B,GAAO;;;AMkC3B,uBAAuC;EAAE,OAAO,EN3N1B,GAAO;;;AM4N7B,wBAAwC;EAAE,OAAO,ENyB1B,GAAO;;;AMxB9B,+BAA+C;EAAE,OAAO,ENlJ1B,GAAO;;;AMmJrC,uBAAuC;EAAE,OAAO,ENuF1B,GAAO;;;AMtF7B,kBAAkC;EAAE,OAAO,EN9L1B,GAAO;;;AM+LxB;8BAC8C;EAAE,OAAO,ENnP1B,GAAO;;;AMoPpC;4BAC4C;EAAE,OAAO,ENlP1B,GAAO;;;AMmPlC;+BAC+C;EAAE,OAAO,ENrP1B,GAAO;;;AMsPrC;cAC8B;EAAE,OAAO,ENpK1B,GAAO;;;AMqKpB,cAA8B;EAAE,OAAO,ENzG1B,GAAO;;;AM0GpB;cAC8B;EAAE,OAAO,ENwL1B,GAAO;;;AMvLpB;cAC8B;EAAE,OAAO,ENrE1B,GAAO;;;AMsEpB;;;cAG8B;EAAE,OAAO,ENnE1B,GAAO;;;AMoEpB;;cAE8B;EAAE,OAAO,ENqD1B,GAAO;;;AMpDpB;cAC8B;EAAE,OAAO,ENpE1B,GAAO;;;AMqEpB;cAC8B;EAAE,OAAO,EN1R1B,GAAO;;;AM2RpB,eAA+B;EAAE,OAAO,ENlK1B,GAAO;;;AMmKrB,oBAAoC;EAAE,OAAO,ENtJ1B,GAAO;;;AMuJ1B,yBAAyC;EAAE,OAAO,EN4E1B,GAAO;;;AM3E/B,0BAA0C;EAAE,OAAO,EN4E1B,GAAO;;;AM3EhC,0BAA0C;EAAE,OAAO,EN4E1B,GAAO;;;AM3EhC,2BAA2C;EAAE,OAAO,EN4E1B,GAAO;;;AM3EjC,2BAA2C;EAAE,OAAO,EN+E1B,GAAO;;;AM9EjC,4BAA4C;EAAE,OAAO,EN+E1B,GAAO;;;AM9ElC,oBAAoC;EAAE,OAAO,EN+H1B,GAAO;;;AM9H1B,sBAAsC;EAAE,OAAO,EN2H1B,GAAO;;;AM1H5B,yBAAyC;EAAE,OAAO,EN4L1B,GAAO;;;AM3L/B,kBAAkC;EAAE,OAAO,ENyL1B,GAAO;;;AMxLxB,eAA+B;EAAE,OAAO,ENmL1B,GAAO;;;AMlLrB,sBAAsC;EAAE,OAAO,ENmL1B,GAAO;;;AMlL5B,uBAAuC;EAAE,OAAO,ENuL1B,GAAO;;;AMtL7B,kBAAkC;EAAE,OAAO,EN/M1B,GAAO;;;AMgNxB,yBAAyC;EAAE,OAAO,ENgF1B,GAAO;;;AM/E/B,oBAAoC;EAAE,OAAO,ENjG1B,GAAO;;;AMkG1B,iBAAiC;EAAE,OAAO,ENxJ1B,GAAO;;;AMyJvB,cAA8B;EAAE,OAAO,ENhX1B,GAAO;;;AMiXpB,4CAAoC;EAAE,OAAO,ENzT1B,GAAO;;;AM0T1B,2BAA2C;EAAE,OAAO,ENzT1B,GAAO;;;AM0TjC,iBAAiC;EAAE,OAAO,ENqI1B,GAAO;;;AMpIvB,wBAAwC;EAAE,OAAO,ENqI1B,GAAO;;;AMpI9B,0BAA0C;EAAE,OAAO,ENrE1B,GAAO;;;AMsEhC,wBAAwC;EAAE,OAAO,ENnE1B,GAAO;;;AMoE9B,0BAA0C;EAAE,OAAO,ENtE1B,GAAO;;;AMuEhC,2BAA2C;EAAE,OAAO,ENtE1B,GAAO;;;AMuEjC,gBAAgC;EAAE,OAAO,ENxW1B,GAAO;;;AMyWtB,kBAAkC;EAAE,OAAO,EN8J1B,GAAO;;;AM7JxB,kBAAkC;EAAE,OAAO,ENpX1B,GAAO;;;AMqXxB,gBAAgC;EAAE,OAAO,ENnF1B,GAAO;;;AMoFtB,mBAAmC;EAAE,OAAO,ENjO1B,GAAO;;;AMkOzB,gBAAgC;EAAE,OAAO,ENsC1B,GAAO;;;AMrCtB,qBAAqC;EAAE,OAAO,ENhK1B,GAAO;;;AMiK3B,iBAAiC;EAAE,OAAO,ENmH1B,GAAO;;;AMlHvB,iBAAiC;EAAE,OAAO,ENxM1B,GAAO;;;AMyMvB,eAA+B;EAAE,OAAO,ENzE1B,GAAO;;;AM0ErB,iBAAiC;EAAE,OAAO,ENrJ1B,GAAO;;;AMsJvB,gBAAgC;EAAE,OAAO,EN2E1B,GAAO;;;AM1EtB,iBAAiC;EAAE,OAAO,EN7D1B,GAAO;;;AM8DvB,kBAAkC;EAAE,OAAO,ENpX1B,GAAO;;;AMqXxB,cAA8B;EAAE,OAAO,ENpU1B,GAAO;;;AMqUpB,aAA6B;EAAE,OAAO,ENsI1B,GAAO;;;AMrInB,gBAAgC;EAAE,OAAO,EN2I1B,GAAO;;;AM1ItB,iBAAiC;EAAE,OAAO,ENX1B,GAAO;;;AMYvB,oBAAoC;EAAE,OAAO,EN5D1B,GAAO;;;AM6D1B,yBAAyC;EAAE,OAAO,ENgD1B,GAAO;;;AM/C/B,+BAA+C;EAAE,OAAO,ENrX1B,GAAO;;;AMsXrC,8BAA8C;EAAE,OAAO,ENvX1B,GAAO;;;AMwXpC;8BAC8C;EAAE,OAAO,EN5T1B,GAAO;;;AM6TpC,uBAAuC;EAAE,OAAO,ENvP1B,GAAO;;;AMwP7B,qBAAqC;EAAE,OAAO,ENoI1B,GAAO;;;AMnI3B,uBAAuC;EAAE,OAAO,ENyH1B,GAAO;;;AMxH7B;cAC8B;EAAE,OAAO,ENiG1B,GAAO;;;AMhGpB,yEAAwC;EAAE,OAAO,ENzC1B,GAAO;;;AM0C9B,wBAAwC;EAAE,OAAO,EN+B1B,GAAO;;;AM9B9B,gBAAgC;EAAE,OAAO,ENa1B,GAAO;;;AMZtB,0BAA0C;EAAE,OAAO,ENnP1B,GAAO;;;AMoPhC,oBAAoC;EAAE,OAAO,ENgI1B,GAAO;;;AM/H1B,iBAAiC;EAAE,OAAO,EN9E1B,GAAO;;;AM+EvB;;qBAEqC;EAAE,OAAO,ENmG1B,GAAO;;;AMlG3B;yBACyC;EAAE,OAAO,EN3K1B,GAAO;;;AM4K/B,gBAAgC;EAAE,OAAO,EN6H1B,GAAO;;;AM5HtB,iBAAiC;EAAE,OAAO,ENjL1B,GAAO;;;AMkLvB,iBAAiC;EAAE,OAAO,ENxC1B,GAAO;;;AMyCvB,wBAAwC;EAAE,OAAO,ENxC1B,GAAO;;;AMyC9B,6BAA6C;EAAE,OAAO,ENuC1B,GAAO;;;AMtCnC,sBAAsC;EAAE,OAAO,ENqC1B,GAAO;;;AMpC5B,oBAAoC;EAAE,OAAO,ENlR1B,GAAO;;;AMmR1B,eAA+B;EAAE,OAAO,ENhR1B,GAAO;;;AMiRrB,qBAAqC;EAAE,OAAO,ENxE1B,GAAO;;;AMyE3B,yBAAyC;EAAE,OAAO,ENxE1B,GAAO;;;AMyE/B,iBAAiC;EAAE,OAAO,EN7Q1B,GAAO;;;AM8QvB,iBAAiC;EAAE,OAAO,EN3J1B,GAAO;;;AM4JvB,mBAAmC;EAAE,OAAO,ENtJ1B,GAAO;;;AMuJzB,cAA8B;EAAE,OAAO,ENtP1B,GAAO;;;AMuPpB,mBAAmC;EAAE,OAAO,EN3W1B,GAAO;;;AM4WzB,gBAAgC;EAAE,OAAO,ENjU1B,GAAO;;;AMkUtB,cAA8B;EAAE,OAAO,EN1F1B,GAAO;;;AM2FpB,gBAAgC;EAAE,OAAO,ENM1B,GAAO;;;AMLtB,eAA+B;EAAE,OAAO,ENrS1B,GAAO;;;AMsSrB,gBAAgC;EAAE,OAAO,ENrS1B,GAAO;;;AMsStB,kBAAkC;EAAE,OAAO,ENtY1B,GAAO;;;AMuYxB,yBAAyC;EAAE,OAAO,ENtY1B,GAAO;;;AMuY/B,gBAAgC;EAAE,OAAO,ENa1B,GAAO;;;AMZtB,uBAAuC;EAAE,OAAO,ENa1B,GAAO;;;AMZ7B,kBAAkC;EAAE,OAAO,EN/D1B,GAAO;;;AMgExB;cAC8B;EAAE,OAAO,EN5W1B,GAAO;;;AM6WpB;eAC+B;EAAE,OAAO,EN2B1B,GAAO;;;AM1BrB,eAA+B;EAAE,OAAO,ENoD1B,GAAO;;;AMnDrB,kBAAkC;EAAE,OAAO,ENN1B,GAAO;;;AMOxB,qBAAqC;EAAE,OAAO,ENzS1B,GAAO;;;AM0S3B,qBAAqC;EAAE,OAAO,ENZ1B,GAAO;;;AMa3B,mBAAmC;EAAE,OAAO,EN/S1B,GAAO;;;AMgTzB,qBAAqC;EAAE,OAAO,ENhQ1B,GAAO;;;AMiQ3B,sBAAsC;EAAE,OAAO,ENzP1B,GAAO;;;AM0P5B,uBAAuC;EAAE,OAAO,ENtQ1B,GAAO;;;AMuQ7B,4BAA4C;EAAE,OAAO,ENhQ1B,GAAO;;;AMiQlC;;uBAEuC;EAAE,OAAO,ENzQ1B,GAAO;;;AM0Q7B;yBACyC;EAAE,OAAO,EN/Q1B,GAAO;;;AMgR/B;uBACuC;EAAE,OAAO,ENhR1B,GAAO;;;AMiR7B;uBACuC;EAAE,OAAO,ENrQ1B,GAAO;;;AMsQ7B,sBAAsC;EAAE,OAAO,ENlR1B,GAAO;;;AMmR5B,eAA+B;EAAE,OAAO,EN4D1B,GAAO;;;AM3DrB,kBAAkC;EAAE,OAAO,ENrV1B,GAAO;;;AMsVxB,mBAAmC;EAAE,OAAO,ENhM1B,GAAO;;;AMiMzB;;;;oBAIoC;EAAE,OAAO,ENtL1B,GAAO;;;AMuL1B,yBAAyC;EAAE,OAAO,ENvW1B,GAAO;;;AMwW/B;gBACgC;EAAE,OAAO,ENlG1B,GAAO;;;AMmGtB;iBACiC;EAAE,OAAO,EN1T1B,GAAO;;;AM2TvB,qBAAqC;EAAE,OAAO,ENpP1B,GAAO;;;AMqP3B,cAA8B;EAAE,OAAO,ENtP1B,GAAO;;;AMuPpB,sBAAsC;EAAE,OAAO,ENxO1B,GAAO;;;AMyO5B,wBAAwC;EAAE,OAAO,ENR1B,GAAO;;;AMS9B,aAA6B;EAAE,OAAO,ENjH1B,GAAO;;;AMkHnB;iBACiC;EAAE,OAAO,ENiD1B,GAAO;;;AMhDvB;sBACsC;EAAE,OAAO,ENrJ1B,GAAO;;;AMsJ5B;wBACwC;EAAE,OAAO,ENtJ1B,GAAO;;;AMuJ9B,kBAAkC;EAAE,OAAO,ENvO1B,GAAO;;;AMwOxB,sBAAsC;EAAE,OAAO,ENvX1B,GAAO;;;AMwX5B,iBAAiC;EAAE,OAAO,EN7O1B,GAAO;;;AM8OvB,oBAAoC;EAAE,OAAO,ENxJ1B,GAAO;;;AMyJ1B,kBAAkC;EAAE,OAAO,ENvE1B,GAAO;;;AMwExB,oBAAoC;EAAE,OAAO,ENtF1B,GAAO;;;AMuF1B,2BAA2C;EAAE,OAAO,ENtF1B,GAAO;;;AMuFjC,eAA+B;EAAE,OAAO,ENnb1B,GAAO;;;AMobrB;mBACmC;EAAE,OAAO,ENjR1B,GAAO;;;AMkRzB,cAA8B;EAAE,OAAO,ENI1B,GAAO;;;AMHpB,qBAAqC;EAAE,OAAO,EN9b1B,GAAO;;;AM+b3B,eAA+B;EAAE,OAAO,EN5I1B,GAAO;;;AM6IrB,qBAAqC;EAAE,OAAO,EN/E1B,GAAO;;;AMgF3B,iBAAiC;EAAE,OAAO,ENI1B,GAAO;;;AMHvB,eAA+B;EAAE,OAAO,ENuC1B,GAAO;;;AMtCrB,sBAAsC;EAAE,OAAO,EN7K1B,GAAO;;;AM8K5B,eAA+B;EAAE,OAAO,EN6B1B,GAAO;;;AM5BrB,qBAAqC;EAAE,OAAO,ENjb1B,GAAO;;;AMkb3B,iBAAiC;EAAE,OAAO,ENpK1B,GAAO;;;AMqKvB,wBAAwC;EAAE,OAAO,ENzQ1B,GAAO;;;AM0Q9B,kBAAkC;EAAE,OAAO,ENha1B,GAAO;;;AMiaxB,wBAAwC;EAAE,OAAO,ENpa1B,GAAO;;;AMqa9B,sBAAsC;EAAE,OAAO,ENta1B,GAAO;;;AMua5B,kBAAkC;EAAE,OAAO,ENxa1B,GAAO;;;AMyaxB,oBAAoC;EAAE,OAAO,ENta1B,GAAO;;;AMua1B,oBAAoC;EAAE,OAAO,ENta1B,GAAO;;;AMua1B,qBAAqC;EAAE,OAAO,ENjd1B,GAAO;;;AMkd3B,uBAAuC;EAAE,OAAO,ENjd1B,GAAO;;;AMkd7B,gBAAgC;EAAE,OAAO,ENtB1B,GAAO;;;AMuBtB,oBAAoC;EAAE,OAAO,EN9X1B,GAAO;;;AM+X1B,aAA6B;EAAE,OAAO,ENne1B,GAAO;;;AMoenB,qBAAqC;EAAE,OAAO,ENtV1B,GAAO;;;AMuV3B,sBAAsC;EAAE,OAAO,EN1L1B,GAAO;;;AM2L5B,wBAAwC;EAAE,OAAO,ENpd1B,GAAO;;;AMqd9B,qBAAqC;EAAE,OAAO,ENzf1B,GAAO;;;AM0f3B,oBAAoC;EAAE,OAAO,EN7K1B,GAAO;;;AM8K1B,qBAAqC;EAAE,OAAO,ENzO1B,GAAO;;;AM0O3B,iBAAiC;EAAE,OAAO,ENtP1B,GAAO;;;AMuPvB,wBAAwC;EAAE,OAAO,ENtP1B,GAAO;;;AMuP9B,qBAAqC;EAAE,OAAO,ENrC1B,GAAO;;;AMsC3B,oBAAoC;EAAE,OAAO,ENrC1B,GAAO;;;AMsC1B,kBAAkC;EAAE,OAAO,EN9d1B,GAAO;;;AM+dxB,cAA8B;EAAE,OAAO,EN5c1B,GAAO;;;AM6cpB,kBAAkC;EAAE,OAAO,ENtQ1B,GAAO;;;AMuQxB,oBAAoC;EAAE,OAAO,EN9gB1B,GAAO;;;AM+gB1B,aAA6B;EAAE,OAAO,EN/b1B,GAAO;;;AMgcnB;;cAE8B;EAAE,OAAO,ENpR1B,GAAO;;;AMqRpB,mBAAmC;EAAE,OAAO,EN/N1B,GAAO;;;AOtUzB,4xBAAK;EACH,WAAW,EAAE,OAAO;;AACpB,+6BAAQ;EACN,WAAW,EC+BuB,aAAa;ED9B/C,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,CAAC;EACd,eAAe,EAAE,OAAO;;;AAM5B,28BAAkB;EAChB,OAAO,EAAE,YAAY;EACrB,eAAe,EAAE,OAAO;;;AAGxB,syEAAgB;EACd,OAAO,EAAE,MAAM;;AACf,8zEAAuB;EACrB,WAAW,EAAE,KAAI;;AACnB,0wEAAsB;EACpB,OAAO,EAAE,YAAY;;;AAE3B,wjBAA2B;EACzB,OAAO,EAAE,GAAE;EfpBL,kBAAoB,EAAE,qBAAM;EAK5B,eAAiB,EAAE,qBAAM;EAezB,UAAY,EAAE,qBAAM;;;AeE5B,4oBAAiC;EAC/B,OAAO,EAAE,CAAC;;;AAGV,4uCAAuB;EACrB,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;;;AEpBxB,qQAAS;EACP,OAAO,EAAE,IAAqB;EAC9B,WAAW,EDayB,IAAI;ECZxC,aAAa,EDYuB,IAAI;ECXxC,UAAU,EAAE,OAAmB;;;AAEjC,+CAAe;EACb,KAAK,EDkC+B,IAAM;ECjC1C,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAK;EACd,KAAK,ED+B+B,IAAM;EC9B1C,UAAU,EAAE,OAAkB;EAC9B,MAAM,EAAE,KAAsB;EAC9B,OAAO,EAAE,QAA2C;EACpD,aAAa,EAAE,IAAqB;;;AAEtC,qaAAyB;EACvB,UAAU,EAAE,OAAkB;;AAC9B,2yCAAe;EACb,UAAU,EAAE,OAAiB;;;AACjC,6YAA0B;EACxB,UAAU,EAAE,OAAmB;;AAC/B,4vCAAe;EACb,UAAU,EAAE,OAAoB;;;AAEpC,iZAAuB;EACrB,UAAU,EAAE,OAAmB;;AAC/B,iwCAAe;EACb,UAAU,EAAE,OAAkB;;;AAElC,8ZAA0B;EACxB,UAAU,EAAE,OAAuB;;AACnC,8xCAAe;EACb,UAAU,EAAE,OAAqB;;;AAErC,idAA0B;EACxB,UAAU,EDmB0B,OAAmB;;AClBvD,o4CAAe;EACb,KAAK,ECjD6B,OAAW;EDkD7C,UAAU,EDJwB,OAAmB;;ACKvD,yeAAC;EACC,KAAK,EDsB6B,OAAW;;;ACpBjD,iaAAsB;EACpB,aAAa,EAAE,CAAC;;;AAsBlB,kBAAkB;EAChB,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,CAAC;EACP,OAAO,EDG6B,GAAG;;ACFvC,qBAAE;EACA,OAAO,EAAE,KAAK;EACd,KAAK,EDT6B,KAAK;ECUvC,UAAU,EAAE,WAAW;EACvB,KAAK,EDlC6B,IAAM;ECmCxC,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,8BAA0B;EACtC,OAAO,EAAE,MAAmB;EAC5B,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,IAAI;EACjB,QAAQ,EAAE,MAAM;EjB3FZ,kBAAoB,EAAE,gBAAM;EAK5B,eAAiB,EAAE,gBAAM;EAezB,UAAY,EAAE,gBAAM;;AiByExB,0CAAsB;EACpB,UAAU,EDhCsB,OAAM;;ACiCxC,uCAAmB;EACjB,UAAU,EDzBsB,OAAW;;AC0B7C,0CAAsB;EACpB,UAAU,EDnFsB,OAAO;;ACoFzC,yCAAqB;EACnB,UAAU,EDtEsB,OAAI;;ACuEtC,wBAAI;EACF,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,IAAI;;;AEhFd,oCAAsB;EFmFxB,kBAAkB;IAChB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,IAAI;;EACX,qBAAE;IACA,KAAK,EAAE,IAAI;;;AG3FjB,MAAM;EACJ,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,CAAC;EACT,cAAc,EAAE,QAAQ;EACxB,eAAe,EAAE,MAAM;EACvB,MAAM,EAAE,OAAO;EACf,WAAW,EAAE,MAAM;EACnB,kBAAkB,EAAE,MAAM;EAC1B,SAAS,EAAE,OAAO;;;AACpB,iDAAiD;EAC/C,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;AACZ,gBAAgB;EACd,MAAM,EAAE,OAAO;;;AAEjB,IAAI;;EAEF,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,GAAG;EAClB,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,iBAA6F;EACtG,KAAK,EJI+B,IAAM;EIH1C,MAAM,EAAE,4BAAyB;EACjC,gBAAgB,EJeoB,OAAM;EId1C,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,MAAM;EACnB,WAAW,EFnDyB,2DAAM;EEoD1C,UAAU,EAAE,0FAA8C;EAC1D,YAAY,EAAE,KAAK;EACnB,cAAc,EAAE,MAAM;EACtB,QAAQ,EAAE,MAAM;EAChB,IAAI,EAAE,CAAC;EACP,iBAAiB,EAAE,IAAI;EpBxDjB,mBAAoB,EoByDb,IAAI;EpBpDX,gBAAiB,EoBoDV,IAAI;EpB/CX,eAAgB,EoB+CT,IAAI;EpBrCX,WAAY,EoBqCL,IAAI;EpBzDX,kBAAoB,EAAE,eAAM;EAK5B,eAAiB,EAAE,eAAM;EAezB,UAAY,EAAE,eAAM;;;AoByC5B,UAAU;EACR,UAAU,EAAE,OAAwB;EACpC,KAAK,EJd+B,IAAM;;;AIiB1C,UAAO;EACL,UAAU,EAAE,OAAqC;EACjD,KAAK,EJnB6B,IAAM;;AIoB1C,UAAO;EACL,UAAU,EAAE,OAAqC;EACjD,OAAO,EAAE,CAAC;;AACZ,WAAQ;EACN,UAAU,EAAE,oFAAyC;EACrD,OAAO,EAAE,iBAA6F;;AACxG,YAAS;EACP,KAAK,EJ3B6B,IAAM;;AI4B1C,aAAU;EACR,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,2DAA2D;EACnE,MAAM,EAAE,iBAAmB;EAC3B,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,WAAW;EACnB,UAAU,EAAE,IAAI;;;AAEpB,aAAa;EACX,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,2DAA2D;EACnE,MAAM,EAAE,iBAAmB;EAC3B,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,WAAW;EACnB,UAAU,EAAE,IAAI;;AAChB,8DAA0B;EACxB,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,2DAA2D;EACnE,MAAM,EAAE,iBAAmB;EAC3B,OAAO,EAAE,GAAI;EACb,MAAM,EAAE,WAAW;EACnB,UAAU,EAAE,IAAI;;;AAGpB,sBAAsB;EACpB,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;;;AAEX,UAAU;EACR,SAAS,EAAE,GAAG;;;AAEhB,SAAS;EACP,gBAAgB,EAAE,kBAAgB;;AAClC,eAAO;EACL,gBAAgB,EAAE,kBAA6B;;;AAEnD,YAAY;EACV,gBAAgB,EAAE,kBAA2C;EAC7D,KAAK,EAAE,kBAAsB;;AAC7B,kBAAO;EACL,gBAAgB,EAAE,kBAAuD;EACzE,KAAK,EFzH6B,OAAW;;AE0H/C,oBAAS;EACP,KAAK,EAAE,kBAAsB;;;AAEjC,YAAY;EACV,gBAAgB,EAAE,kBAAiB;;AACnC,kBAAO;EACL,gBAAgB,EAAE,kBAA6B;;;AAEnD,WAAW;EACT,gBAAgB,EAAE,kBAAe;;AACjC,iBAAO;EACL,gBAAgB,EAAE,kBAA4B;;;AAElD,YAAY;EACV,gBAAgB,EAAE,kBAAkB;;AACpC,kBAAO;EACL,gBAAgB,EAAE,kBAA+B;;;AACrD,WAAW;EACT,gBAAgB,EJvIoB,IAAI;;AIwIxC,iBAAO;EACL,gBAAgB,EAAE,kBAAoC;;;AAE1D,SAAS;EACP,gBAAgB,EAAE,sBAAsB;EACxC,KAAK,EJxE+B,OAAW;EIyE/C,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,sBAAsB;;AACpC,eAAO;EACL,gBAAgB,EAAE,sBAAsB;EACxC,KAAK,EAAE,kBAAoC;EAC3C,UAAU,EAAE,IAAI;;AAClB,gBAAQ;EACN,gBAAgB,EAAE,sBAAsB;EACxC,KAAK,EAAE,kBAAoC;EAC3C,UAAU,EAAE,IAAI;;AAClB,iBAAS;EACP,KAAK,EJnG6B,OAAO;;;AIqG7C,oCAAoC;EAClC,cAAc,EAAE,MAAM;;;AAExB,aAAa;EACX,aAAa,EJ1IuB,IAAI;EduExC,KAAK,EAAE,CAAC;;AACR,yCAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,mBAAO;EACL,KAAK,EAAE,IAAI;;;AmB3Ff,YAAY;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;;;AAIvB,qCAAqC;EACnC,OAAO,EAAE,KAAK;;;AAChB,iBAAiB;EACf,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,IAAI;EACX,GAAG,EAAE,IAAI;EACT,SAAS,EAAE,IAAI;EACf,UAAU,EL1B0B,OAAyB;EK2B7D,OAAO,ELmD6B,GAAG;EKlDvC,MAAM,EAAE,iBAAgC;EACxC,UAAU,EAAE,8BAA0B;EACtC,OAAO,EAAE,IAAqB;;AAC9B,0BAAQ;EACN,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,KAAK,EHnC6B,OAAW;EGoC7C,WAAW,EAAE,MAAM;EACnB,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,MAAuB;EAChC,MAAM,EAAE,OAAO;;AACf,gCAAO;EACL,UAAU,ELiCsB,OAAW;EKhC3C,KAAK,ELU2B,IAAM;;AKT1C,8BAAY;EACV,UAAU,EAAE,iBAAgC;EAC5C,MAAM,EAAE,KAAuB;;AACjC,6BAAW;EACT,cAAc,EAAE,IAAqB;;AACrC,kDAAoB;EAClB,KAAK,EAAE,IAAI;;AACf,qCAAmB;EACjB,UAAU,EAAE,OAA4B;EACxC,cAAc,EAAE,SAAS;EACzB,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,GAAG;;AACd,2CAAO;EACL,UAAU,EAAE,OAA4B;;AAC1C,0CAAI;EACF,KAAK,ELN2B,IAAM;;;AKQ5C,6CAA6C;EAC3C,MAAM,EAAE,IAAI;EACZ,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EACV,KAAK,EAAE,CAAC;;;AAGR,iDAAiB;EACf,UAAU,ELnEwB,OAAyB;EKoE3D,UAAU,EAAE,GAAG;;AACjB,mDAAmB;EACjB,OAAO,EAAE,QAA2C;;AACpD,yDAAO;EACL,UAAU,ELCsB,OAAW;EKA3C,KAAK,ELtB2B,IAAM;;;AKwB5C,+CAA+C;EAC7C,KAAK,EAAE,CAAC;EACR,IAAI,EAAE,IAAI;EACV,UAAU,EAAE,KAAK;;;AAGjB,yBAAQ;EACN,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,oBAA0B;EACzC,WAAW,EAAE,qBAAqB;EAClC,YAAY,EAAE,qBAAqB;EACnC,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,GAAG;EACT,WAAW,EAAE,IAAI;;AACnB,gDAA+B;EAC7B,IAAI,EAAE,IAAI;;;ACtEZ,uBAAM;EACJ,OAAO,EAAE,KAAK;;;AAEhB,oIAA+C;EAC7C,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,CAAC;EACR,cAAc,EAAE,MAAM;;;AAItB,0CAAO;EACL,OAAO,EAAE,YAAY;EACrB,cAAc,EAAE,MAAM;EACtB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,YAA+C;EACvD,KAAK,EAAE,IAAI;;AACf,4BAAW;EACT,KAAK,EAAE,IAAI;;AACX,kCAAK;EACH,OAAO,EAAE,KAAK;;AAChB,mCAAM;EACJ,UAAU,EAAE,GAAqB;;;AAEvC,QAAQ;EACN,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;AACZ,MAAM;EACJ,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,MAAM;EACnB,aAAa,EN/BuB,IAAI;EMgCxC,SAAS,EAAE,IAAI;EACf,YAAY,EAAE,IAAI;;;AACpB,KAAK;EACH,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,cAAa;EACrB,KAAK,ENR+B,IAAU;EMS9C,SAAS,EAAE,GAAG;;;AAEhB,uBAAuB;EACrB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,CAAC;EACT,cAAc,EAAE,QAAQ;EACxB,eAAe,EAAE,MAAM;;;AAGzB,iBAAiB;EACf,aAAa,ENhDuB,IAAI;EduExC,KAAK,EAAE,CAAC;EqBrGR,SAAS,ECCC,IAAQ;EDChB,WAAI,EAAE,IAAI;EACV,YAAK,EAAE,IAAI;ErBkGb,KAAK,EAAE,CAAC;;AACR,iDAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,uBAAO;EACL,KAAK,EAAE,IAAI;;AALb,iDAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,uBAAO;EACL,KAAK,EAAE,IAAI;;;AoBzBf,yDAAyD;EACvD,OAAO,EAAE,IAAI;EACb,KAAK,EN/C+B,OAAI;;;AMoDxC,qGAA+C;EAC7C,cAAc,EAAE,IAAqB;;AACrC,0HAAM;EACJ,KAAK,EAAE,IAAI;;AAEX,mwEAAqP;EACnP,KAAK,EAAE,IAAI;;;AACnB,+BAA+B;EGlF3B,KAAK,EAAE,IAAsB;EAG3B,OAAO,EAAE,KAAK;EAed,YAAoB,EAAE,QAA+B;EACrD,KAAK,EAAE,IAAuC;ECnB5C,YAAoB,EAAE,CAAC;;ADqBzB,0CAAa;EACX,YAAoB,EAAE,CAAC;;;AHgE/B,iCAAiC;EGtF7B,KAAK,EAAE,IAAsB;EAG3B,OAAO,EAAE,KAAK;EAed,YAAoB,EAAE,QAA+B;EACrD,KAAK,EAAE,SAAuC;;AAE9C,4CAAa;EACX,YAAoB,EAAE,CAAC;;ACA7B,iDAAwB;EACtB,YAAoB,EAAE,CAAC;;AAEvB,mDAA0B;EACxB,KAAK,EALY,IAAkC;;;AJqEzD,iCAAiC;EG1F7B,KAAK,EAAE,IAAsB;EAG3B,OAAO,EAAE,KAAK;EAed,YAAoB,EAAE,QAA+B;EACrD,KAAK,EAAE,SAAuC;;AAE9C,4CAAa;EACX,YAAoB,EAAE,CAAC;;ACA7B,iDAAwB;EACtB,YAAoB,EAAE,CAAC;;AAEvB,mDAA0B;EACxB,KAAK,EALY,IAAkC;;;AJ0EzD,uDAAuD;EACrD,MAAM,EAAE,SAA2B;EACnC,SAAS,EAAE,GAAG;;;AAEhB,oBAAoB;EAClB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,SAA2B;EACnC,SAAS,EAAE,GAAG;;;AAOZ,itBAAqP;EACnP,KAAK,EAAE,IAAI;;;AAIjB,uBAAuB;EACrB,OAAO,EAAE,YAAY;EACrB,YAAY,EAAE,KAAK;EACnB,KAAK,EAAE,IAAI;EACX,cAAc,EAAE,MAAM;EACtB,SAAS,EAAE,GAAG;;;AAEhB,gBAAgB;EACd,OAAO,EAAE,KAAK;EACd,KAAK,EN7H+B,IAAI;EM8HxC,SAAS,EAAE,GAAG;EACd,UAAU,EAAE,QAAO;EACnB,UAAU,EAAE,MAAM;;AAClB,kBAAC;EACC,SAAS,EAAE,OAAO;EAClB,UAAU,EAAE,MAAM;EAClB,aAAa,EAAE,GAAqB;;AACtC,6BAAY;EACV,aAAa,EAAE,CAAC;;;AA4DpB,KAAK;EACH,WAAW,EAAE,MAAM;;;AAGnB,+DAAmD;EACjD,kBAAkB,EAAE,MAAM;EAC1B,MAAM,EAAE,OAAO;EACf,WAAW,EJ/MuB,2DAAM;EIgNxC,SAAS,EAAE,OAAO;;AACpB,6SAAqP;EACnP,kBAAkB,EAAE,IAAI;EACxB,OAAO,EAAE,GAAqB;EAC9B,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,cAA6B;EACrC,SAAS,EAAE,GAAG;EACd,WAAW,EJvNuB,2DAAM;EIwNxC,UAAU,EAAE,oBAAmC;EAC/C,aAAa,EAAE,CAAC;EtBxNZ,kBAAoB,EAAE,kBAAM;EAK5B,eAAiB,EAAE,kBAAM;EAezB,UAAY,EAAE,kBAAM;;AsBuM1B,4BAAwB;EACtB,OAAO,EAAE,iBAAkB;;AAC7B,eAAW;EACT,MAAM,EAAE,OAAO;;AACjB,2CAAmC;EtB/N7B,kBAAoB,EsBgOZ,UAAU;EtB3NlB,eAAiB,EsB2NT,UAAU;EtB5MlB,UAAY,EsB4MJ,UAAU;EACtB,OAAO,EAAE,CAAC;EACV,YAAY,EAAE,QAAO;EACrB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;;AACd,oBAAgB;EtBrOV,kBAAoB,EsBsOZ,UAAU;EtBjOlB,eAAiB,EsBiOT,UAAU;EtBlNlB,UAAY,EsBkNJ,UAAU;;AACtB,mGAA6D;EAC3D,kBAAkB,EAAE,IAAI;;AAC5B,iYAAyU;EACvU,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,cAAc;EACvB,YAAY,ENxLsB,IAAU;;AMyL9C,oBAAgB;EACd,YAAY,EAAE,eAA8B;;AAC9C,iFAAqE;EACnE,OAAO,EAAE,gBAAsB;EAC/B,OAAO,EAAE,gBAAgB;;AAC3B,ybAAiY;EAC/X,MAAM,EAAE,WAAW;EACnB,gBAAgB,EAAE,OAAmC;;;AAEzD,iEAAiE;EAC/D,KAAK,ENzN+B,OAAI;EM0NxC,MAAM,EAAE,iBAAc;;;AACxB,mFAAmF;EACjF,YAAY,EN5NwB,OAAI;;;AM8NxC,2HAA+G;EAC7G,aAAa,EN/NqB,OAAI;;;AMiO1C,oBAAoB;EAClB,OAAO,EAAE,IAAqB;EAC9B,SAAS,EAAE,IAAI;;;AAKjB,QAAQ;EACN,QAAQ,EAAE,IAAI;EACd,cAAc,EAAE,GAAG;EACnB,KAAK,EAAE,IAAI;EACX,WAAW,EJ3QyB,2DAAM;;;AI4Q5C,gBAAgB;EACd,OAAO,EAAE,aAAgB;EACzB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,cAA6B;EACrC,SAAS,EAAE,GAAG;EACd,UAAU,EAAE,oBAAmC;EtBhRzC,kBAAoB,EAAE,kBAAM;EAK5B,eAAiB,EAAE,kBAAM;EAezB,UAAY,EAAE,kBAAM;;;AsB+P5B,MAAM;EACJ,MAAM,EAAE,cAA6B;EACrC,gBAAgB,ENpOoB,IAAM;;AMqO1C,gBAAW;EACT,MAAM,EAAE,IAAI;;;AAChB,4BAA4B;EAC1B,OAAO,EAAE,CAAC;;;AACZ,2FAA2F;EACzF,MAAM,EAAE,WAAW;EACnB,gBAAgB,EAAE,OAAmC;;;AAKrD,+DAAuD;EACrD,MAAM,EAAE,WAAW;;;AACvB,uBAAuB;EACrB,MAAM,EAAE,KAAuB;EAE/B,KAAK,EJzS+B,OAAW;EI0S/C,OAAO,EAAE,KAAK;;AACd,mCAAK;EACH,cAAc,EAAE,QAAQ;;;AAI5B,uBAAuB;EACrB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,CAAC;EACR,cAAc,EAAE,MAAM;;;AAuBxB,kCAAkC;EAChC,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,GAAqB;;AAC9B,sEAAiB;EACf,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,YAAY;EACrB,SAAS,EAAE,GAAG;EACd,gBAAgB,ENjRkB,OAAmB;EMkRrD,MAAM,EAAE,cAA6B;EACrC,KAAK,EN7U6B,IAAI;;;AM+U1C,kCAAkC;EAChC,WAAW,EAAE,CAAC;;;AAChB,kCAAkC;EAChC,YAAY,EAAE,CAAC;;;AAcjB,UAAU;EACR,KAAK,EAAE,IAAuB;EAC9B,MAAM,EAAE,IAAqB;EAC7B,MAAM,EAAE,MAAwB;EAChC,QAAQ,EAAE,QAAQ;EAClB,aAAa,EAAE,GAAG;EAClB,UAAU,ENrW0B,IAAI;EMsWxC,MAAM,EAAE,OAAO;EtB5WT,kBAAoB,EAAE,oBAAM;EAK5B,eAAiB,EAAE,oBAAM;EAezB,UAAY,EAAE,oBAAM;;AsB0V1B,iBAAQ;EACN,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,EAAE;EACX,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,GAAG;EAClB,UAAU,ENhXwB,IAAI;EMiXtC,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,IAAI;EtBvXL,kBAAoB,EAAE,oBAAM;EAK5B,eAAiB,EAAE,oBAAM;EAezB,UAAY,EAAE,oBAAM;;AsBqW1B,gBAAO;EACL,OAAO,EAAE,OAAO;EAChB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,IAAqB;EAC3B,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,IAAI;EACf,KAAK,ENzX6B,IAAI;;;AM0X1C,iBAAiB;EACf,UAAU,EAAE,OAAmB;;AAC/B,wBAAQ;EACN,IAAI,EN5W8B,IAAI;EM6WtC,UAAU,ENtUwB,OAAM;;AMuU1C,uBAAO;EACL,OAAO,EAAE,MAAM;;;AAEnB,+CAA+C;EAC7C,MAAM,EAAE,WAAW;;;AAiDnB,2GAAyB;EACvB,KAAK,EN7Z6B,OAAI;;AM+ZtC,22BAAqP;EACnP,MAAM,EAAE,iBAAc;;AAC1B,iDAAQ;EACN,MAAM,EAAE,iBAAc;;;AAE1B,mBAAmB;EACjB,WAAW,EAAE,MAAM;;AACnB,qCAAiB;EACf,OAAO,EAAE,aAAgB;EACzB,OAAO,EAAE,YAAY;EACrB,SAAS,EAAE,GAAG;;;AAClB,gEAAgE;EAC9D,KAAK,EN3Y+B,OAAM;;;AM8Y5C,+DAA+D;EAC7D,KAAK,EN/a+B,OAAI;;;AMkb1C,gEAAgE;EAC9D,KAAK,ENlc+B,OAAO;;;AMqc7C,6DAA6D;EAC3D,KAAK,EN9Y+B,OAAW;;;AMoZjD,UAAU;EtB3dF,iBAAoB,EAAE,aAAM;EAK5B,cAAiB,EAAE,aAAM;EAKzB,aAAgB,EAAE,aAAM;EAKxB,YAAe,EAAE,aAAM;EAKvB,SAAY,EAAE,aAAM;;;AsByc5B,WAAW;EtB7dH,iBAAoB,EAAE,cAAM;EAK5B,cAAiB,EAAE,cAAM;EAKzB,aAAgB,EAAE,cAAM;EAKxB,YAAe,EAAE,cAAM;EAKvB,SAAY,EAAE,cAAM;;;AsB2c5B,WAAW;EtB/dH,iBAAoB,EAAE,cAAM;EAK5B,cAAiB,EAAE,cAAM;EAKzB,aAAgB,EAAE,cAAM;EAKxB,YAAe,EAAE,cAAM;EAKvB,SAAY,EAAE,cAAM;;;AsB6c5B,OAAO;EtBjeC,iBAAoB,EAAE,UAAM;EAK5B,cAAiB,EAAE,UAAM;EAKzB,aAAgB,EAAE,UAAM;EAKxB,YAAe,EAAE,UAAM;EAKvB,SAAY,EAAE,UAAM;;AsB+c1B,iBAAW;EtBneL,iBAAoB,EsBoeL,wBAAwB;EtB/dvC,cAAiB,EsB+dF,wBAAwB;EtB1dvC,aAAgB,EsB0dD,wBAAwB;EtBrdvC,YAAe,EsBqdA,wBAAwB;EtBhdvC,SAAY,EsBgdG,wBAAwB;;AAC7C,kBAAY;EtBreN,iBAAoB,EsBseL,yBAAyB;EtBjexC,cAAiB,EsBieF,yBAAyB;EtB5dxC,aAAgB,EsB4dD,yBAAyB;EtBvdxC,YAAe,EsBudA,yBAAyB;EtBldxC,SAAY,EsBkdG,yBAAyB;;AAC9C,kBAAY;EtBveN,iBAAoB,EsBweL,yBAAyB;EtBnexC,cAAiB,EsBmeF,yBAAyB;EtB9dxC,aAAgB,EsB8dD,yBAAyB;EtBzdxC,YAAe,EsBydA,yBAAyB;EtBpdxC,SAAY,EsBodG,yBAAyB;;;AAEhD,yCAAyC;EAErC,8BAAqB;IACnB,MAAM,EAAE,SAAS;;EAEjB,2aAAqP;IACnP,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE,KAAK;;EAClB,cAAK;IACH,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE,KAAK;;;EAEhB,8YAAqO;IACnO,aAAa,EAAE,CAAC;;;EAElB,wCAAuB;IACrB,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,IAAI;;EACb,4BAAW;IACT,MAAM,EAAE,WAAW;;;EACvB,mEAAmE;IACjE,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,KAAuB;;;AH5ehC,oCAAsB;EQhC1B,YAAY;IAER,OAAO,EAAE,IAAI;;;;AR8Bb,oCAAsB;EQ5B1B,YAAY;IAER,OAAO,EAAE,IAAI;;;;AAEjB,WAAW;EACT,KAAK,EAAE,IAAI;;;AAEb,YAAY;EACV,KAAK,EAAE,KAAK;;;AAEd,WAAW;EACT,KAAK,EAAE,IAAI;;;AC4Cb,qEAAS;EACP,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;EACjB,WAAW,EAAE,IAAI;EACjB,aAAa,EZ/BuB,IAAI;;AYgCxC,6FAAO;EACL,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,8BAAkB;EACxB,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,MAAM;;AACpB,8JAAM;EACJ,SAAS,EZjByB,GAAG;EYkBrC,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,OAAO;EACjB,OAAO,EZnB2B,QAAmC;;AYoBvE,sOAA8B;EAC5B,iBAAiB,EAAE,CAAC;;AACtB,uFAAK;EACH,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;EAChB,cAAc,EAAE,MAAM;EACtB,WAAW,EAAE,MAAM;;AACnB,gGAAE;EACA,WAAW,EZnDqB,IAAI;EYoDpC,aAAa,EAAE,iBAA6B;;AAChD,8EAAE;EACA,gBAAgB,EAAE,WAAW;EAC7B,cAAc,EAAE,MAAM;;;AAE1B,oFAAc;EACZ,WAAW,EAAE,IAAuB;;AACpC,qHAAY;EACV,aAAa,EAAE,CAAC;;;AACpB,8HAA4B;EAC1B,KAAK,EAAE,EAAE;EACT,aAAa,EAAE,CAAC;;AAChB,4XAA0C;EACxC,MAAM,EAAE,CAAC;;;AAEb,mBAAmB;EACjB,KAAK,EZxD+B,IAAwB;EYyD5D,SAAS,EAAE,GAAG;;;AAChB,kBAAkB;EAChB,KAAK,EZ3D+B,IAAwB;EY4D5D,SAAS,EAAE,GAAG;;;AAIhB,6HAAyD;EACvD,gBAAgB,EZpCoB,OAAmB;;;AYsCzD,gBAAgB;EACd,gBAAgB,EZvCoB,OAAmB;;;;AY4CzD,mDAAsB;EACpB,MAAM,EAAE,iBAA6B;;AACrC,yDAAE;EACA,aAAa,EAAE,iBAA6B;EAC5C,WAAW,EAAE,iBAA6B;;AAC5C,qGAAwB;EACtB,mBAAmB,EAAE,CAAC;;;AAE1B,kBAAkB;EAChB,MAAM,EAAE,iBAA6B;;;AAGrC,0BAAE;EACA,aAAa,EAAE,iBAA6B;;AAC9C,gDAAwB;EACtB,mBAAmB,EAAE,CAAC;;;AAGxB,6CAAwB;EACtB,mBAAmB,EAAE,CAAC;;AACxB,gDAAM;EACJ,YAAY,EAAE,SAAS;EACvB,aAAa,EAAE,iBAA6B;;AAC9C,6CAAwB;EACtB,mBAAmB,EAAE,CAAC;;;;AAG1B,oBAAoB;EAClB,aAAa,EZhHuB,IAAI;EYiHxC,SAAS,EAAE,IAAI;EACf,QAAQ,EAAE,IAAI;;AACd,0BAAK;EACH,aAAa,EAAE,YAAY;;AAC3B,4DAAM;EACJ,WAAW,EAAE,MAAM;;;ACzIzB,CAAC;EACC,KAAK,EbkE+B,OAAW;EajE/C,eAAe,EAAE,IAAI;EACrB,MAAM,EAAE,OAAO;;AACf,OAAO;EACL,KAAK,EbgD6B,OAAwB;;Aa/C5D,SAAS;EACP,KAAK,Eb6C6B,OAAO;;;AanB7C,IAAI;EACF,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,MAAM;;;AAEpB,IAAI;EACF,WAAW,EX3CyB,2DAAM;EW4C1C,WAAW,EAAE,MAAM;EACnB,KAAK,EX/C+B,OAAW;EWgD/C,UAAU,EAAE,IAAI;EAChB,UAAU,EAAE,MAAM;EAClB,UAAU,EbnD0B,OAAO;;;AaqD7C,aAAa;EACX,UAAU,EAAE,IAAI;;;AAElB,eAAe;EACb,UAAU,EAAE,MAAM;;;AAEpB,cAAc;EACZ,UAAU,EAAE,KAAK;;;AAEnB,cAAc;EACZ,SAAS,EAAE,IAAI;;;AAEjB,eAAe;EACb,SAAS,EAAE,IAAI;;;AAEjB,qBAAqB;EACnB,SAAS,EAAE,GAAG;;;AAEhB,eAAe;EACb,eAAe,EAAE,YAAY;;;AAE/B,gBAAgB;EACd,KAAK,EAAE,kBAAkB;;;AAC3B,uBAAuB;EACrB,KAAK,EAAE,kBAAgC;;;AACzC,aAAa;EACX,KAAK,EAAE,kBAAgB;;;AACzB,oBAAoB;EAClB,KAAK,EAAE,kBAA8B;;;AACvC,gBAAgB;EACd,KAAK,EAAE,kBAAiB;;;AAC1B,uBAAuB;EACrB,KAAK,EAAE,kBAA+B;;;AACxC,eAAe;EACb,KAAK,EAAE,kBAAe;;;AACxB,sBAAsB;EACpB,KAAK,EAAE,kBAA6B;;;AACtC,gBAAgB;EACd,KAAK,EAAE,kBAAsB;;;AAC/B,uBAAuB;EACrB,KAAK,EAAE,kBAAoC;;;AAkB7C,uEAAyB;EACvB,UAAU,EAAE,CAAC;EACb,WAAW,EAAE,GAAG;EAChB,WAAW,EX9GyB,8DAAa;;;AWgHnD,CAAC;EACC,WAAW,Eb1FyB,IAAI;Ea2FxC,MAAM,EAAE,CAAC;EACT,SAAS,Eb/F2B,IAAI;EagGxC,aAAa,Eb7FuB,IAAI;;;Aa+F1C,EAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,2CAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,EAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,EAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,EAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,EAAE;EACA,SAAS,EAAE,IAAI;;;AAEjB,EAAE;EACA,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,CAAC;EACT,UAAU,EAAE,iBAA6B;EACzC,MAAM,EAAE,MAAmB;EAC3B,OAAO,EAAE,CAAC;;;AAEZ,wCAAI;EACF,WAAW,EAAE,MAAM;EACnB,SAAS,EAAE,IAAI;EACf,UAAU,EblG0B,IAAM;EamG1C,MAAM,EAAE,iBAAiC;EACzC,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,KAAK;EACd,WAAW,EXrJyB,oNAAQ;EWsJ5C,KAAK,Eb1H+B,OAAI;Ea2HxC,UAAU,EAAE,IAAI;;AAChB,2CAAY;EACV,SAAS,EAAE,GAAG;;;AAmClB,2FAAmB;EACjB,UAAU,EAAE,IAAI;EAChB,WAAW,EbzKyB,IAAI;Ea0KxC,aAAa,Eb1KuB,IAAI;;Aa2KxC,uGAAE;EACA,UAAU,EAAE,IAAI;EAChB,WAAW,Eb7KuB,IAAI;;Aa8KtC,2JAAY;EACV,aAAa,EAAE,CAAC;;AAClB,mHAAE;EACA,aAAa,EAAE,CAAC;;AAClB,mHAAE;EACA,UAAU,EAAE,MAAM;;AAClB,+HAAE;EACA,UAAU,EAAE,MAAM;;AACtB,+HAAK;EACH,UAAU,EAAE,OAAO;;;AAEzB,oFAAsB;EACpB,UAAU,EAAE,OAAO;EACnB,WAAW,Eb3LyB,IAAI;Ea4LxC,aAAa,Eb5LuB,IAAI;;Aa6LxC,gGAAE;EACA,UAAU,EAAE,OAAO;EACnB,WAAW,Eb/LuB,IAAI;;AagMtC,oJAAY;EACV,aAAa,EAAE,CAAC;;AAClB,4GAAE;EACA,aAAa,EAAE,CAAC;;AAChB,wHAAE;EACA,UAAU,EAAE,IAAI;;;ACrOxB,kBAAkB;EAChB,MAAM,EAAE,iBAA6B;EACrC,aAAa,EAAE,IAAI;EACnB,OAAO,Ed6B6B,IAAI;Ec5BxC,WAAW,EAAE,IAAqB;EAClC,WAAW,EAAE,GAAG;EAChB,UAAU,EdoD0B,IAAM;EcnD1C,QAAQ,EAAE,QAAQ;;AAClB,wBAAO;EACL,OAAO,EAAE,SAAS;EAClB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,UAAU,EdoDwB,OAAO;EcnDzC,KAAK,EAAE,KAAoB;EAC3B,OAAO,EAAE,QAA2C;;AACtD,2CAA0B;EACxB,MAAM,EAAE,iBAA6B;EACrC,aAAa,EdcqB,IAAI;;;AcZ1C,mHAAmC;EACjC,MAAM,EAAE,iBAA6B;EACrC,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,IAAI;EAChB,UAAU,EdkC0B,IAAM;EchC1C,MAAM,EAAE,YAAyB;;AACjC,mLAAuB;EACrB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;;;AAEb,+BAA+B;EAC7B,KAAK,EAAE,IAAI;;;AACb,cAAc;EACZ,YAAY,EAAE,iBAA0C;EACxD,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,SAA2C;EACpD,WAAW,EZ3ByB,oNAAQ;EY4B5C,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EdI+B,OAAwB;;;AcH9D,2BAA2B;EACzB,WAAW,EAAE,GAAG;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,SAA2C;EACpD,WAAW,EZnCyB,oNAAQ;EYoC5C,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,IAAI;EACd,KAAK,EZ7C+B,OAAW;;;AYiDjD,YAAY;EACV,gJAAgE;IAC9D,WAAW,EAAE,QAAQ;;;ACzDzB,IAAI;EACF,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,MAAM;EACf,OAAO,EAAE,KAAK;;;AAChB,EAAE;EACA,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,MAAM;;;AACpB,IAAI;EACF,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;;AAC3B,EAAE;EACA,WAAW,EAAE,IAAI;;;AACnB,EAAE;EACA,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,MAAM;;;AACpB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,MAAM;;;AACpB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;;;AACpB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;;AAC3B,MAAM;EACJ,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;;AAC3B,GAAG;EACD,UAAU,EAAE,MAAM;;;AACpB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;;AAC3B,MAAM;EACJ,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;;AAC3B,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,EAAE;EACA,KAAK,EAAE,OAAO;;;AAChB,EAAE;EACA,KAAK,EAAE,OAAO;;;AAChB,EAAE;EACA,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,MAAM;;;AACf,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,IAAI;;;AACnB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,WAAW,EAAE,IAAI;;;AACnB,EAAE;EACA,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,IAAI;;;AACb,GAAG;EACD,KAAK,EAAE,OAAO;;;AAChB,GAAG;EACD,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;;;ACjJ3B,kBAAkB;EAChB,OAAO,EAAE,YAAY;;AACrB,uCAAsB;EACpB,KAAK,EAAE,KAAK;;AACd,oBAAC;EACC,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,GAAG;;AACZ,gCAAa;EACX,YAAY,EAAE,CAAC;;AACnB,+FAAI;EACF,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;;AAChB,uHAAS;EACP,KAAK,EdR2B,OAAW;;;AcSjD,qBAAqB;EACnB,aAAa,EAAE,CAAC;EAChB,KAAK,EhB2B+B,OAAwB;EgB1B5D,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,YAAY;;;AbanB,oCAAsB;EaTxB,qBAAqB;IACnB,OAAO,EAAE,IAAI;;;EACf,uCAAuC;IACrC,OAAO,EAAE,IAAI;;;AAEjB,YAAY;EACV,uCAAuC;IACrC,OAAO,EAAE,IAAI;;;AC9BjB,SAAS;EACP,QAAQ,EAAE,KAAK;EACf,GAAG,ECAO,OAAO;;;ADGjB,gBAAO;EACL,eAAe,EAAE,IAAI;;;AAEzB,cAAc;E/B+FZ,KAAK,EAAE,CAAC;;AACR,2CAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,oBAAO;EACL,KAAK,EAAE,IAAI;;A+BnGb,oCAAM;EACJ,OAAO,EAAE,YAAY;;AACvB,uBAAQ;EACN,UAAU,EAAE,wBAAoB;;AAEhC,6BAAa;EACX,WAAW,EAAE,iBAAyB;;AACxC,8BAAc;EACZ,YAAY,EAAE,iBAAyB;;AAC3C,gBAAC;EACC,MAAM,EAAE,IAAmB;EAC3B,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAmB;EAChC,OAAO,EAAE,MAAiB;;;AAG5B,qDAAiB;EACf,MAAM,EAAE,IAAmB;EAC3B,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAmB;EAChC,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,CAAC;EAChB,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,SAAS;EACzB,SAAS,EAAE,GAAG;EACd,KAAK,EjBvB6B,IAAI;EiBwBtC,WAAW,EAAE,MAAM;;AAErB,oBAAE;EACA,aAAa,EAAE,CAAC;;AAEhB,+BAAY;EACV,UAAU,EAAE,iBAAyB;;AACvC,kCAAe;EACb,aAAa,EAAE,iBAAyB;;AAC1C,4BAAS;EACP,UAAU,EAAE,OAAsC;;AAClD,8BAAC;EACC,KAAK,EjBNyB,IAAwB;EiBOtD,YAAY,EAAE,iBAAgD;EAC9D,OAAO,EAAE,gBAAyB;;AAClC,oCAAO;EACL,UAAU,EAAE,OAAsC;;AACxD,qGAAI;EACF,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;EACd,YAAY,EAAE,CAAC;EACf,aAAa,EAAE,CAAC;;AAElB,wCAAmB;EACjB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,MAAM;EAGnB,SAAS,EAAE,KAAI;EACf,WAAW,EAAE,KAAK;EAClB,KAAK,EAAE,OAAyB;;AAGpC,2DAAuB;EACrB,KAAK,EfnE6B,OAAW;EeoE7C,OAAO,EAAE,gBAAmB;EAC5B,WAAW,EAAE,IAAI;EACjB,QAAQ,EAAE,QAAQ;EAClB,UAAU,EjBtEwB,OAAyB;EiBuE3D,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,iBAAgD;EAC/D,UAAU,EAAE,iBAAgD;EAC5D,YAAY,EAAE,YAAY;;AAE1B,uEAAO;EACL,UAAU,EjB7EsB,OAAyB;;AiB8EzD,+GAAmB;EACjB,KAAK,EjB3CyB,IAAwB;;AiB4C1D,mGAAmB;EAGjB,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,KAAI;EACf,WAAW,EAAE,KAAK;EAClB,KAAK,EAAE,OAAyB;;AAIlC,sHAAI;EACF,OAAO,EAAE,IAAI;;AACf,sIAAc;EACZ,OAAO,EAAE,KAAK;;AAGd,2CAAG;EACD,UAAU,EAAE,OAAsC;EAClD,OAAO,EAAE,gBAAyB;;AACpC,yDAAiB;EACf,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,OAAsC;EAClD,OAAO,EAAE,gBAAyB;;AACtC,2DAA2B;EACzB,KAAK,EjBpE2B,IAAwB;;AiBqE1D,mDAAmB;EACjB,KAAK,EAAE,OAAsC;;AACjD,+BAAa;EACX,SAAS,EAAE,KAAI;;AAEb,2CAAG;EACD,UAAU,EAAE,OAAsC;EAClD,OAAO,EAAE,gBAAyB;;AACpC,yDAAiB;EACf,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,OAAsC;EAClD,OAAO,EAAE,gBAAyB;EAClC,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,IAAI;;AACvB,2DAA2B;EACzB,KAAK,EjBpF2B,IAAwB;;AiBqF1D,mDAAmB;EACjB,KAAK,EAAE,OAAsC;;AACjD,+BAAa;EACX,SAAS,EAAE,KAAI;;AAEjB,+BAAa;EACX,OAAO,EAAE,KAAK;;AAChB,uBAAK;EACH,aAAa,EAAE,CAAC;EAChB,OAAO,EAAE,IAAI;;AAEb,kCAAK;EACH,OAAO,EAAE,KAAK;;AAClB,4BAAU;EACR,aAAa,EAAE,CAAC;EAChB,KAAK,EjBnG6B,OAAwB;EiBoG1D,WAAW,EAAE,MAAM;;AACrB,mBAAC;EACC,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,gBAAmB;EAC5B,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,GAAG;EACd,KAAK,EjB5G6B,OAAwB;;AiB6G1D,yBAAO;EACL,gBAAgB,EAAE,OAAoC;EACtD,MAAM,EAAE,OAAO;;AACf,6CAAmB;EACjB,KAAK,EjBjHyB,OAAwB;;AiBkH1D,0BAAQ;EACN,gBAAgB,EjB/EgB,OAAW;EiBgF3C,MAAM,EAAE,OAAO;EACf,KAAK,EjBvG2B,IAAM;;AiBwGtC,8CAAmB;EACjB,KAAK,EjBzGyB,IAAM;;;AiB2G5C,mBAAmB;EACjB,OAAO,EjBhF6B,GAAG;EiBiFvC,gBAAgB,EjBvFoB,OAAW;EiBwF/C,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,OAAW;EACpB,OAAO,EAAE,KAAK;EACd,KAAK,EjBpK+B,OAAyB;EiBqK7D,aAAa,EAAE,OAAW;;AAC1B,oCAAgB;EACd,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,QAAQ;EACjB,YAAY,EAAE,OAAuB;;AACvC,uBAAG;EACD,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,sBAA0B;EAClC,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,gBAAgB,EjBvGkB,OAAW;EiBwG7C,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,IAAI;;AACrB,6DAAqB;EACnB,KAAK,EjBpL6B,OAAyB;EiBqL3D,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,OAA2C;EACpD,aAAa,EAAE,OAAW;;AAE1B,yEAAO;EACL,UAAU,EAAE,wBAAoB;;AAClC,+EAAQ;EACN,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,MAAM;EACd,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,CAAC;EAChB,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,WAAa;;AAEzB,yFAAQ;EACN,UAAU,EAAE,MAAM;;AACxB,iCAAa;EACX,UAAU,EAAE,SAAkB;EAC9B,aAAa,EAAE,OAAW;EAC1B,WAAW,EAAE,MAAM;EACnB,KAAK,EAAE,wBAAoB;;;AAI7B,gCAAM;EACJ,KAAK,EjBxI6B,OAAW;;AiByI/C,2BAAC;EACC,KAAK,EjB9K6B,OAAwB;;AiB+K1D,iCAAO;EACL,gBAAgB,EjB5IgB,OAAW;EiB6I3C,KAAK,EjBnK2B,IAAM;;;AiBqK5C,gBAAgB;EjCtNR,kBAAoB,EAAE,gBAAM;EAK5B,eAAiB,EAAE,gBAAM;EAezB,UAAY,EAAE,gBAAM;EiCoM1B,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,CAAC;;AACV,4BAAa;EACX,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,CAAC;;AACZ,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,KAAK;EACX,OAAO,EAAE,CAAC;;AACZ,2BAAY;EACV,KAAK,EAAE,KAAK;EACZ,IAAI,EAAE,IAAI;EACV,OAAO,EAAE,CAAC;;;AAGd,gBAAgB;EACd,UAAU,EAAE,qBAAuC;EACnD,gBAAgB,EAAE,2uCAA2uC;EAC7vC,eAAe,EAAE,SAAsB;;;AAEzC,gBAAgB;EACd,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;;;AAEd,YAAY;EACV,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,cAAc,EAAE,GAAG;EACnB,KAAK,EjBlL+B,KAAK;EiBmLzC,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,IAAI;EAChB,UAAU,EjBxLsB,OAAe;EiByL/C,OAAO,EjBlL6B,GAAG;;;AiBoLzC,WAAW;EACT,OAAO,EAAE,IAAI;EACb,UAAU,EjB5L0B,OAAW;EiB6L/C,KAAK,EjBnN+B,IAAM;EiBoN1C,OAAO,EAAE,gBAAuB;EAChC,QAAQ,EAAE,QAAQ;EAClB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;E/B3Kf,KAAK,EAAE,CAAC;;AACR,qCAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,iBAAO;EACL,KAAK,EAAE,IAAI;;A+BuKb,aAAC;EACC,KAAK,EjB3N6B,IAAM;EiB4NxC,WAAW,EAAE,IAAI;;AAEnB,eAAG;EACD,YAAY,EAAE,IAAqB;EACnC,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,gBAAgB,EjB5MkB,OAAW;EiB6M7C,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,IAAI;;AACrB,aAAC;EACC,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,OAAO;;;AAEnB,oBAAoB;EAClB,WAAW,EjBpNyB,KAAK;EiBqNzC,UAAU,EjB/R0B,OAAyB;EiBgS7D,UAAU,EAAE,IAAI;;;AAElB,eAAe;EACb,OAAO,EAAE,eAAmB;EAC5B,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;;;AAEd,aAAa;EACX,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,kBAAc;EAC1B,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,GAAkB;;AAC3B,gBAAI;EACF,OAAO,EAAE,KAAK;;;AAClB,MAAM;EACJ,KAAK,EjB1S+B,IAAI;;AiB2SxC,QAAC;EACC,aAAa,EAAE,IAAqB;;AACtC,+FAAgB;EACd,OAAO,EAAE,GAAG;EACZ,WAAW,EflTuB,oNAAQ;EemT1C,SAAS,EAAE,GAAG;EACd,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EjBnT6B,IAAI;;;AiBqT1C,mBAAmB;E/B5NjB,KAAK,EAAE,CAAC;;AACR,qDAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,yBAAO;EACL,KAAK,EAAE,IAAI;;;A+B0Nb,0BAAU;EACR,aAAa,EjBxSqB,IAAI;EiByStC,aAAa,EAAE,iBAA6B;EAC5C,cAAc,EjB1SoB,IAAI;;AiB2SxC,sCAAsB;EACpB,UAAU,EAAE,iBAA6B;EACzC,WAAW,EjB7SuB,IAAI;;AiB8SxC,4BAAY;EACV,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,IAAqB;EACpC,OAAO,EAAE,YAAY;;AACvB,wBAAQ;EACN,KAAK,EjBxS6B,IAAwB;EiByS1D,SAAS,EAAE,GAAG;;;AdpTd,oCAAsB;EcwTxB,gBAAgB;IACd,UAAU,EjBlVwB,OAAyB;;;EiBmV7D,WAAW;IACT,OAAO,EAAE,KAAK;;;EAChB,YAAY;IAER,IAAI,EAAE,MAAmB;;EAG3B,kBAAO;IACL,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,CAAC;;;EACX,oBAAoB;IAClB,WAAW,EAAE,CAAC;;EACd,oCAAe;IACb,OAAO,ECrWD,OAAO;;EDsWf,0BAAO;IACL,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,MAAM;;;Ad9UlB,qCAAsB;EciVxB,oBAAoB;IAClB,UAAU,EAAE,mBAAe;;;EAC7B,eAAe;IACb,MAAM,EAAE,CAAC;IACT,UAAU,EjB9WwB,OAAyB;;;AiBgX/D,YAAY;EACV,mCAAmC;IACjC,OAAO,EAAE,IAAI;;;EACf,oBAAoB;IAClB,WAAW,EAAE,CAAC;;;AE3XlB,aAAa;EACX,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EnB6E+B,KAAK;EmB5EzC,KAAK,EnBE+B,OAAyB;EmBD7D,UAAU,EAAE,OAAkC;EAC9C,UAAU,EAAE,kBAAiC;EAC7C,WAAW,EjBAyB,2DAAM;EiBC1C,OAAO,EnB+E6B,GAAG;;AmB9EvC,eAAC;EACC,KAAK,EnBqE6B,OAAW;EmBpE7C,eAAe,EAAE,IAAI;;AACvB,8BAAgB;EACd,OAAO,EAAE,IAAI;;AACf,kCAAoB;EAClB,OAAO,EAAE,IAAqB;EAC9B,gBAAgB,EAAE,OAAkC;EACpD,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,OAAO;EACf,KAAK,EnBiD6B,OAAM;EdgC1C,KAAK,EAAE,CAAC;;AACR,mFAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,wCAAO;EACL,KAAK,EAAE,IAAI;;AiCrFX,gsDAAG;EACD,KAAK,EnBlB2B,OAAyB;;AmBmB3D,0FAAQ;EACN,KAAK,EAAE,IAAI;;AACb,6CAAU;EACR,KAAK,EAAE,IAAI;;AACb,kDAAiB;EACf,gBAAgB,EnBQgB,OAAI;EmBPpC,KAAK,EnB0B2B,IAAM;;AmBzBxC,yDAAwB;EACtB,gBAAgB,EnBXgB,OAAO;EmBYvC,KAAK,EnBzB2B,IAAI;;AmB0BxC,0CAA8B;EAC5B,OAAO,EAAE,KAAK;;AAChB,iCAAmB;EACjB,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,IAAqB;EAC9B,KAAK,EnBE6B,IAAwB;EmBD1D,OAAO,EAAE,IAAI;;AACb,oCAAE;EACA,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,MAAM;EACd,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,iBAA6C;;AAC3D,oCAAE;EACA,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,CAAC;;AACT,sCAAC;EACC,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,GAAqB;EAC9B,KAAK,EnBjDyB,OAAyB;;AmBkD7D,uBAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,IAAI;EACZ,SAAS,EnBkByB,KAAK;;AmBjBvC,kCAAU;EACR,KAAK,EAAE,IAAI;;AACb,oEAAQ;EACN,KAAK,EAAE,IAAI;;AACb,qDAA+B;EAC7B,UAAU,EAAE,KAAK;;AACjB,gIAAQ;EACN,KAAK,EAAE,IAAI;;AACb,gEAAU;EACR,KAAK,EAAE,IAAI;;AACf,4CAAoB;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAuB;EAChC,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,MAAM;;;AhBhDpB,oCAAsB;EgBmDxB,aAAa;IACX,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,IAAI;;EACb,mBAAO;IACL,OAAO,EAAE,KAAK;;;EAClB,GAAG;IACD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;;;ACzEd,gBAAG;EACD,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,eAAe;;AAEzB,uBAAU;EACR,aAAa,EpBUqB,IAAI;;AoBTtC,iCAAS;EACP,UAAU,EAAE,MAAM;;AAEtB,oCAAuB;EACrB,UAAU,EAAE,MAAM;;AAGpB,4DAAoC;EAClC,aAAa,EpBCqB,IAAI;;AoBUxC,uBAAU;EACR,WAAW,EpBXuB,IAAI;EoBYtC,WAAW,EpBZuB,IAAI;EoBatC,aAAa,EpBbqB,IAAI;;AoBmBtC,4TAAK;EACH,aAAa,EAAE,CAAC;;AAKlB,qCAAQ;EACN,YAAY,EAAE,GAAG;;AAUrB,8BAAiB;EACf,YAAY,EAAE,kBAAc;;AAC5B,oEAAM;EACJ,UAAU,EAAE,sBAAsB;EAClC,YAAY,EAAE,6BAAyB;;AAG3C,2EAAiD;EAC/C,UAAU,EAAE,WAAW;;AACzB,2EAAiD;EAC/C,UAAU,EAAE,WAAW;;AAGzB,sDAA4B;EAC1B,aAAa,EAAE,IAAqB;;AACtC,wBAAW;EACT,WAAW,EpBpDuB,IAAI;;AoBuDxC,yBAAY;EACV,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,IAAqB;;AACtC,yBAAY;EACV,KAAK,ElBrF6B,OAAW;;AkBsF/C,yBAAY;EACV,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,iBAA2C;;AACrD,wBAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,iBAA2C;;AACrD,0BAAa;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;;AAMd,qSAAW;EACT,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;;AAEf,2VAAO;EACL,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,GAAO;EAChB,WAAW,EAAE,WAAW;EACxB,OAAO,EAAE,YAAY;;AACzB,2VAAmB;EACjB,OAAO,EAAE,YAAY;;AAGzB,qBAAQ;EACN,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,aAAuC;EAC/C,OAAO,EpB7F2B,IAAI;EoB8FtC,UAAU,EpBtDwB,OAAmB;EoBuDrD,MAAM,EAAE,iBAA6B;;AAErC,2EAAS;EACP,SAAS,EAAE,GAAG;;AAChB,2BAAK;EACH,aAAa,EAAE,CAAC;;AAClB,oCAAc;EACZ,OAAO,EAAE,KAAK;EACd,WAAW,ElB9HqB,8DAAa;EkB+H7C,WAAW,EAAE,IAAI;EACjB,UAAU,EpBrFsB,OAAmB;EoBsFnD,OAAO,EAAE,QAA2C;EACpD,MAAM,EAAE,KAAkB;EAC1B,aAAa,EpB5GmB,IAAI;EoB6GpC,SAAS,EAAE,IAAI;;AAEnB,yBAAY;EACV,UAAU,EpBzHwB,OAAO;EoB0HzC,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAuB;;AAGlC,kEAAwC;EACtC,cAAc,EAAE,KAAK;EACrB,SAAS,EAAE,GAAG;;AAIhB,0EAAgD;EAC9C,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EpBjJ6B,IAAI;;AoBkJtC,kKAAM;EACJ,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,sBAAsB;EACxC,WAAW,EAAE,MAAM;;AACrB,4FAAQ;EACN,YAAY,EAAE,CAAC;EACf,aAAa,EAAE,CAAC;EAChB,cAAc,EAAE,GAAG;;AACrB,sKAAI;EACF,KAAK,EpB5J2B,IAAI;;AoBmKxC,6BAAgB;EAEd,MAAM,EAAE,IAAI;;AACZ,gCAAE;EACA,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,GAAG;;AAClB,yCAAW;EACT,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,GAAG;;AACjB,yCAAW;EACT,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,MAAM;;AACrB,yCAAW;EACT,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,CAAC;;AAGnB,mDAAQ;EAEN,KAAK,EpB1L6B,IAAI;;AoB2LtC,6HAAO;EACL,SAAS,EAAE,eAAe;EAC1B,WAAW,EAAE,MAAM;;AAErB,2EAAS;EACP,KAAK,EpBnK2B,OAAI;;AoBoKtC,6HAAW;EACT,WAAW,EAAE,IAAI;EACjB,KAAK,ElBvM2B,OAAW;;AkByM/C,yDAAY;EACV,KAAK,EpBhI6B,OAAW;;AoBiI/C,eAAE;EACA,aAAa,EpBlLqB,IAAI;;AoBmLtC,kBAAE;EACA,WAAW,EAAE,IAAI;;AAEnB,gFAAgB;EACd,aAAa,EAAE,eAAgC;;AAEjD,kBAAE;EACA,MAAM,EAAE,aAA4C;;AAMxD,8BAAiB;EACf,aAAa,EpBjMqB,IAAI;;AoBmMtC,iCAAE;EACA,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,KAAuB;EAC/B,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,OAAmB;EAC/B,KAAK,EpBzJ2B,OAAW;EoB0J3C,UAAU,EAAE,iBAA6B;EACzC,OAAO,EAAE,GAAqB;EAC9B,QAAQ,EAAE,QAAQ;;AAClB,wCAAQ;EACN,KAAK,EAAE,OAAmB;;AAC5B,6CAAW;EACT,KAAK,ElB1OyB,OAAW;EkB2OzC,SAAS,EAAE,eAAe;;AAE9B,oCAAK;EACH,aAAa,EAAE,GAAqB;EACpC,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,iBAAuB;EACpC,UAAU,EAAE,OAAa;EACzB,KAAK,EpB7M2B,IAAwB;;AoB8MxD,gDAAW;EACT,KAAK,ElBpPyB,OAAW;EkBqPzC,SAAS,EAAE,eAAe;;AAC9B,6CAAc;EACZ,UAAU,EAAE,CAAC;;AAEf,yGAAQ;EACN,WAAW,EAAE,IAAI;;AACjB,yRAA2B;EACzB,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,CAAC;EACV,SAAS,EAAE,eAAe;;AAC5B,oIAAU;EACR,WAAW,EAAE,IAAI;;AAErB,wCAAS;EACP,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,KAAK;EACd,KAAK,EpBlQ2B,IAAI;EoBmQpC,WAAW,EAAE,IAAI;;AACnB,wCAAS;EACP,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,GAAG;;AAEtB,wDAA8B;EAC5B,OAAO,EAAE,YAAY;EACrB,KAAK,EpB7M6B,OAAM;EoB8MxC,SAAS,EAAE,GAAG;EACd,YAAY,EpBtPsB,IAAI;;AoBuPxC,2BAAc;EACZ,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,KAAK;;AACd,qBAAQ;EACN,aAAa,EAAE,IAAI;EACnB,WAAW,EAAE,IAAI;;AAEnB,oDAAa;EACX,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,OAAO;EAChB,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,OAAO;EAClB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO;EACf,WAAW,EAAE,OAAO;;AAIlB,oGAAQ;EACN,YAAY,EAAE,GAAG;;;AjB1QrB,oCAAsB;EiB+QtB,qBAAQ;IACN,KAAK,EAAE,IAAI;;;AChTjB,wBAAwB;EACtB,KAAK,EnBK+B,OAAW;;;AmBHjD,KAAK;EACH,UAAU,EAAE,MAAM;;;;ECHlB,WAAW,EAAE,aAAa;EAC1B,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,sEAAoB;;;EAGzB,WAAW,EAAE,aAAa;EAC1B,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,2GAAyB;;;EAG9B,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,+FAAqB;;;EAG1B,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,sFAAkB;;;EAGvB,WAAW,EAAE,aAAa;EAC1B,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,kHAA4B;;;EAGjC,WAAW,EAAE,aAAa;EAC1B,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,yGAAyB", -"sources": ["../../../bower_components/neat/app/assets/stylesheets/grid/_grid.scss","../../../bower_components/bourbon/dist/addons/_prefixer.scss","../../../bower_components/wyrm/sass/wyrm_core/_reset.sass","../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/font-awesome/scss/_path.scss","../../../bower_components/font-awesome/scss/_core.scss","../../../bower_components/font-awesome/scss/_larger.scss","../../../bower_components/font-awesome/scss/_fixed-width.scss","../../../bower_components/font-awesome/scss/_list.scss","../../../bower_components/font-awesome/scss/_variables.scss","../../../bower_components/font-awesome/scss/_bordered-pulled.scss","../../../bower_components/font-awesome/scss/_spinning.scss","../../../bower_components/font-awesome/scss/_rotated-flipped.scss","../../../bower_components/font-awesome/scss/_mixins.scss","../../../bower_components/font-awesome/scss/_stacked.scss","../../../bower_components/font-awesome/scss/_icons.scss","../../../bower_components/wyrm/sass/wyrm_core/_font_icon_defaults.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../bower_components/wyrm/sass/wyrm_core/_alert.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss","../../../bower_components/wyrm/sass/wyrm_core/_button.sass","../../../bower_components/wyrm/sass/wyrm_core/_dropdown.sass","../../../bower_components/wyrm/sass/wyrm_core/_form.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_outer-container.scss","../../../bower_components/neat/app/assets/stylesheets/settings/_grid.scss","../../../bower_components/neat/app/assets/stylesheets/grid/_span-columns.scss","../../../bower_components/wyrm/sass/wyrm_core/_neat_extra.sass","../../../bower_components/wyrm/sass/wyrm_core/_generic.sass","../../../bower_components/wyrm/sass/wyrm_core/_table.sass","../../../bower_components/wyrm/sass/wyrm_core/_type.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments_light.sass","../../../sass/_theme_breadcrumbs.sass","../../../sass/_theme_layout.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_private.scss","../../../sass/_theme_badge.sass","../../../sass/_theme_rst.sass","../../../sass/_theme_mathjax.sass","../../../sass/_theme_font_local.sass"], -"names": [], -"file": "theme.css" -} diff --git a/examples/HEAT/README b/examples/HEAT/README new file mode 100644 index 0000000000..b827838091 --- /dev/null +++ b/examples/HEAT/README @@ -0,0 +1,40 @@ +This directory contains 4 input scripts for carrying out NEMD +simulations of thermal gradients for a Lennard-Jones fluid and SPC/E +water using the HEX/a (fix heat) and eHEX/a (fix ehex) algorithms. + +All input scripts are part of the supplementary (open access) material +supporting the publication of Wirnsberger et al. [J. Chem. Phys. 143, +124104 (2015)] and allow one to reproduce the key results reported in +that paper. The full article is available for download under +http://dx.doi.org/10.1063/1.4931597 or http://arxiv.org/pdf/1507.07081 +and the supplementary material is available under +https://www.repository.cam.ac.uk/handle/1810/250539. + +Each input script in.X produces two output files: +================================================== + +-> The file out.TX contains the temperature profile. Plotting coloumn + 4 against column 2 yields the results shown in Fig. 5 + (Lennard-Jones) or Fig. 6 (SPC/E). + +-> The file out.EX contains the time evolution of the total + energy. The difference between the initial and final values of the + total energy in the second column corresponds to a single point in + Fig. 2 (Lennard-Jones) or Fig. 3 (SPC/E). + +The input files data.lj and data.spce contain input configurations +which were previously prepared in a non-equilibrium steady-state +(NESS). + +For the Lennard-Jones system, the box contains 2000 atoms at a density +of rho*=0.8444 (reduced units). The equilibrium temperature was +T*=0.72 in reduced units. After switching on the thermostat, a +temperature gradient of about -0.02 was generated between the +reservoirs in the reference box. The SPC/E configuration contains 1024 +molecules at a density of 0.95 g/cm^3. The equilibrium temperature was +about 400 K, and after switching on the thermostat a temperature +gradient of about -4.9 K/‎Å was generated. + +More details can be found in the publication. + + diff --git a/examples/KAPPA/README b/examples/KAPPA/README index ba4938c291..ee70766d94 100644 --- a/examples/KAPPA/README +++ b/examples/KAPPA/README @@ -1,5 +1,5 @@ -This directory has 4 scripts that compute the thermal conductivity -(kappa) of a Lennard-Jones fluid using 4 different methods. See the +This directory has 5 scripts that compute the thermal conductivity +(kappa) of a Lennard-Jones fluid using 5 different methods. See the discussion in Section 6.20 of the manual for an overview of the methods and pointers to doc pages for the commands which implement them. Citations for the various methods can also be found in the @@ -13,11 +13,12 @@ These scripts could easily be adapted to work with solids as well. ------------- -These are the 4 methods for computing thermal conductivity. The first -3 are non-equilibrium methods; the last is an equilibrium method. +These are the 5 methods for computing thermal conductivity. The first +4 are non-equilibrium methods; the last is an equilibrium method. in.langevin = thermostat 2 regions at different temperatures via fix langevin in.heat = add/subtract energy to 2 regions via fix heat +in.ehex = add/subtract energy to 2 regions via fix ehex in.mp = use fix thermal/conductivity and the Muller-Plathe method in.heatflux = use compute heat/flux and the Green-Kubo method @@ -64,12 +65,24 @@ dQ = (100*100) / 100 / 18.82^2 / 2 100 = 20,000 steps at 0.005 tau timestep = run time in tau xy box area = 18.82^2 divide by 2 since energy flux goes in 2 directions due to periodic z -dTemp = 0.783 from log file for average Temp difference between 2 regions +dTemp = 0.748 from log file for average Temp difference between 2 regions dZ = 18.82 -Kappa = 3.39 +Kappa = 3.55 -(3) in.mp +(3) in.ehex + +dQ = (100*100) / 100 / 18.82^2 / 2 + 100*100 = 100 (time in tau) * 100 (energy delta specified in fix heat) + 100 = 20,000 steps at 0.005 tau timestep = run time in tau + xy box area = 18.82^2 + divide by 2 since energy flux goes in 2 directions due to periodic z +dTemp = 0.770 from log file for average Temp difference between 2 regions +dZ = 18.82 + +Kappa = 3.45 + +(4) in.mp dQ = 15087 / 100 / 18.82^2 / 2 15087 = cummulative delta energy, tallied by fix thermal/conductivity @@ -81,7 +94,7 @@ dZ = 18.82 Kappa = 3.45 -(4) in.heatflux +(5) in.heatflux kappa is computed directly within the script, by performing a time integration of the formulas discussed on the compute heat/flux doc diff --git a/examples/KAPPA/in.ehex b/examples/KAPPA/in.ehex new file mode 100644 index 0000000000..e714e057c5 --- /dev/null +++ b/examples/KAPPA/in.ehex @@ -0,0 +1,76 @@ +# sample LAMMPS input script for thermal conductivity of liquid LJ +# use fix ehex to add/subtract energy from 2 regions + +# settings + +variable x equal 10 +variable y equal 10 +variable z equal 20 + +variable rho equal 0.6 +variable t equal 1.35 +variable rc equal 2.5 + +#variable rho equal 0.85 +#variable t equal 0.7 +#variable rc equal 3.0 + +# setup problem + +units lj +atom_style atomic + +lattice fcc ${rho} +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create $t 87287 + +pair_style lj/cut ${rc} +pair_coeff 1 1 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 + +# heat layers + +region hot block INF INF INF INF 0 1 +region cold block INF INF INF INF 10 11 +compute Thot all temp/region hot +compute Tcold all temp/region cold + +# 1st equilibration run + +fix 1 all nvt temp $t $t 0.5 +thermo 100 +run 1000 + +velocity all scale $t + +unfix 1 + +# 2nd equilibration run + +fix 1 all nve +fix hot all ehex 1 100.0 region hot +fix cold all ehex 1 -100.0 region cold + +thermo_style custom step temp c_Thot c_Tcold +thermo 1000 +run 10000 + +# thermal conductivity calculation + +compute ke all ke/atom +variable temp atom c_ke/1.5 + +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.ehex + +variable tdiff equal f_2[11][3]-f_2[1][3] +fix ave all ave/time 1 1 1000 v_tdiff ave running start 13000 +thermo_style custom step temp c_Thot c_Tcold v_tdiff f_ave + +run 20000 diff --git a/examples/KAPPA/in.heat b/examples/KAPPA/in.heat index b9eb6d66a7..d0b430b272 100644 --- a/examples/KAPPA/in.heat +++ b/examples/KAPPA/in.heat @@ -59,15 +59,15 @@ fix cold all heat 1 -100.0 region cold thermo_style custom step temp c_Thot c_Tcold thermo 1000 -run 10000 +run 10000 # thermal conductivity calculation compute ke all ke/atom variable temp atom c_ke/1.5 -fix 2 all ave/spatial 10 100 1000 z lower 0.05 v_temp & - file profile.heat units reduced +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.heat variable tdiff equal f_2[11][3]-f_2[1][3] fix ave all ave/time 1 1 1000 v_tdiff ave running start 13000 diff --git a/examples/KAPPA/in.langevin b/examples/KAPPA/in.langevin index 267b811de8..5c83248af6 100644 --- a/examples/KAPPA/in.langevin +++ b/examples/KAPPA/in.langevin @@ -82,7 +82,7 @@ fix_modify cold temp Tcold fix ave all ave/time 10 100 1000 v_tdiff ave running thermo_style custom step temp c_Thot c_Tcold f_hot f_cold v_tdiff f_ave -fix 2 all ave/spatial 10 100 1000 z lower 0.05 v_temp & - file profile.langevin units reduced +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.langevin run 20000 diff --git a/examples/KAPPA/in.mp b/examples/KAPPA/in.mp index ba19765844..10ddd266d1 100644 --- a/examples/KAPPA/in.mp +++ b/examples/KAPPA/in.mp @@ -50,8 +50,10 @@ compute ke all ke/atom variable temp atom c_ke/1.5 fix 1 all nve -fix 2 all ave/spatial 10 100 1000 z lower 0.05 v_temp & - file profile.mp units reduced + +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.mp + fix 3 all thermal/conductivity 10 z 20 variable tdiff equal f_2[11][3]-f_2[1][3] diff --git a/examples/KAPPA/log.ehex.7Jun16 b/examples/KAPPA/log.ehex.7Jun16 new file mode 100644 index 0000000000..32dea08538 --- /dev/null +++ b/examples/KAPPA/log.ehex.7Jun16 @@ -0,0 +1,225 @@ +LAMMPS (7 Jun 2016) +# sample LAMMPS input script for thermal conductivity of liquid LJ +# use fix ehex to add/subtract energy from 2 regions + +# settings + +variable x equal 10 +variable y equal 10 +variable z equal 20 + +variable rho equal 0.6 +variable t equal 1.35 +variable rc equal 2.5 + +#variable rho equal 0.85 +#variable t equal 0.7 +#variable rc equal 3.0 + +# setup problem + +units lj +atom_style atomic + +lattice fcc ${rho} +lattice fcc 0.6 +Lattice spacing in x,y,z = 1.88207 1.88207 1.88207 +region box block 0 $x 0 $y 0 $z +region box block 0 10 0 $y 0 $z +region box block 0 10 0 10 0 $z +region box block 0 10 0 10 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (18.8207 18.8207 37.6414) + 2 by 1 by 4 MPI processor grid +create_atoms 1 box +Created 8000 atoms +mass 1 1.0 + +velocity all create $t 87287 +velocity all create 1.35 87287 + +pair_style lj/cut ${rc} +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 + +# heat layers + +region hot block INF INF INF INF 0 1 +region cold block INF INF INF INF 10 11 +compute Thot all temp/region hot +compute Tcold all temp/region cold + +# 1st equilibration run + +fix 1 all nvt temp $t $t 0.5 +fix 1 all nvt temp 1.35 $t 0.5 +fix 1 all nvt temp 1.35 1.35 0.5 +thermo 100 +run 1000 +Neighbor list info ... + 1 neighbor list requests + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4 -> bins = 14 14 27 +Memory usage per processor = 2.55761 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.35 -4.1241917 0 -2.0994448 -3.1961612 + 100 1.1819832 -3.7640881 0 -1.991335 0.53985757 + 200 1.2578365 -3.7395333 0 -1.8530144 0.69591862 + 300 1.3282971 -3.7215427 0 -1.7293461 0.79036065 + 400 1.3714367 -3.7043826 0 -1.6474847 0.85873226 + 500 1.3590952 -3.6707735 0 -1.6323855 0.99602024 + 600 1.3575117 -3.7118244 0 -1.6758114 0.81454305 + 700 1.3284444 -3.7075488 0 -1.7151313 0.81136596 + 800 1.3419995 -3.7155648 0 -1.7028172 0.82925676 + 900 1.3562214 -3.6965609 0 -1.6624831 0.88908117 + 1000 1.3732017 -3.7100044 0 -1.6504594 0.83982701 +Loop time of 0.878884 on 8 procs for 1000 steps with 8000 atoms + +Performance: 491532.534 tau/day, 1137.807 timesteps/s +99.3% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.48108 | 0.4925 | 0.50422 | 1.0 | 56.04 +Neigh | 0.23355 | 0.23565 | 0.23888 | 0.4 | 26.81 +Comm | 0.088565 | 0.10044 | 0.11391 | 2.7 | 11.43 +Output | 0.00029421 | 0.00031444 | 0.00041795 | 0.2 | 0.04 +Modify | 0.027427 | 0.032625 | 0.035225 | 1.6 | 3.71 +Other | | 0.01735 | | | 1.97 + +Nlocal: 1000 ave 1020 max 982 min +Histogram: 1 0 2 1 0 1 1 1 0 1 +Nghost: 2299.5 ave 2331 max 2268 min +Histogram: 1 1 1 1 0 0 0 3 0 1 +Neighs: 27122 ave 28382 max 26337 min +Histogram: 2 0 2 1 1 0 0 1 0 1 + +Total # of neighbors = 216976 +Ave neighs/atom = 27.122 +Neighbor list builds = 162 +Dangerous builds = 0 + +velocity all scale $t +velocity all scale 1.35 + +unfix 1 + +# 2nd equilibration run + +fix 1 all nve +fix hot all ehex 1 100.0 region hot +fix cold all ehex 1 -100.0 region cold + +thermo_style custom step temp c_Thot c_Tcold +thermo 1000 +run 10000 +Memory usage per processor = 2.80761 Mbytes +Step Temp Thot Tcold + 1000 1.35 1.431295 1.2955644 + 2000 1.3537291 1.6418772 1.1875127 + 3000 1.3615152 1.6451299 1.1769094 + 4000 1.3612129 1.5281727 1.2022419 + 5000 1.3552182 1.6672955 1.2212864 + 6000 1.3643442 1.6072213 1.2390567 + 7000 1.3665773 1.6909819 1.1466611 + 8000 1.375741 1.6144274 1.1691231 + 9000 1.3701136 1.8238424 1.136342 + 10000 1.3563004 1.8059065 1.1547129 + 11000 1.3794051 1.692299 1.0515688 +Loop time of 10.292 on 8 procs for 10000 steps with 8000 atoms + +Performance: 419743.444 tau/day, 971.628 timesteps/s +99.5% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.1797 | 4.902 | 5.5136 | 25.3 | 47.63 +Neigh | 2.1913 | 2.4616 | 2.6938 | 14.2 | 23.92 +Comm | 0.87831 | 1.64 | 2.611 | 56.5 | 15.94 +Output | 0.00043011 | 0.00063166 | 0.00075626 | 0.5 | 0.01 +Modify | 0.78531 | 0.92487 | 1.0647 | 10.6 | 8.99 +Other | | 0.3628 | | | 3.53 + +Nlocal: 1000 ave 1105 max 883 min +Histogram: 1 1 2 0 0 0 0 0 2 2 +Nghost: 2319.38 ave 2502 max 2114 min +Histogram: 1 3 0 0 0 0 0 0 0 4 +Neighs: 27387.9 ave 32453 max 21803 min +Histogram: 2 2 0 0 0 0 0 0 0 4 + +Total # of neighbors = 219103 +Ave neighs/atom = 27.3879 +Neighbor list builds = 1696 +Dangerous builds = 0 + +# thermal conductivity calculation + +compute ke all ke/atom +variable temp atom c_ke/1.5 + +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.ehex + +variable tdiff equal f_2[11][3]-f_2[1][3] +fix ave all ave/time 1 1 1000 v_tdiff ave running start 13000 +thermo_style custom step temp c_Thot c_Tcold v_tdiff f_ave + +run 20000 +Memory usage per processor = 3.0578 Mbytes +Step Temp Thot Tcold tdiff ave + 11000 1.3794051 1.6903393 1.0515688 0 0 + 12000 1.3799777 1.8004888 1.1032219 -0.63860014 0 + 13000 1.3733605 1.7823094 1.0553582 -0.65827891 -0.65827891 + 14000 1.3749743 1.7852256 1.1674016 -0.68463005 -0.67145448 + 15000 1.3863795 1.8538127 1.0056247 -0.73524813 -0.69271903 + 16000 1.3731955 1.7518546 1.0741458 -0.74810775 -0.70656621 + 17000 1.3771856 1.9016869 1.0090502 -0.73999567 -0.7132521 + 18000 1.3766032 1.7616195 1.1142155 -0.73769104 -0.71732526 + 19000 1.3815934 1.7791247 1.1406987 -0.73617832 -0.72001855 + 20000 1.3725543 1.8637436 1.0799364 -0.73435569 -0.7218107 + 21000 1.3817369 1.8808771 1.0642524 -0.76702329 -0.72683432 + 22000 1.3968704 1.840287 1.072304 -0.82496419 -0.7366473 + 23000 1.3895558 1.9427293 1.0766665 -0.75363908 -0.73819201 + 24000 1.3900493 1.9883976 1.1081017 -0.86394774 -0.74867166 + 25000 1.3838912 1.8853041 1.0795751 -0.83043902 -0.75496145 + 26000 1.3912105 1.9330259 1.1070335 -0.79880182 -0.75809291 + 27000 1.3891151 1.8548451 1.0676153 -0.81856523 -0.7621244 + 28000 1.3942624 1.9796706 1.1251407 -0.81762456 -0.76559316 + 29000 1.3819302 1.8619138 1.0495292 -0.78627491 -0.76680973 + 30000 1.3968366 1.883107 1.1004588 -0.83902548 -0.77082172 + 31000 1.3822489 1.8220413 1.0322271 -0.7550338 -0.76999077 +Loop time of 22.3319 on 8 procs for 20000 steps with 8000 atoms + +Performance: 386890.255 tau/day, 895.579 timesteps/s +99.3% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.4818 | 9.8886 | 12.008 | 66.1 | 44.28 +Neigh | 4.1157 | 5.0693 | 5.9657 | 38.0 | 22.70 +Comm | 1.8343 | 4.6586 | 7.8747 | 129.4 | 20.86 +Output | 0.00095606 | 0.0017744 | 0.0019104 | 0.7 | 0.01 +Modify | 1.6812 | 1.9319 | 2.2204 | 13.5 | 8.65 +Other | | 0.7817 | | | 3.50 + +Nlocal: 1000 ave 1121 max 857 min +Histogram: 2 0 1 1 0 0 0 0 1 3 +Nghost: 2299.75 ave 2541 max 2067 min +Histogram: 3 1 0 0 0 0 0 0 2 2 +Neighs: 27487.2 ave 33361 max 20651 min +Histogram: 2 1 1 0 0 0 0 0 0 4 + +Total # of neighbors = 219898 +Ave neighs/atom = 27.4872 +Neighbor list builds = 3474 +Dangerous builds = 0 +Total wall time: 0:00:33 diff --git a/examples/KAPPA/log.heat.1Feb14 b/examples/KAPPA/log.heat.1Feb14 deleted file mode 100644 index 9ee70c5076..0000000000 --- a/examples/KAPPA/log.heat.1Feb14 +++ /dev/null @@ -1,208 +0,0 @@ -LAMMPS (1 Feb 2014) -# sample LAMMPS input script for thermal conductivity of liquid LJ -# Green-Kubo method via compute heat/flux and fix ave/correlate - -# settings - -variable x equal 10 -variable y equal 10 -variable z equal 10 - -variable rho equal 0.6 -variable t equal 1.35 -variable rc equal 2.5 - -#variable rho equal 0.85 -#variable t equal 0.7 -#variable rc equal 3.0 - -variable p equal 200 # correlation length -variable s equal 10 # sample interval -variable d equal $p*$s # dump interval -variable d equal 200*$s -variable d equal 200*10 - -# setup problem - -units lj -atom_style atomic - -lattice fcc ${rho} -lattice fcc 0.6 -Lattice spacing in x,y,z = 1.88207 1.88207 1.88207 -region box block 0 $x 0 $y 0 $z -region box block 0 10 0 $y 0 $z -region box block 0 10 0 10 0 $z -region box block 0 10 0 10 0 10 -create_box 1 box -Created orthogonal box = (0 0 0) to (18.8207 18.8207 18.8207) - 2 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 4000 atoms -mass 1 1.0 - -velocity all create $t 87287 -velocity all create 1.35 87287 - -pair_style lj/cut ${rc} -pair_style lj/cut 2.5 -pair_coeff 1 1 1.0 1.0 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 - -# 1st equilibration run - -fix 1 all nvt temp $t $t 0.5 -fix 1 all nvt temp 1.35 $t 0.5 -fix 1 all nvt temp 1.35 1.35 0.5 -thermo 100 -run 1000 -Memory usage per processor = 2.10761 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1.35 -4.1241917 0 -2.0996979 -3.1962625 - 100 1.1997886 -3.7796264 0 -1.9803934 0.4889458 - 200 1.271238 -3.7354981 0 -1.8291178 0.6873844 - 300 1.3346808 -3.6942841 0 -1.6927634 0.84332881 - 400 1.4020848 -3.7118654 0 -1.6092641 0.87670585 - 500 1.3723622 -3.6917931 0 -1.6337644 0.92172921 - 600 1.3451676 -3.7281573 0 -1.7109103 0.76029091 - 700 1.3021567 -3.6876155 0 -1.7348687 0.82721085 - 800 1.3489121 -3.7082852 0 -1.6854229 0.86438062 - 900 1.3708803 -3.6966168 0 -1.6408104 0.92141491 - 1000 1.3640742 -3.7075323 0 -1.6619325 0.86651245 -Loop time of 0.448928 on 8 procs for 1000 steps with 4000 atoms - -Pair time (%) = 0.234625 (52.2633) -Neigh time (%) = 0.104614 (23.3031) -Comm time (%) = 0.080426 (17.9151) -Outpt time (%) = 0.000217885 (0.0485344) -Other time (%) = 0.0290458 (6.47002) - -Nlocal: 500 ave 510 max 479 min -Histogram: 1 0 0 0 0 2 1 1 0 3 -Nghost: 1519 ave 1539 max 1509 min -Histogram: 2 0 4 0 0 0 0 1 0 1 -Neighs: 13553.8 ave 14051 max 12567 min -Histogram: 1 0 0 0 1 0 2 1 1 2 - -Total # of neighbors = 108430 -Ave neighs/atom = 27.1075 -Neighbor list builds = 155 -Dangerous builds = 0 - -velocity all scale $t -velocity all scale 1.35 - -unfix 1 - -# thermal conductivity calculation - -reset_timestep 0 - -compute myKE all ke/atom -compute myPE all pe/atom -compute myStress all stress/atom virial -compute flux all heat/flux myKE myPE myStress -variable Jx equal c_flux[1]/vol -variable Jy equal c_flux[2]/vol -variable Jz equal c_flux[3]/vol - -fix 1 all nve -fix JJ all ave/correlate $s $p $d c_flux[1] c_flux[2] c_flux[3] type auto file profile.heatflux ave running -fix JJ all ave/correlate 10 $p $d c_flux[1] c_flux[2] c_flux[3] type auto file profile.heatflux ave running -fix JJ all ave/correlate 10 200 $d c_flux[1] c_flux[2] c_flux[3] type auto file profile.heatflux ave running -fix JJ all ave/correlate 10 200 2000 c_flux[1] c_flux[2] c_flux[3] type auto file profile.heatflux ave running - -variable scale equal $s*dt/$t/$t/vol -variable scale equal 10*dt/$t/$t/vol -variable scale equal 10*dt/1.35/$t/vol -variable scale equal 10*dt/1.35/1.35/vol -variable k11 equal trap(f_JJ[3])*${scale} -variable k11 equal trap(f_JJ[3])*4.11522633744856e-06 -variable k22 equal trap(f_JJ[4])*${scale} -variable k22 equal trap(f_JJ[4])*4.11522633744856e-06 -variable k33 equal trap(f_JJ[5])*${scale} -variable k33 equal trap(f_JJ[5])*4.11522633744856e-06 - -thermo $d -thermo 2000 -thermo_style custom step temp v_Jx v_Jy v_Jz v_k11 v_k22 v_k33 - -run 100000 -Memory usage per processor = 3.25202 Mbytes -Step Temp Jx Jy Jz k11 k22 k33 - 0 1.35 0.012562011 -0.087289131 -0.037038204 0.014431103 0.69678942 0.125453 - 2000 1.3488448 -0.082686441 -0.05888314 0.15641005 9.6556473 4.8724539 39.132688 - 4000 1.3506828 0.055310422 -0.038254827 -0.081110393 3.4422239 2.3744865 7.4870977 - 6000 1.3324005 -0.10634454 -0.011811473 0.024430149 3.6509701 11.111829 2.7413472 - 8000 1.3465517 -0.13857537 -0.058386681 -0.013220164 6.5578792 6.6188014 3.6355334 - 10000 1.3454126 -0.044292047 -0.0055045339 -0.051726965 5.6920768 6.5502293 7.8616795 - 12000 1.3601798 0.18989029 -0.094977713 -0.059726722 5.2989118 8.8331032 7.972481 - 14000 1.3414287 0.0064865781 0.056749763 0.12775935 4.453589 6.4962925 7.9502167 - 16000 1.3249032 0.0023833148 0.0074389705 -0.12452498 5.2719354 6.164126 7.9937329 - 18000 1.3486905 0.24719037 -0.13649854 -0.051766952 3.7849335 5.4803263 6.9701788 - 20000 1.3572854 0.065005524 0.050772448 0.12768096 3.378611 5.6519702 7.1233623 - 22000 1.352508 -0.042516792 -0.070285937 -0.03879074 5.4717313 5.4908509 6.7550818 - 24000 1.3559841 -0.015758535 -0.098318418 0.027238601 6.0025309 5.2571093 6.0763852 - 26000 1.3442105 -0.047372234 0.036647228 -0.0052159685 6.8263856 4.6880057 6.1674781 - 28000 1.3522633 0.025172759 -0.016031105 0.12001218 6.3114313 4.1003669 5.7234478 - 30000 1.3593364 -0.044078855 0.0089521622 0.13278909 5.4296394 3.8944372 5.2946242 - 32000 1.3412479 -0.013107683 -0.089437735 -0.089978727 5.0171818 4.2838538 6.7869585 - 34000 1.3490784 -0.069828566 -0.018570411 0.018866428 5.1053455 3.7588109 5.7177159 - 36000 1.3630314 -0.017768864 0.067999673 0.016212961 5.3345297 3.6547014 5.5137046 - 38000 1.3564307 0.080792723 0.12705697 0.0023785227 5.1062587 3.6140422 5.5464591 - 40000 1.3546707 -0.030425013 0.17303248 -0.043210574 4.5874798 3.6033647 5.2304191 - 42000 1.3549663 0.10109213 -0.056635329 0.047756306 4.1930341 3.4788566 5.3322825 - 44000 1.3557286 0.0083871709 -0.08039758 0.0060697507 4.8453948 3.7579315 4.9727852 - 46000 1.3434325 0.048348267 -0.12296683 -0.012320195 4.6106895 3.6890294 4.6654515 - 48000 1.3520456 0.052909962 0.034221069 0.011730009 4.8097414 3.897061 4.5042484 - 50000 1.3480467 0.084823081 -0.093901701 0.091139125 4.6836534 3.7687187 4.4227539 - 52000 1.3473278 -0.12531922 -0.065273509 0.11638381 4.9413341 3.8765808 4.5227649 - 54000 1.3672128 0.11139848 0.034992201 -0.022009105 4.695476 3.5100821 5.0401349 - 56000 1.341716 0.12258667 -0.089117615 0.041707151 4.5195052 3.3873269 4.972056 - 58000 1.359732 0.063106883 -0.026013959 -0.026567969 4.3259743 3.6185582 4.721062 - 60000 1.3587911 0.05591296 -0.12996822 0.095669495 4.1958916 3.5682633 4.8210022 - 62000 1.3483527 0.048201166 -0.030400186 -0.018919104 4.0886746 3.7373315 4.8825261 - 64000 1.3531159 -0.10850158 -0.093503261 0.095145743 3.9415737 3.6946305 4.6787173 - 66000 1.3534358 0.0070478917 -0.13855333 -0.0028185444 3.989283 3.7940811 4.5848181 - 68000 1.3509679 -0.17972456 -0.15918151 -0.0092253402 4.1168514 3.689533 4.9348847 - 70000 1.3496439 0.025102803 -0.12080911 0.0099284856 4.0474517 3.6265752 4.8809921 - 72000 1.3382578 0.2235088 0.10981254 0.049251118 3.9059236 3.5169408 4.9528845 - 74000 1.3529223 0.012949328 0.11733173 0.12107899 4.0011677 3.4205986 4.7288624 - 76000 1.3442459 0.090185942 0.038587691 -0.023131667 3.9854752 3.4013375 4.7967661 - 78000 1.3423941 0.072006425 -0.009752458 0.058791886 3.87483 3.3898574 5.0306248 - 80000 1.3501112 -0.041057888 -0.11150244 -0.052369732 3.7648956 3.2969166 4.9549774 - 82000 1.358605 0.14838249 0.055223984 0.019108344 3.8986959 3.2556248 4.8872754 - 84000 1.357958 -0.087190849 0.029998974 0.089839797 4.4229469 3.2567955 4.7704664 - 86000 1.3340187 0.10824995 -0.013149214 0.042146878 3.9867785 3.2596969 4.6510248 - 88000 1.3428375 -0.033908572 -0.11261352 0.099056349 3.8033502 3.1706434 4.5328732 - 90000 1.3299574 0.055893064 -0.22127211 -0.042737098 3.7086395 3.118066 4.5709281 - 92000 1.3488719 0.040126575 0.074080804 0.019410656 3.8714376 3.0342566 4.4798044 - 94000 1.3621842 -0.087519994 0.028392459 0.047179422 3.7841822 3.1603745 4.3925598 - 96000 1.3578003 0.081511213 -0.0083540805 0.015204759 3.7117805 3.0610774 4.2886014 - 98000 1.3477904 -0.13903407 0.1146023 0.059812672 3.7445818 3.284994 4.3000618 - 100000 1.3583776 0.16015243 0.19139469 0.097636877 3.8265662 3.280556 4.2276263 -Loop time of 47.6555 on 8 procs for 100000 steps with 4000 atoms - -Pair time (%) = 26.2998 (55.1875) -Neigh time (%) = 10.812 (22.6879) -Comm time (%) = 7.45882 (15.6516) -Outpt time (%) = 0.0276995 (0.0581246) -Other time (%) = 3.05705 (6.4149) - -Nlocal: 500 ave 519 max 493 min -Histogram: 4 1 0 1 0 0 1 0 0 1 -Nghost: 1547 ave 1558 max 1523 min -Histogram: 1 0 0 0 0 2 1 0 2 2 -Neighs: 13544.8 ave 14633 max 13111 min -Histogram: 2 1 3 1 0 0 0 0 0 1 - -Total # of neighbors = 108358 -Ave neighs/atom = 27.0895 -Neighbor list builds = 16041 -Dangerous builds = 0 - -variable kappa equal (v_k11+v_k22+v_k33)/3.0 -print "running average conductivity: ${kappa}" -running average conductivity: 3.77824951481468 diff --git a/examples/KAPPA/log.heat.7Jun16 b/examples/KAPPA/log.heat.7Jun16 new file mode 100644 index 0000000000..c9a035ddc4 --- /dev/null +++ b/examples/KAPPA/log.heat.7Jun16 @@ -0,0 +1,225 @@ +LAMMPS (7 Jun 2016) +# sample LAMMPS input script for thermal conductivity of liquid LJ +# use fix heat to add/subtract energy from 2 regions + +# settings + +variable x equal 10 +variable y equal 10 +variable z equal 20 + +variable rho equal 0.6 +variable t equal 1.35 +variable rc equal 2.5 + +#variable rho equal 0.85 +#variable t equal 0.7 +#variable rc equal 3.0 + +# setup problem + +units lj +atom_style atomic + +lattice fcc ${rho} +lattice fcc 0.6 +Lattice spacing in x,y,z = 1.88207 1.88207 1.88207 +region box block 0 $x 0 $y 0 $z +region box block 0 10 0 $y 0 $z +region box block 0 10 0 10 0 $z +region box block 0 10 0 10 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (18.8207 18.8207 37.6414) + 2 by 1 by 4 MPI processor grid +create_atoms 1 box +Created 8000 atoms +mass 1 1.0 + +velocity all create $t 87287 +velocity all create 1.35 87287 + +pair_style lj/cut ${rc} +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 + +# heat layers + +region hot block INF INF INF INF 0 1 +region cold block INF INF INF INF 10 11 +compute Thot all temp/region hot +compute Tcold all temp/region cold + +# 1st equilibration run + +fix 1 all nvt temp $t $t 0.5 +fix 1 all nvt temp 1.35 $t 0.5 +fix 1 all nvt temp 1.35 1.35 0.5 +thermo 100 +run 1000 +Neighbor list info ... + 1 neighbor list requests + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4 -> bins = 14 14 27 +Memory usage per processor = 2.55761 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.35 -4.1241917 0 -2.0994448 -3.1961612 + 100 1.1819832 -3.7640881 0 -1.991335 0.53985757 + 200 1.2578365 -3.7395333 0 -1.8530144 0.69591862 + 300 1.3282971 -3.7215427 0 -1.7293461 0.79036065 + 400 1.3714367 -3.7043826 0 -1.6474847 0.85873226 + 500 1.3590952 -3.6707735 0 -1.6323855 0.99602024 + 600 1.3575117 -3.7118244 0 -1.6758114 0.81454305 + 700 1.3284444 -3.7075488 0 -1.7151313 0.81136596 + 800 1.3419995 -3.7155648 0 -1.7028172 0.82925676 + 900 1.3562214 -3.6965609 0 -1.6624831 0.88908117 + 1000 1.3732017 -3.7100044 0 -1.6504594 0.83982701 +Loop time of 0.889036 on 8 procs for 1000 steps with 8000 atoms + +Performance: 485919.613 tau/day, 1124.814 timesteps/s +99.4% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.47867 | 0.4928 | 0.5006 | 1.0 | 55.43 +Neigh | 0.23302 | 0.23557 | 0.23833 | 0.3 | 26.50 +Comm | 0.1001 | 0.11264 | 0.12817 | 2.6 | 12.67 +Output | 0.00032806 | 0.00034043 | 0.00040531 | 0.1 | 0.04 +Modify | 0.028788 | 0.031511 | 0.033365 | 0.9 | 3.54 +Other | | 0.01618 | | | 1.82 + +Nlocal: 1000 ave 1020 max 982 min +Histogram: 1 0 2 1 0 1 1 1 0 1 +Nghost: 2299.5 ave 2331 max 2268 min +Histogram: 1 1 1 1 0 0 0 3 0 1 +Neighs: 27122 ave 28382 max 26337 min +Histogram: 2 0 2 1 1 0 0 1 0 1 + +Total # of neighbors = 216976 +Ave neighs/atom = 27.122 +Neighbor list builds = 162 +Dangerous builds = 0 + +velocity all scale $t +velocity all scale 1.35 + +unfix 1 + +# 2nd equilibration run + +fix 1 all nve +fix hot all heat 1 100.0 region hot +fix cold all heat 1 -100.0 region cold + +thermo_style custom step temp c_Thot c_Tcold +thermo 1000 +run 10000 +Memory usage per processor = 2.55761 Mbytes +Step Temp Thot Tcold + 1000 1.35 1.431295 1.2955644 + 2000 1.3518468 1.5562602 1.154905 + 3000 1.3477229 1.5890075 1.2395414 + 4000 1.3487175 1.5491615 1.2019696 + 5000 1.3594394 1.5780597 1.1824492 + 6000 1.3583923 1.541735 1.1675586 + 7000 1.3700321 1.6735877 1.1279114 + 8000 1.3631993 1.6367675 1.0697225 + 9000 1.3739201 1.6846211 1.1138829 + 10000 1.3751455 1.8039471 1.1500399 + 11000 1.3716416 1.833336 1.1267278 +Loop time of 10.488 on 8 procs for 10000 steps with 8000 atoms + +Performance: 411900.216 tau/day, 953.473 timesteps/s +99.5% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.138 | 4.9118 | 5.6168 | 26.2 | 46.83 +Neigh | 2.1715 | 2.4541 | 2.7147 | 14.7 | 23.40 +Comm | 0.94395 | 1.8449 | 2.9212 | 55.3 | 17.59 +Output | 0.00043416 | 0.00046757 | 0.00054884 | 0.2 | 0.00 +Modify | 1.0234 | 1.0946 | 1.2539 | 8.7 | 10.44 +Other | | 0.1821 | | | 1.74 + +Nlocal: 1000 ave 1131 max 878 min +Histogram: 3 1 0 0 0 0 0 1 1 2 +Nghost: 2312.88 ave 2525 max 2114 min +Histogram: 2 2 0 0 0 0 0 1 1 2 +Neighs: 27457 ave 33797 max 21031 min +Histogram: 3 1 0 0 0 0 0 0 1 3 + +Total # of neighbors = 219656 +Ave neighs/atom = 27.457 +Neighbor list builds = 1691 +Dangerous builds = 0 + +# thermal conductivity calculation + +compute ke all ke/atom +variable temp atom c_ke/1.5 + +compute layers all chunk/atom bin/1d z lower 0.05 units reduced +fix 2 all ave/chunk 10 100 1000 layers v_temp file profile.heat + +variable tdiff equal f_2[11][3]-f_2[1][3] +fix ave all ave/time 1 1 1000 v_tdiff ave running start 13000 +thermo_style custom step temp c_Thot c_Tcold v_tdiff f_ave + +run 20000 +Memory usage per processor = 2.8078 Mbytes +Step Temp Thot Tcold tdiff ave + 11000 1.3716416 1.833336 1.1267278 0 0 + 12000 1.3703433 1.7829467 1.1194444 -0.66044316 0 + 13000 1.3686734 1.8334366 1.1193477 -0.71431978 -0.71431978 + 14000 1.3856987 1.8048077 1.1052708 -0.73112558 -0.72272268 + 15000 1.3820117 1.7460559 1.110725 -0.72927647 -0.72490728 + 16000 1.3911309 1.923603 1.1161499 -0.77407515 -0.73719925 + 17000 1.3841301 1.7276486 1.0283807 -0.77278638 -0.74431667 + 18000 1.3888918 1.7944951 1.0532944 -0.75665895 -0.74637372 + 19000 1.3876032 1.838174 1.059715 -0.71342263 -0.74166642 + 20000 1.3724644 1.8297128 1.1439176 -0.77352223 -0.7456484 + 21000 1.3798921 1.7968403 1.0288381 -0.70077132 -0.74066206 + 22000 1.3763952 1.8202225 1.0658157 -0.75629111 -0.74222496 + 23000 1.3911378 1.8691478 1.018589 -0.76094865 -0.74392711 + 24000 1.3867754 1.7826523 1.09347 -0.80367344 -0.74890597 + 25000 1.385877 1.9029313 1.0815131 -0.73559505 -0.74788206 + 26000 1.3791773 1.8904022 1.0151678 -0.7729123 -0.74966993 + 27000 1.3800063 1.729283 1.127594 -0.71473941 -0.74734123 + 28000 1.3757197 1.7823772 1.084523 -0.73849831 -0.74678855 + 29000 1.3777555 1.8287284 1.0715132 -0.70375514 -0.74425717 + 30000 1.3821118 1.7382856 1.1078333 -0.79892499 -0.74729427 + 31000 1.3870476 1.8410063 1.1235958 -0.76218423 -0.74807795 +Loop time of 22.3813 on 8 procs for 20000 steps with 8000 atoms + +Performance: 386036.860 tau/day, 893.604 timesteps/s +99.4% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.4578 | 9.8912 | 11.96 | 64.5 | 44.19 +Neigh | 4.0721 | 5.0195 | 5.8898 | 36.9 | 22.43 +Comm | 1.9554 | 4.7393 | 7.8917 | 125.4 | 21.18 +Output | 0.00099301 | 0.0017841 | 0.0019252 | 0.7 | 0.01 +Modify | 2.2325 | 2.321 | 2.4866 | 6.5 | 10.37 +Other | | 0.4085 | | | 1.83 + +Nlocal: 1000 ave 1134 max 850 min +Histogram: 2 1 0 1 0 0 0 1 0 3 +Nghost: 2307.75 ave 2561 max 2083 min +Histogram: 4 0 0 0 0 0 0 0 2 2 +Neighs: 27561.1 ave 34071 max 19891 min +Histogram: 2 1 1 0 0 0 0 0 1 3 + +Total # of neighbors = 220489 +Ave neighs/atom = 27.5611 +Neighbor list builds = 3442 +Dangerous builds = 0 +Total wall time: 0:00:33 diff --git a/examples/KAPPA/profile.ehex.7Jun16 b/examples/KAPPA/profile.ehex.7Jun16 new file mode 100644 index 0000000000..a68451d860 --- /dev/null +++ b/examples/KAPPA/profile.ehex.7Jun16 @@ -0,0 +1,423 @@ +# Chunk-averaged data for fix 2 and group all +# Timestep Number-of-chunks Total-count +# Chunk Coord1 Ncount v_temp +12000 20 8000 + 1 0.025 322.07 1.73032 + 2 0.075 335.51 1.65791 + 3 0.125 357.07 1.53477 + 4 0.175 365.17 1.49308 + 5 0.225 387.68 1.44734 + 6 0.275 402.28 1.3474 + 7 0.325 421.71 1.31994 + 8 0.375 421.85 1.30538 + 9 0.425 450.07 1.20274 + 10 0.475 463.24 1.15807 + 11 0.525 468.22 1.09172 + 12 0.575 461.28 1.15377 + 13 0.625 443.77 1.23981 + 14 0.675 426.71 1.28193 + 15 0.725 415.99 1.31163 + 16 0.775 402.63 1.37658 + 17 0.825 382.61 1.46869 + 18 0.875 373.86 1.53692 + 19 0.925 355.41 1.58621 + 20 0.975 342.87 1.63855 +13000 20 8000 + 1 0.025 320.28 1.74984 + 2 0.075 341.7 1.66844 + 3 0.125 356.34 1.59466 + 4 0.175 366 1.52906 + 5 0.225 388.87 1.44403 + 6 0.275 405.38 1.37012 + 7 0.325 422.1 1.3036 + 8 0.375 433.41 1.24445 + 9 0.425 449.77 1.18992 + 10 0.475 451.44 1.14612 + 11 0.525 468.73 1.09156 + 12 0.575 463.44 1.1238 + 13 0.625 446.27 1.19779 + 14 0.675 428.82 1.27807 + 15 0.725 413.91 1.33433 + 16 0.775 402.06 1.39324 + 17 0.825 385.2 1.46523 + 18 0.875 366.59 1.53368 + 19 0.925 353.92 1.60364 + 20 0.975 335.77 1.67323 +14000 20 8000 + 1 0.025 321.09 1.77018 + 2 0.075 334.91 1.68086 + 3 0.125 346.37 1.64536 + 4 0.175 365.77 1.54818 + 5 0.225 387.4 1.46673 + 6 0.275 404.95 1.37399 + 7 0.325 430.94 1.25982 + 8 0.375 439.94 1.2454 + 9 0.425 444.59 1.204 + 10 0.475 457.68 1.16409 + 11 0.525 470.68 1.08555 + 12 0.575 469.71 1.11331 + 13 0.625 451.58 1.1767 + 14 0.675 427.2 1.26143 + 15 0.725 414.26 1.31025 + 16 0.775 391.52 1.40899 + 17 0.825 379.51 1.48011 + 18 0.875 373.12 1.52826 + 19 0.925 352.66 1.61796 + 20 0.975 336.12 1.69872 +15000 20 8000 + 1 0.025 315.72 1.81225 + 2 0.075 329.72 1.69701 + 3 0.125 354.69 1.59149 + 4 0.175 364.56 1.56039 + 5 0.225 382.01 1.4716 + 6 0.275 407.35 1.35395 + 7 0.325 429.13 1.2915 + 8 0.375 436.76 1.25225 + 9 0.425 445.94 1.20578 + 10 0.475 464.62 1.14736 + 11 0.525 472.47 1.077 + 12 0.575 464.88 1.12455 + 13 0.625 449.98 1.18353 + 14 0.675 429.05 1.28013 + 15 0.725 422.49 1.30857 + 16 0.775 399.28 1.41826 + 17 0.825 384.58 1.43609 + 18 0.875 373.56 1.50688 + 19 0.925 355.96 1.613 + 20 0.975 317.25 1.78649 +16000 20 8000 + 1 0.025 310.33 1.82273 + 2 0.075 339.92 1.66157 + 3 0.125 358.32 1.58227 + 4 0.175 360.4 1.58441 + 5 0.225 377.79 1.50022 + 6 0.275 400.37 1.40295 + 7 0.325 429.87 1.30232 + 8 0.375 440.76 1.24469 + 9 0.425 450.05 1.17791 + 10 0.475 470.92 1.10745 + 11 0.525 475.04 1.07462 + 12 0.575 465.61 1.12671 + 13 0.625 447.55 1.20079 + 14 0.675 429.38 1.25943 + 15 0.725 412.58 1.36449 + 16 0.775 407.64 1.38004 + 17 0.825 387.88 1.45598 + 18 0.875 370.35 1.51929 + 19 0.925 343.49 1.65411 + 20 0.975 321.75 1.75211 +17000 20 8000 + 1 0.025 318.58 1.8062 + 2 0.075 337.39 1.69943 + 3 0.125 358.44 1.55342 + 4 0.175 369.21 1.55508 + 5 0.225 381.99 1.49661 + 6 0.275 397.58 1.41433 + 7 0.325 419.05 1.29976 + 8 0.375 445.42 1.22729 + 9 0.425 452.41 1.17698 + 10 0.475 463.93 1.11989 + 11 0.525 478.17 1.0662 + 12 0.575 463.8 1.13436 + 13 0.625 444.74 1.23059 + 14 0.675 428.5 1.27667 + 15 0.725 418.25 1.325 + 16 0.775 396.7 1.4011 + 17 0.825 390.53 1.40747 + 18 0.875 369.91 1.52963 + 19 0.925 341.44 1.67071 + 20 0.975 323.96 1.73861 +18000 20 8000 + 1 0.025 317.87 1.80462 + 2 0.075 332.85 1.71643 + 3 0.125 362.41 1.57728 + 4 0.175 375 1.51728 + 5 0.225 384.74 1.48844 + 6 0.275 399.91 1.40692 + 7 0.325 414.61 1.3132 + 8 0.375 431.14 1.2606 + 9 0.425 454.41 1.18294 + 10 0.475 470.01 1.12982 + 11 0.525 480.15 1.06693 + 12 0.575 464.04 1.14863 + 13 0.625 443.7 1.22488 + 14 0.675 435.28 1.27294 + 15 0.725 421.62 1.31383 + 16 0.775 407.72 1.37653 + 17 0.825 387.62 1.46663 + 18 0.875 359.66 1.54947 + 19 0.925 336.59 1.68257 + 20 0.975 320.67 1.69074 +19000 20 8000 + 1 0.025 313.32 1.8303 + 2 0.075 337.89 1.68821 + 3 0.125 355.32 1.59618 + 4 0.175 370.33 1.53509 + 5 0.225 380.14 1.45156 + 6 0.275 410.62 1.37813 + 7 0.325 413.97 1.31598 + 8 0.375 440.22 1.23578 + 9 0.425 453.62 1.20161 + 10 0.475 456.17 1.14928 + 11 0.525 473.45 1.09412 + 12 0.575 468 1.10292 + 13 0.625 452.28 1.17659 + 14 0.675 434.56 1.25612 + 15 0.725 408.33 1.34469 + 16 0.775 403.42 1.39694 + 17 0.825 389.58 1.43881 + 18 0.875 365.87 1.52786 + 19 0.925 350.73 1.65024 + 20 0.975 322.18 1.75243 +20000 20 8000 + 1 0.025 317.68 1.82922 + 2 0.075 333.7 1.70341 + 3 0.125 352.43 1.62673 + 4 0.175 365.88 1.51121 + 5 0.225 387.84 1.48329 + 6 0.275 398.02 1.39756 + 7 0.325 420.03 1.30696 + 8 0.375 440 1.23764 + 9 0.425 449.88 1.18933 + 10 0.475 466.8 1.13312 + 11 0.525 476.07 1.09486 + 12 0.575 470.97 1.10154 + 13 0.625 446.31 1.17311 + 14 0.675 424.34 1.2719 + 15 0.725 411.61 1.35256 + 16 0.775 405.08 1.38417 + 17 0.825 393.82 1.44301 + 18 0.875 363.33 1.53869 + 19 0.925 344.24 1.68597 + 20 0.975 331.97 1.69397 +21000 20 8000 + 1 0.025 311.3 1.8347 + 2 0.075 334.47 1.71953 + 3 0.125 356.34 1.61616 + 4 0.175 364.19 1.55856 + 5 0.225 376.62 1.4854 + 6 0.275 398.3 1.41193 + 7 0.325 424.38 1.30507 + 8 0.375 438.26 1.26796 + 9 0.425 457.85 1.17017 + 10 0.475 470.35 1.12603 + 11 0.525 485.39 1.06768 + 12 0.575 467.44 1.11276 + 13 0.625 453.08 1.19011 + 14 0.675 435.63 1.27015 + 15 0.725 411.43 1.34366 + 16 0.775 403.19 1.37819 + 17 0.825 380.44 1.46277 + 18 0.875 366.55 1.5397 + 19 0.925 344.64 1.62129 + 20 0.975 320.15 1.75917 +22000 20 8000 + 1 0.025 312.61 1.8645 + 2 0.075 322.63 1.74315 + 3 0.125 342.86 1.62816 + 4 0.175 363.84 1.5573 + 5 0.225 385.71 1.51272 + 6 0.275 407.97 1.38316 + 7 0.325 424.4 1.32085 + 8 0.375 431.24 1.26807 + 9 0.425 453.88 1.17526 + 10 0.475 477.13 1.08521 + 11 0.525 482.73 1.03954 + 12 0.575 465.86 1.0936 + 13 0.625 452.62 1.18848 + 14 0.675 432.94 1.28592 + 15 0.725 422.55 1.33079 + 16 0.775 400.52 1.42315 + 17 0.825 385.84 1.47115 + 18 0.875 365.42 1.56694 + 19 0.925 344.8 1.66482 + 20 0.975 324.45 1.72464 +23000 20 8000 + 1 0.025 315.27 1.82283 + 2 0.075 322.63 1.75617 + 3 0.125 347.3 1.63336 + 4 0.175 365.67 1.54647 + 5 0.225 378.64 1.44585 + 6 0.275 400.8 1.41647 + 7 0.325 409.62 1.36075 + 8 0.375 434.77 1.24475 + 9 0.425 460.26 1.15516 + 10 0.475 482.87 1.08223 + 11 0.525 485.69 1.06919 + 12 0.575 465.06 1.13116 + 13 0.625 451.04 1.18829 + 14 0.675 445.21 1.23573 + 15 0.725 418.09 1.33865 + 16 0.775 402.57 1.40569 + 17 0.825 387.23 1.46241 + 18 0.875 368.53 1.56939 + 19 0.925 336.56 1.71021 + 20 0.975 322.19 1.82027 +24000 20 8000 + 1 0.025 306.22 1.91199 + 2 0.075 325.76 1.76881 + 3 0.125 343.41 1.68121 + 4 0.175 361.82 1.5899 + 5 0.225 388.09 1.49693 + 6 0.275 407.52 1.39691 + 7 0.325 421.35 1.36789 + 8 0.375 442.77 1.25642 + 9 0.425 455.11 1.1777 + 10 0.475 474.33 1.10251 + 11 0.525 485.55 1.04804 + 12 0.575 462.57 1.12617 + 13 0.625 448.06 1.17757 + 14 0.675 448.35 1.23831 + 15 0.725 423.61 1.29904 + 16 0.775 396.54 1.38686 + 17 0.825 380.95 1.45879 + 18 0.875 363.38 1.56251 + 19 0.925 345.4 1.62224 + 20 0.975 319.21 1.72973 +25000 20 8000 + 1 0.025 303.93 1.87595 + 2 0.075 322.5 1.78136 + 3 0.125 343.89 1.65601 + 4 0.175 358.14 1.596 + 5 0.225 384.51 1.46731 + 6 0.275 405.62 1.3792 + 7 0.325 420.4 1.30999 + 8 0.375 433.83 1.25507 + 9 0.425 449.62 1.17815 + 10 0.475 465.18 1.11819 + 11 0.525 477.55 1.04551 + 12 0.575 466.37 1.10717 + 13 0.625 461.18 1.16842 + 14 0.675 447.71 1.24098 + 15 0.725 427.56 1.31684 + 16 0.775 411.34 1.41287 + 17 0.825 388.3 1.48633 + 18 0.875 376.49 1.55894 + 19 0.925 341.1 1.66486 + 20 0.975 314.78 1.80037 +26000 20 8000 + 1 0.025 309.14 1.86335 + 2 0.075 330.35 1.77588 + 3 0.125 340.93 1.71637 + 4 0.175 361.59 1.56186 + 5 0.225 389.51 1.47516 + 6 0.275 397.16 1.43538 + 7 0.325 421.76 1.30226 + 8 0.375 442.79 1.21986 + 9 0.425 456.02 1.19661 + 10 0.475 467.17 1.14182 + 11 0.525 482.3 1.06455 + 12 0.575 469.89 1.10565 + 13 0.625 457.76 1.15942 + 14 0.675 438.23 1.24318 + 15 0.725 424.09 1.30288 + 16 0.775 399.28 1.3856 + 17 0.825 384.93 1.44408 + 18 0.875 367.23 1.49881 + 19 0.925 342.51 1.68085 + 20 0.975 317.36 1.81142 +27000 20 8000 + 1 0.025 300.51 1.88263 + 2 0.075 311.35 1.78811 + 3 0.125 338.56 1.66651 + 4 0.175 357.91 1.55261 + 5 0.225 390.48 1.46048 + 6 0.275 407.21 1.38457 + 7 0.325 417.36 1.33315 + 8 0.375 435.16 1.25434 + 9 0.425 460.98 1.17445 + 10 0.475 470.93 1.10177 + 11 0.525 480.8 1.06406 + 12 0.575 470.16 1.1381 + 13 0.625 459.73 1.18579 + 14 0.675 436.17 1.26078 + 15 0.725 420.8 1.32789 + 16 0.775 410.25 1.39073 + 17 0.825 389.28 1.46603 + 18 0.875 366.06 1.57168 + 19 0.925 350.12 1.65153 + 20 0.975 326.18 1.78581 +28000 20 8000 + 1 0.025 313.41 1.88002 + 2 0.075 325.71 1.77905 + 3 0.125 343.21 1.70494 + 4 0.175 362.12 1.56789 + 5 0.225 381.71 1.50517 + 6 0.275 403.75 1.38742 + 7 0.325 418.96 1.31497 + 8 0.375 438.71 1.23186 + 9 0.425 452.48 1.167 + 10 0.475 469.71 1.09417 + 11 0.525 477.24 1.0624 + 12 0.575 469.25 1.09165 + 13 0.625 452.98 1.16396 + 14 0.675 435.36 1.23566 + 15 0.725 417.01 1.32005 + 16 0.775 402.67 1.38976 + 17 0.825 392.36 1.42927 + 18 0.875 373.37 1.52955 + 19 0.925 347.43 1.71897 + 20 0.975 322.56 1.77263 +29000 20 8000 + 1 0.025 306.32 1.84427 + 2 0.075 315.37 1.72189 + 3 0.125 336.28 1.63534 + 4 0.175 370.6 1.50866 + 5 0.225 379.5 1.4815 + 6 0.275 401.59 1.41899 + 7 0.325 416.5 1.3418 + 8 0.375 437.32 1.24778 + 9 0.425 462.43 1.16296 + 10 0.475 474.19 1.11671 + 11 0.525 486.04 1.058 + 12 0.575 468.69 1.13237 + 13 0.625 452.93 1.22617 + 14 0.675 442.01 1.28873 + 15 0.725 423.08 1.33873 + 16 0.775 401.64 1.40429 + 17 0.825 384.68 1.45828 + 18 0.875 366.76 1.54522 + 19 0.925 344.85 1.66404 + 20 0.975 329.22 1.71205 +30000 20 8000 + 1 0.025 308.09 1.89207 + 2 0.075 319.03 1.81272 + 3 0.125 338.19 1.69232 + 4 0.175 373.88 1.53122 + 5 0.225 380.61 1.52729 + 6 0.275 415.09 1.37557 + 7 0.325 429.93 1.30507 + 8 0.375 437.55 1.24468 + 9 0.425 451.32 1.17924 + 10 0.475 465.11 1.10183 + 11 0.525 474.95 1.05305 + 12 0.575 471.75 1.09706 + 13 0.625 449.98 1.14258 + 14 0.675 432.26 1.26209 + 15 0.725 418.7 1.3407 + 16 0.775 404.37 1.37097 + 17 0.825 383.75 1.46353 + 18 0.875 368 1.52953 + 19 0.925 344.91 1.65462 + 20 0.975 332.53 1.76243 +31000 20 8000 + 1 0.025 305.94 1.84422 + 2 0.075 311.73 1.78901 + 3 0.125 337.75 1.65741 + 4 0.175 359.08 1.57324 + 5 0.225 391.43 1.4515 + 6 0.275 407.41 1.38991 + 7 0.325 426.6 1.29209 + 8 0.375 443.02 1.23929 + 9 0.425 456.53 1.18696 + 10 0.475 471.42 1.13604 + 11 0.525 479.88 1.08919 + 12 0.575 470.75 1.12485 + 13 0.625 444.94 1.22892 + 14 0.675 434.87 1.28666 + 15 0.725 428.34 1.28139 + 16 0.775 411.23 1.38305 + 17 0.825 387.6 1.48696 + 18 0.875 365.99 1.54931 + 19 0.925 347.57 1.62238 + 20 0.975 317.92 1.75769 diff --git a/examples/KAPPA/profile.heat.1Feb14 b/examples/KAPPA/profile.heat.1Feb14 deleted file mode 100644 index 1dae06a5b2..0000000000 --- a/examples/KAPPA/profile.heat.1Feb14 +++ /dev/null @@ -1,10254 +0,0 @@ -# Time-correlated data for fix JJ -# Timestep Number-of-time-windows -# Index TimeDelta Ncount c_flux[1]*c_flux[1] c_flux[2]*c_flux[2] c_flux[3]*c_flux[3] -0 200 -1 0 1 7013.52 338640 60970.2 -2 10 0 0.0 0.0 0.0 -3 20 0 0.0 0.0 0.0 -4 30 0 0.0 0.0 0.0 -5 40 0 0.0 0.0 0.0 -6 50 0 0.0 0.0 0.0 -7 60 0 0.0 0.0 0.0 -8 70 0 0.0 0.0 0.0 -9 80 0 0.0 0.0 0.0 -10 90 0 0.0 0.0 0.0 -11 100 0 0.0 0.0 0.0 -12 110 0 0.0 0.0 0.0 -13 120 0 0.0 0.0 0.0 -14 130 0 0.0 0.0 0.0 -15 140 0 0.0 0.0 0.0 -16 150 0 0.0 0.0 0.0 -17 160 0 0.0 0.0 0.0 -18 170 0 0.0 0.0 0.0 -19 180 0 0.0 0.0 0.0 -20 190 0 0.0 0.0 0.0 -21 200 0 0.0 0.0 0.0 -22 210 0 0.0 0.0 0.0 -23 220 0 0.0 0.0 0.0 -24 230 0 0.0 0.0 0.0 -25 240 0 0.0 0.0 0.0 -26 250 0 0.0 0.0 0.0 -27 260 0 0.0 0.0 0.0 -28 270 0 0.0 0.0 0.0 -29 280 0 0.0 0.0 0.0 -30 290 0 0.0 0.0 0.0 -31 300 0 0.0 0.0 0.0 -32 310 0 0.0 0.0 0.0 -33 320 0 0.0 0.0 0.0 -34 330 0 0.0 0.0 0.0 -35 340 0 0.0 0.0 0.0 -36 350 0 0.0 0.0 0.0 -37 360 0 0.0 0.0 0.0 -38 370 0 0.0 0.0 0.0 -39 380 0 0.0 0.0 0.0 -40 390 0 0.0 0.0 0.0 -41 400 0 0.0 0.0 0.0 -42 410 0 0.0 0.0 0.0 -43 420 0 0.0 0.0 0.0 -44 430 0 0.0 0.0 0.0 -45 440 0 0.0 0.0 0.0 -46 450 0 0.0 0.0 0.0 -47 460 0 0.0 0.0 0.0 -48 470 0 0.0 0.0 0.0 -49 480 0 0.0 0.0 0.0 -50 490 0 0.0 0.0 0.0 -51 500 0 0.0 0.0 0.0 -52 510 0 0.0 0.0 0.0 -53 520 0 0.0 0.0 0.0 -54 530 0 0.0 0.0 0.0 -55 540 0 0.0 0.0 0.0 -56 550 0 0.0 0.0 0.0 -57 560 0 0.0 0.0 0.0 -58 570 0 0.0 0.0 0.0 -59 580 0 0.0 0.0 0.0 -60 590 0 0.0 0.0 0.0 -61 600 0 0.0 0.0 0.0 -62 610 0 0.0 0.0 0.0 -63 620 0 0.0 0.0 0.0 -64 630 0 0.0 0.0 0.0 -65 640 0 0.0 0.0 0.0 -66 650 0 0.0 0.0 0.0 -67 660 0 0.0 0.0 0.0 -68 670 0 0.0 0.0 0.0 -69 680 0 0.0 0.0 0.0 -70 690 0 0.0 0.0 0.0 -71 700 0 0.0 0.0 0.0 -72 710 0 0.0 0.0 0.0 -73 720 0 0.0 0.0 0.0 -74 730 0 0.0 0.0 0.0 -75 740 0 0.0 0.0 0.0 -76 750 0 0.0 0.0 0.0 -77 760 0 0.0 0.0 0.0 -78 770 0 0.0 0.0 0.0 -79 780 0 0.0 0.0 0.0 -80 790 0 0.0 0.0 0.0 -81 800 0 0.0 0.0 0.0 -82 810 0 0.0 0.0 0.0 -83 820 0 0.0 0.0 0.0 -84 830 0 0.0 0.0 0.0 -85 840 0 0.0 0.0 0.0 -86 850 0 0.0 0.0 0.0 -87 860 0 0.0 0.0 0.0 -88 870 0 0.0 0.0 0.0 -89 880 0 0.0 0.0 0.0 -90 890 0 0.0 0.0 0.0 -91 900 0 0.0 0.0 0.0 -92 910 0 0.0 0.0 0.0 -93 920 0 0.0 0.0 0.0 -94 930 0 0.0 0.0 0.0 -95 940 0 0.0 0.0 0.0 -96 950 0 0.0 0.0 0.0 -97 960 0 0.0 0.0 0.0 -98 970 0 0.0 0.0 0.0 -99 980 0 0.0 0.0 0.0 -100 990 0 0.0 0.0 0.0 -101 1000 0 0.0 0.0 0.0 -102 1010 0 0.0 0.0 0.0 -103 1020 0 0.0 0.0 0.0 -104 1030 0 0.0 0.0 0.0 -105 1040 0 0.0 0.0 0.0 -106 1050 0 0.0 0.0 0.0 -107 1060 0 0.0 0.0 0.0 -108 1070 0 0.0 0.0 0.0 -109 1080 0 0.0 0.0 0.0 -110 1090 0 0.0 0.0 0.0 -111 1100 0 0.0 0.0 0.0 -112 1110 0 0.0 0.0 0.0 -113 1120 0 0.0 0.0 0.0 -114 1130 0 0.0 0.0 0.0 -115 1140 0 0.0 0.0 0.0 -116 1150 0 0.0 0.0 0.0 -117 1160 0 0.0 0.0 0.0 -118 1170 0 0.0 0.0 0.0 -119 1180 0 0.0 0.0 0.0 -120 1190 0 0.0 0.0 0.0 -121 1200 0 0.0 0.0 0.0 -122 1210 0 0.0 0.0 0.0 -123 1220 0 0.0 0.0 0.0 -124 1230 0 0.0 0.0 0.0 -125 1240 0 0.0 0.0 0.0 -126 1250 0 0.0 0.0 0.0 -127 1260 0 0.0 0.0 0.0 -128 1270 0 0.0 0.0 0.0 -129 1280 0 0.0 0.0 0.0 -130 1290 0 0.0 0.0 0.0 -131 1300 0 0.0 0.0 0.0 -132 1310 0 0.0 0.0 0.0 -133 1320 0 0.0 0.0 0.0 -134 1330 0 0.0 0.0 0.0 -135 1340 0 0.0 0.0 0.0 -136 1350 0 0.0 0.0 0.0 -137 1360 0 0.0 0.0 0.0 -138 1370 0 0.0 0.0 0.0 -139 1380 0 0.0 0.0 0.0 -140 1390 0 0.0 0.0 0.0 -141 1400 0 0.0 0.0 0.0 -142 1410 0 0.0 0.0 0.0 -143 1420 0 0.0 0.0 0.0 -144 1430 0 0.0 0.0 0.0 -145 1440 0 0.0 0.0 0.0 -146 1450 0 0.0 0.0 0.0 -147 1460 0 0.0 0.0 0.0 -148 1470 0 0.0 0.0 0.0 -149 1480 0 0.0 0.0 0.0 -150 1490 0 0.0 0.0 0.0 -151 1500 0 0.0 0.0 0.0 -152 1510 0 0.0 0.0 0.0 -153 1520 0 0.0 0.0 0.0 -154 1530 0 0.0 0.0 0.0 -155 1540 0 0.0 0.0 0.0 -156 1550 0 0.0 0.0 0.0 -157 1560 0 0.0 0.0 0.0 -158 1570 0 0.0 0.0 0.0 -159 1580 0 0.0 0.0 0.0 -160 1590 0 0.0 0.0 0.0 -161 1600 0 0.0 0.0 0.0 -162 1610 0 0.0 0.0 0.0 -163 1620 0 0.0 0.0 0.0 -164 1630 0 0.0 0.0 0.0 -165 1640 0 0.0 0.0 0.0 -166 1650 0 0.0 0.0 0.0 -167 1660 0 0.0 0.0 0.0 -168 1670 0 0.0 0.0 0.0 -169 1680 0 0.0 0.0 0.0 -170 1690 0 0.0 0.0 0.0 -171 1700 0 0.0 0.0 0.0 -172 1710 0 0.0 0.0 0.0 -173 1720 0 0.0 0.0 0.0 -174 1730 0 0.0 0.0 0.0 -175 1740 0 0.0 0.0 0.0 -176 1750 0 0.0 0.0 0.0 -177 1760 0 0.0 0.0 0.0 -178 1770 0 0.0 0.0 0.0 -179 1780 0 0.0 0.0 0.0 -180 1790 0 0.0 0.0 0.0 -181 1800 0 0.0 0.0 0.0 -182 1810 0 0.0 0.0 0.0 -183 1820 0 0.0 0.0 0.0 -184 1830 0 0.0 0.0 0.0 -185 1840 0 0.0 0.0 0.0 -186 1850 0 0.0 0.0 0.0 -187 1860 0 0.0 0.0 0.0 -188 1870 0 0.0 0.0 0.0 -189 1880 0 0.0 0.0 0.0 -190 1890 0 0.0 0.0 0.0 -191 1900 0 0.0 0.0 0.0 -192 1910 0 0.0 0.0 0.0 -193 1920 0 0.0 0.0 0.0 -194 1930 0 0.0 0.0 0.0 -195 1940 0 0.0 0.0 0.0 -196 1950 0 0.0 0.0 0.0 -197 1960 0 0.0 0.0 0.0 -198 1970 0 0.0 0.0 0.0 -199 1980 0 0.0 0.0 0.0 -200 1990 0 0.0 0.0 0.0 -2000 200 -1 0 201 379226 294499 391498 -2 10 200 225664 158128 225366 -3 20 199 89729.6 91659.3 114656 -4 30 198 52263 43100.1 83277 -5 40 197 41706.4 12470.6 66312 -6 50 196 -6108.97 18391.8 42750.5 -7 60 195 -26258.7 13726.3 32185.7 -8 70 194 -22152.2 9020.1 66492.7 -9 80 193 -11119.7 -11075.6 66622.6 -10 90 192 -41003.4 -14013.4 45541.8 -11 100 191 -55128.4 -9875.69 28886.7 -12 110 190 -26632.9 -16308.9 10154.7 -13 120 189 3495.24 -35776.3 34172.9 -14 130 188 16069 -20553 19072.6 -15 140 187 -2210.18 -7545.19 31966.2 -16 150 186 -23081.5 -11218.3 29198.4 -17 160 185 -41552.1 -4232.86 18005.5 -18 170 184 -54599.3 -28179.9 7468.91 -19 180 183 -57246.3 -19520.2 2973.46 -20 190 182 -25649.9 -13599.3 20878.2 -21 200 181 -12290.9 -5604.75 56215.3 -22 210 180 -9716.51 6625.14 29953.7 -23 220 179 -15058.6 16660.8 22565.8 -24 230 178 -1527.55 1227.18 -1772.05 -25 240 177 5860.63 -15860.9 3370.63 -26 250 176 -1073.51 21459.6 -4903.24 -27 260 175 -17501.1 9205.85 -16284.2 -28 270 174 -13479.4 20819.8 9573.44 -29 280 173 4194.59 6455.9 26271.4 -30 290 172 21458.3 -5249.84 41013.8 -31 300 171 2282.33 -19014.9 40359.4 -32 310 170 21188 -35284.8 21529.6 -33 320 169 44751.6 -20768.4 28790.1 -34 330 168 46913.4 -23341.3 13943.2 -35 340 167 52671.9 -12861.5 26321.5 -36 350 166 64926.5 -10776.8 45466.9 -37 360 165 60717.2 -6248.56 44648.7 -38 370 164 26328.6 -9319.43 7123.02 -39 380 163 5993.82 -17853.6 -6130.69 -40 390 162 7425.94 -3032.18 29830 -41 400 161 31254.6 147.995 23582.4 -42 410 160 27135.3 5943.3 40757.8 -43 420 159 -329.137 -14164.5 55348.8 -44 430 158 -31141.5 -16469.7 44594.1 -45 440 157 -2170.71 -11588.4 64328.1 -46 450 156 152.425 -3788.74 25063.8 -47 460 155 -14290.6 5376.75 27698.4 -48 470 154 -14986.8 -11133.6 11936.5 -49 480 153 6868.5 -41261.9 -2441.81 -50 490 152 -3877.6 -44433.3 -1838.17 -51 500 151 -29763.7 -30798.5 -3173.05 -52 510 150 -51259.7 -17958.9 52970.3 -53 520 149 -29515.7 6583.06 52117 -54 530 148 -40197 18999.1 48107.2 -55 540 147 -50817.3 18429.6 72198.6 -56 550 146 -30990.3 29840.7 93520.6 -57 560 145 -52597.3 11180.5 82396.3 -58 570 144 -48920.7 32026.4 37877.8 -59 580 143 -18143.1 -10122.7 80747.7 -60 590 142 35480.8 -273.448 99158.5 -61 600 141 92599.3 15339.3 79520.2 -62 610 140 107831 18105.5 106481 -63 620 139 88872.4 10118.3 115319 -64 630 138 114853 -10692.8 120960 -65 640 137 107315 -24733 95130.6 -66 650 136 66371 -39218.1 83464.8 -67 660 135 1863.29 -15653.6 86651.8 -68 670 134 -16443.7 -11754.9 17630.3 -69 680 133 -7397.26 -26793.1 -5607.52 -70 690 132 -19904.4 -25864.6 4892.9 -71 700 131 -49462.9 -37391.8 14532.3 -72 710 130 -14605.7 -21937.9 33350.5 -73 720 129 26386.6 -13792.1 35486.8 -74 730 128 40654.7 -16375.5 24532.6 -75 740 127 54261 -32995.5 4224.77 -76 750 126 53696.4 -39260.8 810.016 -77 760 125 49383.9 -32705 9545.36 -78 770 124 27812.5 -40293 14911.7 -79 780 123 15786.5 -24124.9 48842.7 -80 790 122 6162.59 -17165.4 59167.5 -81 800 121 -4335.23 14782 45610.5 -82 810 120 -16417.2 14031.6 11993.3 -83 820 119 -6777.95 30283.5 -7775.07 -84 830 118 5040.34 11891.9 28289.3 -85 840 117 9642.93 -9962.17 38307.2 -86 850 116 -24154.3 1685.12 53845 -87 860 115 -56796.2 24540.6 80682.7 -88 870 114 -46242.9 29899.6 81855.9 -89 880 113 -34329.4 16671 86409.5 -90 890 112 -44004.9 1702.47 49203.7 -91 900 111 -65172 6045.9 63397.8 -92 910 110 -48886.1 3328.97 84935.4 -93 920 109 -17506.8 11835.9 93217.7 -94 930 108 -25120.1 -9008.57 83348 -95 940 107 -36675.2 12519.5 99525.5 -96 950 106 -32121.9 4654.51 111987 -97 960 105 18543.4 52638.3 76097.3 -98 970 104 66706 81946.4 69315.9 -99 980 103 68580.1 72681.7 80122.5 -100 990 102 74540.1 51752.9 95741.3 -101 1000 101 68228.5 34852.1 117453 -102 1010 100 36256.6 30222.2 109872 -103 1020 99 8683.73 -7839.46 92155.9 -104 1030 98 25622.9 -32896.3 21573.4 -105 1040 97 41583.3 -38761.1 9351.81 -106 1050 96 82177.5 -48221.6 55537.7 -107 1060 95 51205.8 -51270.6 65408.1 -108 1070 94 44127.4 -40628.3 87315.7 -109 1080 93 13775.6 -16418.8 63593.1 -110 1090 92 30245.1 -2380 7492.76 -111 1100 91 35856.8 -13357.9 4118.78 -112 1110 90 38410.8 -34850.2 -25738.5 -113 1120 89 41240.3 -3636.28 -29609 -114 1130 88 40710 -10926.3 -7645.41 -115 1140 87 -34620.4 5043.66 97182.3 -116 1150 86 -94943.7 17062.3 92661.6 -117 1160 85 -103111 263.09 36345.4 -118 1170 84 -82574.1 30214.9 45342.8 -119 1180 83 -54957.7 41458 31023.3 -120 1190 82 -50441.2 89739.9 34836.6 -121 1200 81 -32308 49654 34451.6 -122 1210 80 -17904.8 55368 60195 -123 1220 79 626.338 63878.5 67022.6 -124 1230 78 36162.7 74103.4 31532.6 -125 1240 77 76446.4 69830 33395 -126 1250 76 74069.8 37717.8 13419 -127 1260 75 51152.2 19615 13845.2 -128 1270 74 7911.02 -16805.5 51248.7 -129 1280 73 3929.86 -47058.6 26612 -130 1290 72 -6297.65 -67939 4152.82 -131 1300 71 -70414.6 -68099.9 21615.3 -132 1310 70 -63787.3 -72208.2 -3760.31 -133 1320 69 16770.6 -66680.5 -9477.17 -134 1330 68 62096.8 -46518.3 -30785.2 -135 1340 67 81460.3 -30244.7 -15742 -136 1350 66 84655.4 5504.52 -23308.8 -137 1360 65 118146 -6970.91 -28809.8 -138 1370 64 138585 49639.6 -5707.48 -139 1380 63 103689 46852.3 -8508.6 -140 1390 62 64664.6 30476.6 -23901.9 -141 1400 61 53346.7 21361.7 -47315.6 -142 1410 60 19315.2 -38673.4 19550.7 -143 1420 59 14338.3 -38281.3 59788.1 -144 1430 58 46643.6 -31300.1 32009.9 -145 1440 57 35644.3 -5632.99 24540.4 -146 1450 56 7720.22 30295.1 64501.1 -147 1460 55 31689.2 22476.7 102198 -148 1470 54 51558.5 -175.202 75479 -149 1480 53 -7815.98 -18833.1 32047.1 -150 1490 52 -32210 -23452.2 43393.3 -151 1500 51 -32598.2 -41015.5 31209.5 -152 1510 50 -22478.1 7385.06 6565.09 -153 1520 49 -48634.7 -32167.1 -10612.4 -154 1530 48 -64939.4 22786.7 39516.6 -155 1540 47 -66360 -4391.05 58089.8 -156 1550 46 -52633.7 -24113.5 44997.9 -157 1560 45 -45854.1 -7882.23 104325 -158 1570 44 11161.3 -21978.5 175648 -159 1580 43 37617.2 34140.3 144695 -160 1590 42 28856.7 14992.4 89843.7 -161 1600 41 49797.3 -4207.39 101096 -162 1610 40 25650.3 -20126.2 181680 -163 1620 39 -50766.2 -55048.1 229790 -164 1630 38 -13439.2 -102321 197469 -165 1640 37 73102.2 -63029.6 77687.5 -166 1650 36 101688 -82087.2 115075 -167 1660 35 78206.8 -62176.2 167000 -168 1670 34 79901.8 -16165.7 72425.3 -169 1680 33 100274 -34343 6665.64 -170 1690 32 74892 -2683.27 31905.3 -171 1700 31 38025.4 -32512 51748 -172 1710 30 67353.9 -42264.3 48347.1 -173 1720 29 162056 -31166 24275.6 -174 1730 28 157641 -60635.5 18465.4 -175 1740 27 96309.6 -4629.73 9596.68 -176 1750 26 -11618 52723.4 -10996.2 -177 1760 25 -60652.4 130258 33538.4 -178 1770 24 -23267 83585.3 68317.3 -179 1780 23 49581.8 168729 116737 -180 1790 22 15366.6 125258 95115.5 -181 1800 21 972.107 185960 96010.1 -182 1810 20 71245.3 142562 111086 -183 1820 19 88754.9 109752 104831 -184 1830 18 21326.8 99639.1 69374.1 -185 1840 17 -18909.3 21174.9 32206.2 -186 1850 16 -29754.7 -52945.9 112123 -187 1860 15 -9089.81 -67504.6 241547 -188 1870 14 -57030.9 -88149.1 155081 -189 1880 13 -53059.1 -20418.6 27054.6 -190 1890 12 51897 42521.6 -19341.1 -191 1900 11 56438.3 -23328.2 25625.8 -192 1910 10 -100261 -17773.1 41360.8 -193 1920 9 -143227 -53737.6 45627.9 -194 1930 8 -132993 -41970.3 39999.2 -195 1940 7 -20122.1 125660 21581.5 -196 1950 6 19649.7 71442.4 -6993.8 -197 1960 5 -7361.82 201204 41059.4 -198 1970 4 22752.7 166251 -19214 -199 1980 3 11641.2 222989 -96472.6 -200 1990 2 -894.094 315689 -191997 -4000 200 -1 0 401 397591 302463 380650 -2 10 400 243742 166470 214492 -3 20 399 127323 87395 112961 -4 30 398 91871.3 61174.1 79381.5 -5 40 397 79894.5 52997.1 71073.9 -6 50 396 48819.8 47994.4 55883.4 -7 60 395 23615 21434.4 32424.5 -8 70 394 13681.2 5303.86 37654.8 -9 80 393 -3407.05 -11571.5 31820.9 -10 90 392 -28946.5 2061.42 13429.7 -11 100 391 -38779.2 2197.9 5815.93 -12 110 390 -10059.3 -5546.05 -3505.52 -13 120 389 9228.13 -7533.02 3208.76 -14 130 388 7442.78 2460.16 5557.42 -15 140 387 -2286.39 -2492.87 26461.4 -16 150 386 870.225 -9584.06 27137 -17 160 385 -10957.6 -5529.72 26999 -18 170 384 -11065.1 -2563.33 28114.9 -19 180 383 8439.42 3339.9 15962.3 -20 190 382 29826.8 845.148 18383.1 -21 200 381 33335.7 5941.92 29962.4 -22 210 380 38639 -975.938 9712.93 -23 220 379 30108.4 12919.2 3957.62 -24 230 378 31709.8 10609.5 -9539.49 -25 240 377 17010 434.765 -17736.3 -26 250 376 1568.14 3441.58 -24844.1 -27 260 375 -1127.48 -9812.36 -31140.6 -28 270 374 -9861.76 2656.11 -11682 -29 280 373 -17853.2 -286.419 7455.88 -30 290 372 -16651.6 -5769.68 12043.2 -31 300 371 -16543.8 -24990.1 16037 -32 310 370 -11990.6 -26922.6 18257 -33 320 369 -2569.37 -5707.51 21918.3 -34 330 368 -1878.64 -479.308 28741.7 -35 340 367 16047.4 1860.5 30907.7 -36 350 366 35483.1 -4640.64 55323.9 -37 360 365 27992.5 7468.45 60198.7 -38 370 364 3487.3 14600.8 28701.4 -39 380 363 -3002.64 2560.07 17271.6 -40 390 362 -11346.2 -392.999 21750.8 -41 400 361 -2146.36 -7233.24 27852.7 -42 410 360 -2649.97 7915.54 35389.5 -43 420 359 -19310.5 16764.2 41936.1 -44 430 358 -32090 7803.63 38316.4 -45 440 357 -14844.4 2784.42 40474.2 -46 450 356 -5339.56 10620.5 16833.9 -47 460 355 -4673.85 23908 28140.7 -48 470 354 -4330.21 1867.44 19848.1 -49 480 353 -10616.7 -19307.8 19184.4 -50 490 352 -20968 -7870.3 17701.5 -51 500 351 -20707.2 -571.066 10807.3 -52 510 350 -16185.7 3615.72 36927.1 -53 520 349 -762.377 17045.6 26947.3 -54 530 348 -19871.4 22025.6 12567.1 -55 540 347 -33506 22127.5 8167.63 -56 550 346 -5055.97 30485.6 7626.75 -57 560 345 -8502.66 28078.2 -4657.27 -58 570 344 -5214.59 41682.9 -31509.8 -59 580 343 -2671.48 21360.7 -10547.2 -60 590 342 21099.1 27709.2 -4704.62 -61 600 341 32589.1 12803.3 -6475.66 -62 610 340 25373.4 14207.6 17525 -63 620 339 3357.67 -5958.75 19543.9 -64 630 338 12947.5 -27577.3 26888.4 -65 640 337 24204.5 -42137 9324.51 -66 650 336 7971.71 -54198.3 17785.2 -67 660 335 -36037.9 -33249.9 34022.6 -68 670 334 -38229.3 -33913.8 -6252.29 -69 680 333 -26513.2 -40785.7 -20036.5 -70 690 332 -39570.9 -24064.1 -3087.31 -71 700 331 -29444.9 -28548.9 6377.12 -72 710 330 -15059.2 -21770.8 12723.6 -73 720 329 -20449 -16959.3 632.277 -74 730 328 -29355.7 -12723.3 -12507.9 -75 740 327 -21800.5 -12688.1 -21676.5 -76 750 326 -3557.39 -12610.1 25476.9 -77 760 325 10379.1 -9357.24 40236.2 -78 770 324 -11023.5 -16315.5 36325.7 -79 780 323 -19182 -6960.29 33005 -80 790 322 -29642.8 2431.06 38740.1 -81 800 321 -29232.7 13563.7 46833.1 -82 810 320 -28619.7 25621.5 25554.5 -83 820 319 -26001.2 17321.8 9233.76 -84 830 318 -31943 8555.58 18728.7 -85 840 317 -56364.8 3054.19 40065.3 -86 850 316 -82553.2 8934.5 47683.3 -87 860 315 -90778.8 18709.4 53270.3 -88 870 314 -83413.1 6492.49 49719.6 -89 880 313 -87894.5 7022.56 38838 -90 890 312 -79104.5 -990.977 36662.2 -91 900 311 -79294 301.449 40937.5 -92 910 310 -53164 12643.3 41802.1 -93 920 309 -49710.5 6496.47 42624.7 -94 930 308 -43016 -4762.42 20228.3 -95 940 307 -43071.5 -1398.58 38959.3 -96 950 306 -17470 -14882.2 36758.1 -97 960 305 11837.3 -8510.68 -14102 -98 970 304 27928.3 3245.38 -34815.5 -99 980 303 33248.2 19036.2 -25028.1 -100 990 302 29481.9 15473.4 -7783.38 -101 1000 301 50626 13943.8 -16421 -102 1010 300 49461.6 6374.05 -22021.8 -103 1020 299 46434.9 -7813.9 -16806.1 -104 1030 298 41785.9 -15263.2 -53051 -105 1040 297 37143 -36831.4 -45938.9 -106 1050 296 54975 -37366.6 -13997 -107 1060 295 34041.7 -47926.7 14288.2 -108 1070 294 10935.7 -50578.8 21483.3 -109 1080 293 -16119.8 -26084.8 29718.8 -110 1090 292 -7546.67 -22384.1 26210.6 -111 1100 291 25160.8 -23064 31176 -112 1110 290 24502 -9700.11 36281.5 -113 1120 289 26515.5 4982.98 25543.5 -114 1130 288 14869.1 -4899.11 2515.48 -115 1140 287 -2271.03 460.808 13894.4 -116 1150 286 -1244.82 2634.76 18055.4 -117 1160 285 3270.25 7390.08 6484.46 -118 1170 284 18938.5 13626 18300.8 -119 1180 283 6625.89 26776.2 17799 -120 1190 282 15438.7 23511.2 7604.29 -121 1200 281 9055.03 3431.58 4726.59 -122 1210 280 2236.84 -2719.12 7101.54 -123 1220 279 26089.7 9228.02 43491.6 -124 1230 278 47850.7 11565.9 40049 -125 1240 277 42253.4 -6552.28 36528.3 -126 1250 276 35663.1 -13585.4 16476.9 -127 1260 275 45025.7 -6890.13 14512.5 -128 1270 274 52800.3 21623.2 47555.4 -129 1280 273 57636.6 24188 39112.7 -130 1290 272 38374.3 1057.74 35071.7 -131 1300 271 15852.2 13854.3 32984.7 -132 1310 270 21974.8 19016.8 13498 -133 1320 269 27101.9 18759 -14085.1 -134 1330 268 12741.2 26151 -36506.2 -135 1340 267 -1953.97 41008.8 -48510 -136 1350 266 -703.442 50611.8 -46942.7 -137 1360 265 -11388.4 54448.4 -40347.8 -138 1370 264 -17610.6 63114 -27762.7 -139 1380 263 -409.412 48474.7 -17960 -140 1390 262 -9032.81 40907.7 -45155.5 -141 1400 261 -30493.3 53585.2 -29029.3 -142 1410 260 -38075.9 15012.6 8704.74 -143 1420 259 -40013.1 -1375.67 1126.97 -144 1430 258 -45188.7 9355.13 -17024.7 -145 1440 257 -57114.6 11137.6 -15268.5 -146 1450 256 -42413.8 13103.1 17495.4 -147 1460 255 3258.41 -15308.3 24081.8 -148 1470 254 14845.4 -22192.6 1437.67 -149 1480 253 11470.4 -37038.2 -26224.3 -150 1490 252 7219.01 -36325 -58167.7 -151 1500 251 31870 -26306.1 -49718.9 -152 1510 250 41474.5 -27806.8 -57781.6 -153 1520 249 49210.1 -20252.3 -50194.5 -154 1530 248 40692.8 -2165.03 -13045.1 -155 1540 247 34169.8 4635.21 -3887.99 -156 1550 246 5731.85 339.154 5130.38 -157 1560 245 -6540.98 -11430.8 5272.4 -158 1570 244 15685 -11116.5 21426.6 -159 1580 243 12362.9 -7247.48 -3963.31 -160 1590 242 12717.3 -29092.8 -27973.1 -161 1600 241 35498.3 -29579.8 3851.58 -162 1610 240 56222.6 -40640.4 18314.6 -163 1620 239 24344.1 -51047.5 19994.6 -164 1630 238 25590.9 -46924.4 2649.36 -165 1640 237 36259.8 -46183.8 -24251.3 -166 1650 236 16609.9 -46485.3 -24140.4 -167 1660 235 -13732.5 -35965.5 -42629 -168 1670 234 20.6565 -5494.75 -41592.4 -169 1680 233 -3936.05 10952 -16188.9 -170 1690 232 -2659.6 33769 -21093.7 -171 1700 231 -24392.8 21829.7 -21711.8 -172 1710 230 -24806.8 34803.3 6524.75 -173 1720 229 13421.8 47221.9 6194.98 -174 1730 228 25815.1 47383.1 15341.2 -175 1740 227 51051.1 24061.2 16112.1 -176 1750 226 43190.9 -6951.73 6835.64 -177 1760 225 26753.4 5926.78 26804.3 -178 1770 224 4896.76 16591 17218.6 -179 1780 223 7275.22 21792.8 -15718.3 -180 1790 222 -3688.07 17768 -33182.7 -181 1800 221 23001.4 14799.2 -19167.6 -182 1810 220 30574.5 9126.84 2732.37 -183 1820 219 22370.7 6619.87 3589.21 -184 1830 218 11643.2 -10734.8 -522.484 -185 1840 217 -14450.9 -44363.1 -22654.7 -186 1850 216 -31806.8 -47267.4 -28143.2 -187 1860 215 -4510.92 -19805.7 -45964.3 -188 1870 214 26562.3 -34295.3 -67627.4 -189 1880 213 8735.66 -25389.8 -56592 -190 1890 212 -23587.9 3800.61 -45560.8 -191 1900 211 -30576.4 1548.56 -29479.9 -192 1910 210 -30425.3 12789.4 -25219.5 -193 1920 209 2454.09 22227.2 -43597.5 -194 1930 208 39945.8 8513.78 -21211 -195 1940 207 37836.7 -22.6554 4184 -196 1950 206 4188.16 15006 5343.77 -197 1960 205 -16582.5 29687.4 30864.3 -198 1970 204 -39452.1 7305.56 22252.8 -199 1980 203 -34250.5 923.959 11522.7 -200 1990 202 -33975.1 -496.995 10012.3 -6000 200 -1 0 601 392198 330899 388176 -2 10 600 229265 188670 226573 -3 20 599 116939 118117 119032 -4 30 598 87804 90619.5 83315.1 -5 40 597 82135.6 75339.7 79024.1 -6 50 596 67691.8 58869.4 59144.3 -7 60 595 42376.7 38218 29828.3 -8 70 594 30306.6 28297.2 31909.8 -9 80 593 26931.5 5879.55 25061.3 -10 90 592 6378.47 9748.69 1989.44 -11 100 591 -4516.88 1024.68 -13573.3 -12 110 590 4045.31 -2501.94 -22211.4 -13 120 589 11010.7 -4884.56 -19762.2 -14 130 588 25337.6 -1651.18 -14969.3 -15 140 587 24807.4 -1772.03 6216.45 -16 150 586 20261.9 -13295.7 17183.2 -17 160 585 14620.2 -7176.9 10943.5 -18 170 584 15889.3 -11285.3 6312.28 -19 180 583 29662.4 -9004.7 1866.27 -20 190 582 36601.8 -5371.67 16980.9 -21 200 581 28568.9 6437.81 37210.8 -22 210 580 38133.6 204.002 17177.9 -23 220 579 30006.9 7697.88 7193.46 -24 230 578 34685 8315.97 -4004.07 -25 240 577 19791.8 1225.57 -9152.87 -26 250 576 -11072.7 7836.77 -17749.7 -27 260 575 -14863.9 2122.06 -21139.2 -28 270 574 -11209.6 16977.3 -2221.54 -29 280 573 -19094.9 8201.6 17043.2 -30 290 572 -22401.9 4120.78 21447.7 -31 300 571 -28583.3 -14223.5 16043 -32 310 570 -24463.1 -20534.4 4147.95 -33 320 569 -3656.69 -13303 4369.5 -34 330 568 -13125.8 -7996.41 11185 -35 340 567 -5040.23 709.515 18957.7 -36 350 566 8332.48 277.108 28397.4 -37 360 565 10083.5 13010.1 21419.6 -38 370 564 -2625.92 20621.5 -1447.32 -39 380 563 -12002.9 13713 -1080.95 -40 390 562 -32998.7 10056.3 3329.93 -41 400 561 -17716.3 557.873 6484.66 -42 410 560 -6710.59 11941.9 13346.5 -43 420 559 -13191.9 16465.8 24747.1 -44 430 558 -20639.7 12778.8 27198.1 -45 440 557 -12833.7 9321.19 20503.1 -46 450 556 -11669 15657.7 4436.1 -47 460 555 -944.115 23330.1 19447 -48 470 554 -1766.28 20193.7 24975.7 -49 480 553 -26674.8 10738.7 26483.2 -50 490 552 -35455.6 16767.6 23525.5 -51 500 551 -25880.8 27349.2 18691.2 -52 510 550 -4806.27 31023.4 33319.4 -53 520 549 5483.59 36119.8 34561.7 -54 530 548 -20043.7 35356.3 31755 -55 540 547 -31773.7 29743.3 34543.1 -56 550 546 -17855.9 21116 25956.6 -57 560 545 -25259.5 25049.1 2643.85 -58 570 544 -15287.3 25885.8 -21576.7 -59 580 543 -10690.4 15471 114.869 -60 590 542 11218.3 15943.8 52.4801 -61 600 541 17447.6 1892.38 -2805.8 -62 610 540 12497.4 2294.6 21543.1 -63 620 539 -3426.35 -10553.5 35731.7 -64 630 538 -3335.87 -15218.1 37418.1 -65 640 537 8149.83 -20834.5 14635.2 -66 650 536 7787.01 -25102.9 8631.16 -67 660 535 -21182.9 -10348.2 12028 -68 670 534 -21486.6 -9210.05 -13166.7 -69 680 533 -11404.1 -27800.2 -12160.1 -70 690 532 -17117 -31626.4 5319.27 -71 700 531 382.194 -32342.8 13831.6 -72 710 530 -10436.6 -22199.3 12835.8 -73 720 529 -20092.9 -13667.8 -8507.58 -74 730 528 -9117.52 -13614.9 -18032.5 -75 740 527 5016.6 -5719.02 -18740.7 -76 750 526 11302 401.107 7320.35 -77 760 525 -851.79 2311.98 8275.4 -78 770 524 -27431.9 4015.99 -1636.11 -79 780 523 -18359.5 16157.8 7013.86 -80 790 522 -22209.9 19091.1 10014.8 -81 800 521 -29922 18421.7 19735.6 -82 810 520 -21147.6 36485.7 9099.85 -83 820 519 -22707.8 34801.4 2781.85 -84 830 518 -15067.1 40833.5 9596.96 -85 840 517 -23434.6 37458.7 16714.2 -86 850 516 -37810 40401.3 28864.3 -87 860 515 -43792.2 44068.8 32036.3 -88 870 514 -37692.8 45677.4 24831.2 -89 880 513 -34984.9 48842.9 14397.3 -90 890 512 -21517.9 47822.5 26286.1 -91 900 511 -35566.1 46889.4 38478.7 -92 910 510 -29475.8 53713.5 27575.4 -93 920 509 -27025.5 39457.9 22462.2 -94 930 508 -19692.2 40040.3 11338.9 -95 940 507 -30371.3 44816.8 26264.6 -96 950 506 -25743.8 31213.3 10831.1 -97 960 505 -5679.99 19664.1 -31528.7 -98 970 504 11674.8 24303.4 -37434.8 -99 980 503 3930.04 30837.3 -23399 -100 990 502 -13596.1 20450.9 -6534.74 -101 1000 501 -8316.93 28972.8 -3698.64 -102 1010 500 14462.6 27449.3 -6844.62 -103 1020 499 31058.2 23628.2 -3069.89 -104 1030 498 17316.5 12963.8 -30579.5 -105 1040 497 10462.5 -3910.72 -15550.5 -106 1050 496 27291.7 -1601.37 8751.46 -107 1060 495 24680.2 -9653.23 22244.3 -108 1070 494 8998.02 -17864.3 26170.3 -109 1080 493 -16138.3 -1540.53 38911.3 -110 1090 492 -18070.4 16164 43329.5 -111 1100 491 18635.6 11269.4 33621.1 -112 1110 490 36156.6 3562.92 14913.4 -113 1120 489 22618.7 18676.8 9307.85 -114 1130 488 -3168.08 18021.2 6424.54 -115 1140 487 -22604.3 22169 14740.7 -116 1150 486 -25931.8 18534.1 10216.6 -117 1160 485 -22408.1 26343.4 -2020.62 -118 1170 484 -4036.13 32546.6 12528.7 -119 1180 483 -15221.9 26833.2 5534.11 -120 1190 482 1159.08 12872.4 -3702.63 -121 1200 481 7063.83 539.979 -8605.15 -122 1210 480 -5637.38 -7238.47 -524.092 -123 1220 479 -6252.44 -5831.27 24541.4 -124 1230 478 12401.6 198.545 33384.2 -125 1240 477 32511.5 -5645.39 22586.4 -126 1250 476 41559 -3773.76 -5093.12 -127 1260 475 33079.6 6284.79 -15812.1 -128 1270 474 35918.2 16790.1 4738.4 -129 1280 473 23784.6 19661.2 5699.34 -130 1290 472 10434.3 19085.2 6106.35 -131 1300 471 -1382.28 29947.8 -4580.11 -132 1310 470 -2973.28 38572.2 -25123.8 -133 1320 469 -1162.34 35814.4 -28846.1 -134 1330 468 2344.55 27582.6 -36081.1 -135 1340 467 -3800.65 30638.5 -44741.1 -136 1350 466 -13721 42521.7 -49458.5 -137 1360 465 -25310.5 43482.5 -34246.3 -138 1370 464 -31828 52974.8 -19228.7 -139 1380 463 -18596.6 45898.6 -18498.6 -140 1390 462 -33921.6 42321.6 -32297.2 -141 1400 461 -35884 35645.9 -19973.5 -142 1410 460 -28892 20017.7 9565.27 -143 1420 459 -23839.2 13588.9 3396.52 -144 1430 458 -23272.7 24404.6 -8548.97 -145 1440 457 -27124.3 26816.3 -16707.5 -146 1450 456 -22310 17914.4 -17820.5 -147 1460 455 -9236.4 -6439.33 -22633.5 -148 1470 454 -2327.1 -15046.2 -30873 -149 1480 453 7891.19 -11342.2 -40874.8 -150 1490 452 -9171.68 -8891.14 -56759 -151 1500 451 -13234.5 -4710.75 -50248 -152 1510 450 -11917.2 -6306.35 -41943.2 -153 1520 449 -2305.13 -824.543 -22665 -154 1530 448 1524.48 1025.38 5036.71 -155 1540 447 5699.42 1907.56 3171.22 -156 1550 446 -11981 10985.2 18861.2 -157 1560 445 -30486.1 5121.74 32184.1 -158 1570 444 -9011.26 -5684.78 34327.7 -159 1580 443 -7453.27 -1148.68 3341 -160 1590 442 4548.15 -13866.1 -22270.1 -161 1600 441 5231.36 -27056.5 917.459 -162 1610 440 13505.5 -24824 4965.09 -163 1620 439 -2323.43 -31400.4 -7604.78 -164 1630 438 5043.86 -40161.7 -18188 -165 1640 437 9715.98 -49337.6 -49256.3 -166 1650 436 -965.072 -37827.2 -56352.2 -167 1660 435 -458.92 -21201.9 -67609.7 -168 1670 434 15475.5 -11025.5 -58099.5 -169 1680 433 15446.5 5363.68 -35879 -170 1690 432 4611.03 13718 -33323.3 -171 1700 431 -6897.16 7134.89 -15835.8 -172 1710 430 13886.5 6427.05 16369 -173 1720 429 25496.7 25816.4 15407.1 -174 1730 428 8239.41 29660.2 13289.9 -175 1740 427 23814.2 15539.9 5897.65 -176 1750 426 34568.4 12246.5 17397.4 -177 1760 425 40087 32039.3 27910.5 -178 1770 424 23078.8 34409.5 13420.5 -179 1780 423 25974.8 41881.3 -12874.2 -180 1790 422 20259.9 43409.9 -14435 -181 1800 421 31842.5 40039.2 -12138.7 -182 1810 420 33163.6 38125.6 -13073.4 -183 1820 419 34566.8 35608.3 -31895.2 -184 1830 418 15770.5 8017.36 -39180.6 -185 1840 417 6667.75 -17757.3 -34215.7 -186 1850 416 5904.59 -15228.5 -33214.5 -187 1860 415 23973.8 -6307.2 -39423.8 -188 1870 414 43399 -18715.8 -53857.6 -189 1880 413 36173.2 -18516 -53465.1 -190 1890 412 17215.8 -8392.53 -46572.7 -191 1900 411 10695.4 -15188.1 -32143.3 -192 1910 410 5162.41 -9795.89 -24285.8 -193 1920 409 41130.9 -3181.9 -29903.4 -194 1930 408 61454.1 6264.84 -18136.3 -195 1940 407 58862.9 10942.2 -2704.99 -196 1950 406 54292.3 29094.6 -3132.57 -197 1960 405 25968.3 35776.1 5487.91 -198 1970 404 18314.3 26952.6 -2117.64 -199 1980 403 24517.1 27126.4 -6985.64 -200 1990 402 31055.6 16741.2 -11918.4 -8000 200 -1 0 801 388653 343308 378369 -2 10 800 230126 197593 224206 -3 20 799 124000 114330 128574 -4 30 798 90504.9 83740.5 97252 -5 40 797 85781.9 70614.5 88650.2 -6 50 796 69963.1 59479.3 77052.4 -7 60 795 47926.9 42868.7 49353.3 -8 70 794 35958.5 30634.9 38374.6 -9 80 793 32208 6283.84 28242.6 -10 90 792 9686.01 5397.46 12340 -11 100 791 -3315.46 577.253 -2840.65 -12 110 790 1634.88 -7468.9 -15177.2 -13 120 789 6014.88 -16579.1 -20567.8 -14 130 788 9172.47 -18820.3 -16204.1 -15 140 787 6520.24 -16108.3 4171.01 -16 150 786 3263.99 -25008.9 14330.2 -17 160 785 -4069.16 -22074.4 11198.3 -18 170 784 -456.773 -18372.6 1114.27 -19 180 783 10256 -11092.4 -2655.26 -20 190 782 15345.5 -1754.16 10208.4 -21 200 781 9907.53 12985.4 23444 -22 210 780 14239.1 11161.5 10266.6 -23 220 779 -21.6363 19129.5 -1642.87 -24 230 778 12904.5 12076.4 -11554.5 -25 240 777 4971.03 3620.37 -18180.8 -26 250 776 -14965.4 17092.7 -27873.9 -27 260 775 -16715.3 18277.5 -29035 -28 270 774 -4759.84 29313.2 -14339.2 -29 280 773 -12734.4 15082.8 5062.08 -30 290 772 -16321.9 -1163.21 8259.17 -31 300 771 -12063.5 -20375.9 8901.94 -32 310 770 -6126.2 -28832.9 536.386 -33 320 769 10581.7 -25130.1 -113.644 -34 330 768 709.703 -28313.3 11612.5 -35 340 767 5449.44 -31342.1 19127.9 -36 350 766 13021.2 -33955.2 31105.3 -37 360 765 12457.1 -24837.1 28938.4 -38 370 764 4819.12 -18756.1 12485.8 -39 380 763 5858.57 -23363.8 8896.64 -40 390 762 -10915.5 -18389.6 9035.07 -41 400 761 -3075.03 -16027.5 7721.7 -42 410 760 9364.79 -2785.11 9710.87 -43 420 759 11420.4 2260.8 19460.5 -44 430 758 1302.18 -2603.34 22292.5 -45 440 757 5399.47 725.077 19237 -46 450 756 4783.5 18254 14015.8 -47 460 755 16165.8 39073.7 22148 -48 470 754 16278.7 45799.6 28600.2 -49 480 753 -1901.77 38003.9 33613.1 -50 490 752 -9087.29 36838.8 33269.7 -51 500 751 -36.4027 40336.2 33625.9 -52 510 750 16808.2 42055.7 43414.1 -53 520 749 18094.2 49129.2 40616.9 -54 530 748 5348.03 50362.5 40289.4 -55 540 747 -1993.99 41835.9 46423.4 -56 550 746 2830.72 26351.1 38437.2 -57 560 745 -15809.2 17802.5 15644.3 -58 570 744 -3963.73 11708.4 -11749 -59 580 743 1023.58 2106.23 4503.74 -60 590 742 12718.2 -2152.72 1324.36 -61 600 741 7107.19 -10648.7 -4394.03 -62 610 740 1338.15 -12984.4 12204.8 -63 620 739 -9195 -22691.3 18410.8 -64 630 738 -9423.7 -24960.5 23254.1 -65 640 737 -6689.51 -28624.7 10745.9 -66 650 736 -3650.64 -27605 10468.7 -67 660 735 -29732.5 -5917.52 11304 -68 670 734 -28475.3 7814.8 -5489.92 -69 680 733 -18650.9 -14959.7 -5109.77 -70 690 732 -24650.7 -17833.4 7469.25 -71 700 731 -16680.4 -6686.12 10478.2 -72 710 730 -22593.7 6295.25 12799 -73 720 729 -31307.5 16626.6 -13289.7 -74 730 728 -21772 22163 -24473.8 -75 740 727 -4543.68 29400.2 -25203.5 -76 750 726 375.611 25355.1 -7709.22 -77 760 725 -6671.09 15769.5 -11565.5 -78 770 724 -19066.6 13170.1 -21357.5 -79 780 723 -5894.78 14983.3 -15971.9 -80 790 722 -10324.8 9756.85 -15042.1 -81 800 721 -12972.8 6472.76 -1207.32 -82 810 720 -3893.7 16916.7 -7516.83 -83 820 719 1733.9 9701.95 -9162.63 -84 830 718 10571.2 1194 -931.354 -85 840 717 11138.4 -3449.23 9401.22 -86 850 716 6784.99 -1657.92 26035.1 -87 860 715 366.986 -3326.25 34294 -88 870 714 -3207.73 -3439.31 29831.3 -89 880 713 -2746.18 8818.07 26539 -90 890 712 -361.653 5517.94 36730.6 -91 900 711 -16848.3 -2155.94 40593.3 -92 910 710 -18899.2 10253.8 35976.8 -93 920 709 -14837.1 12575 31469.2 -94 930 708 -10821.4 24707.9 29216.1 -95 940 707 -15006.4 38786.1 38233.7 -96 950 706 -9298.19 35019.2 16825.8 -97 960 705 4221.39 19377.6 -11591.6 -98 970 704 14423.4 23039.7 -11019.3 -99 980 703 223.009 33260.7 -4857.47 -100 990 702 -12825.3 35481.7 2469.06 -101 1000 701 -6938.33 43426.3 -1875.24 -102 1010 700 11690.9 36752.5 -6672.27 -103 1020 699 24750.9 28182.2 -4493.54 -104 1030 698 11380.8 10580.9 -19260.5 -105 1040 697 8475.39 -4848.34 -8082.28 -106 1050 696 25544.8 -5911.25 5823.53 -107 1060 695 21313.8 -15553.9 17453.2 -108 1070 694 7497.48 -24034.8 18125.8 -109 1080 693 -9645.15 -13532.5 27159.6 -110 1090 692 -6805.79 -8671.02 28795.4 -111 1100 691 22237.2 -14743 21753.6 -112 1110 690 40461.1 -15593.7 -253.611 -113 1120 689 33755.7 311.861 -2609.38 -114 1130 688 15537.3 7923.24 1754.82 -115 1140 687 -4027.4 11092.2 5740.54 -116 1150 686 -3681.39 2856.45 -1172.79 -117 1160 685 -8035.93 13339.9 -8737.38 -118 1170 684 6061.93 27396.1 -1076.73 -119 1180 683 1283.96 28275.8 1552.72 -120 1190 682 14464.6 28056.8 752.144 -121 1200 681 20091.6 23715.6 -6869.82 -122 1210 680 438.145 26513 -3165.92 -123 1220 679 -4143.98 32263.8 13361.2 -124 1230 678 7340.77 34378.3 16573 -125 1240 677 18575.3 25037.1 11118.8 -126 1250 676 23311.6 15298.6 -12407.2 -127 1260 675 22012.9 9972.14 -26758.5 -128 1270 674 23950.9 17872.3 -13422.9 -129 1280 673 28485.9 27428 -16757.2 -130 1290 672 18295.1 20532.9 -12249.7 -131 1300 671 6143.58 21385.9 -22395.2 -132 1310 670 5497.07 22835.4 -46261.3 -133 1320 669 6311.59 19389.5 -48168.8 -134 1330 668 4010.37 10965.5 -43172.2 -135 1340 667 -4460.04 9379.84 -37729.6 -136 1350 666 -10939.6 13567.8 -42644.9 -137 1360 665 -10997.7 5684.85 -31526.4 -138 1370 664 -10528.8 16925.1 -23935.2 -139 1380 663 8245.46 20967.3 -22873.6 -140 1390 662 -3171.55 22071.1 -25975.5 -141 1400 661 -10294.8 18224.4 -7850.27 -142 1410 660 -11857.9 19043.6 11773.2 -143 1420 659 -10947.5 17376 6876.05 -144 1430 658 -6581.69 18806.7 -263.453 -145 1440 657 -14371.5 22893.5 -5291.65 -146 1450 656 -5623.26 17623.3 -7972.26 -147 1460 655 3134.49 7766.76 -15176.6 -148 1470 654 9283.65 1475.77 -15037.3 -149 1480 653 17013.9 5750.75 -19117.3 -150 1490 652 2459.78 5750.79 -32469.1 -151 1500 651 -7344.87 -8834.28 -24297 -152 1510 650 -2122.49 -13039.5 -10154 -153 1520 649 5424.5 -14150.8 8183.75 -154 1530 648 5864.74 -16774.5 26635.6 -155 1540 647 9974.57 -16924.7 22715.3 -156 1550 646 2930.11 -7591.26 42343 -157 1560 645 -8624.46 -24031.5 56135 -158 1570 644 3077 -38635.9 58766.9 -159 1580 643 6467.05 -32684.4 38883.9 -160 1590 642 7485.53 -42541 14670.3 -161 1600 641 6952.68 -54324.7 30859.2 -162 1610 640 7195.78 -54122.9 25635 -163 1620 639 -1489.38 -53066.8 11432.7 -164 1630 638 5998.97 -60493.8 -3714.19 -165 1640 637 6840.4 -63241.3 -25042.8 -166 1650 636 -5843.67 -52187.3 -39289.7 -167 1660 635 3023.69 -32578 -52733.7 -168 1670 634 11511.9 -24676 -46761.1 -169 1680 633 12860.3 -9607.88 -34506.8 -170 1690 632 10353 2729.73 -34969.3 -171 1700 631 9269.86 1460.11 -33461.2 -172 1710 630 11644.6 7227.37 -6869.49 -173 1720 629 29380.1 18947.2 -10662.6 -174 1730 628 9468.81 25241.1 -10762.7 -175 1740 627 11748.8 17128.4 -8439.2 -176 1750 626 18594.6 11167.5 -5749.87 -177 1760 625 17526.1 25006.9 1687.82 -178 1770 624 5517.55 20101.9 -7068.48 -179 1780 623 11095.5 22340.3 -20230.9 -180 1790 622 -2992.17 18842.2 -17511.8 -181 1800 621 106.904 15433.1 -15730.4 -182 1810 620 2352.51 16791.3 -18717.6 -183 1820 619 8432.19 22141.1 -32163.8 -184 1830 618 -2137.41 10496.1 -35551.3 -185 1840 617 -15209.5 -9781.8 -31176 -186 1850 616 -9454.29 -11384.4 -32175.1 -187 1860 615 13988.4 -7187.12 -37759.4 -188 1870 614 34440.1 -20901.3 -29510.9 -189 1880 613 23383 -14295.4 -25441.6 -190 1890 612 11270.5 -1664.42 -22284 -191 1900 611 6836.28 -2223.42 -19259.4 -192 1910 610 648.376 -1325.66 -24815.5 -193 1920 609 25559.9 762.67 -23779.6 -194 1930 608 49951.6 12650.9 -14082.6 -195 1940 607 47541.3 21914.2 -524.427 -196 1950 606 44790.4 42120.4 -653.953 -197 1960 605 28972.7 45556.8 -2574.68 -198 1970 604 25702.3 23337.1 -4488.36 -199 1980 603 30597.1 19423.3 -10065.7 -200 1990 602 39881.5 9700.31 -19234.5 -10000 200 -1 0 1001 409755 346607 412102 -2 10 1000 243579 197789 257875 -3 20 999 126266 109782 156050 -4 30 998 88384.9 71504 115273 -5 40 997 77362.5 54053.7 93925.4 -6 50 996 54721.1 41067.6 75507.8 -7 60 995 37071.5 28293.7 47295.1 -8 70 994 27480.7 20195.2 40623 -9 80 993 30267.2 134.316 34356.4 -10 90 992 11516.5 -3673.75 21021.4 -11 100 991 2386.66 -10547.6 5444.95 -12 110 990 2838.49 -14311.6 -10035.2 -13 120 989 -1902.34 -21129.8 -16152.3 -14 130 988 2600.49 -17258 -17699.5 -15 140 987 8506.65 -12676.7 -8831.36 -16 150 986 7444.08 -10826.5 1774.75 -17 160 985 -1890.29 -9374.44 1362.2 -18 170 984 1876.14 -6638.79 -6618.11 -19 180 983 6972.25 4109.32 -10537.1 -20 190 982 10319.8 16400.4 3371.34 -21 200 981 3916.7 26824.1 15214.8 -22 210 980 5782.96 17455.3 4604.07 -23 220 979 -11131 17450.6 -5716.54 -24 230 978 3823.59 5959.3 -13797.7 -25 240 977 -10891.5 -7541.32 -15793.5 -26 250 976 -30415 4421.27 -23213.7 -27 260 975 -34909.8 13927.1 -28303 -28 270 974 -15138.7 26997.1 -21633.8 -29 280 973 -7640.85 17918.3 -5181.36 -30 290 972 -2090.11 3216.64 3998.43 -31 300 971 -7074.98 -14144.1 3174.78 -32 310 970 -2683.33 -18513 -3552.98 -33 320 969 11531.9 -23881.5 4157.91 -34 330 968 10482.7 -23212.5 21503.3 -35 340 967 17503 -21545.1 28677.1 -36 350 966 16729.7 -17290.3 38835.3 -37 360 965 8778.34 -7594.75 38174.8 -38 370 964 2292.25 -956.311 22073.6 -39 380 963 5078.11 -8944.23 13264.6 -40 390 962 -12103.7 -10004.4 7652.49 -41 400 961 -16477.8 -9990.24 3987 -42 410 960 -14806.1 -4389.04 6311.08 -43 420 959 -3192.46 2492.4 13277.9 -44 430 958 -1795.57 622.448 14653.1 -45 440 957 1010.5 162.212 9551.71 -46 450 956 -6943.39 9810.82 10364.3 -47 460 955 4447.26 31693.1 21233 -48 470 954 4777.62 32618.2 21508.4 -49 480 953 -2427.91 27168.5 19378.6 -50 490 952 -7195.13 27865.1 14778.3 -51 500 951 -4119.7 33124 13445.9 -52 510 950 2158.52 38285.1 19252.7 -53 520 949 9431.97 40802.6 26241.6 -54 530 948 3568.92 39207.7 32881.2 -55 540 947 -3106.97 30426.7 45691.6 -56 550 946 -6576.52 19355.6 41833.7 -57 560 945 -22338.8 19844.4 19124.4 -58 570 944 -12104.3 20487.8 821.963 -59 580 943 -15872.7 10457.6 10225.1 -60 590 942 -13820.3 539.274 8433.04 -61 600 941 -14438.9 -12928.6 1537.37 -62 610 940 -10001.7 -12637.7 18609.7 -63 620 939 -10265.2 -12399 35258.4 -64 630 938 -7235 -12154.5 39398.1 -65 640 937 -7442.14 -15423.3 32242.2 -66 650 936 543.112 -17157.2 31063.8 -67 660 935 -17238.2 -6034.27 31473.1 -68 670 934 -23877.2 -2353.31 17953.6 -69 680 933 -20912.9 -17810.9 13445.1 -70 690 932 -21599.2 -17246.7 18474.4 -71 700 931 -16046.7 -5511.51 17262.2 -72 710 930 -12288.8 8144.22 15885.7 -73 720 929 -9799.2 17220.4 -6075.86 -74 730 928 -1269.14 23022.4 -16283.5 -75 740 927 -417.594 27067.5 -16922.2 -76 750 926 -2132.78 19168.6 -812.943 -77 760 925 1711.46 14886.2 -1957.78 -78 770 924 -3946.25 17410 -14829.6 -79 780 923 -932.684 21763.6 -13407.5 -80 790 922 -9638.02 12026.9 -15180.1 -81 800 921 -6998.88 10942.2 -8071.91 -82 810 920 6161.11 12351.6 -8136.29 -83 820 919 16705.1 6775.35 -6208.87 -84 830 918 24635.7 3627.67 2910.85 -85 840 917 22719 2461.54 7403.11 -86 850 916 15055.1 3926.7 17067.5 -87 860 915 12972.9 -3653.16 23570.1 -88 870 914 8130.48 -14180 17907.6 -89 880 913 -685.662 -5415.95 17999.8 -90 890 912 -7167.87 -6353.46 28835.6 -91 900 911 -14910.2 -5017.98 35316.1 -92 910 910 -12519 16963.4 32540.1 -93 920 909 -8931.96 20920.2 26603 -94 930 908 -9511.43 35122.5 18911.7 -95 940 907 -10375.6 42479.2 20912.4 -96 950 906 -2575.67 32053.5 504.123 -97 960 905 12248.7 12199.5 -16236.1 -98 970 904 19923 12485.1 -8845.09 -99 980 903 4922.9 27327.5 2551.43 -100 990 902 -8273.47 34902.4 14538.4 -101 1000 901 -2061.66 38834.6 13876 -102 1010 900 9476.07 27624 7112.49 -103 1020 899 16567.2 16739.3 11961.7 -104 1030 898 12128 866.193 2901.96 -105 1040 897 18233.9 -12936.3 15847.7 -106 1050 896 38168.5 -14541.4 27955.4 -107 1060 895 27799.7 -21530.3 36174.6 -108 1070 894 12151.3 -25971 38680.1 -109 1080 893 -4262.58 -12280.4 47331.3 -110 1090 892 -4963.5 -2190.57 53106.9 -111 1100 891 20248.9 -3200.32 45234.6 -112 1110 890 38852 -836.831 28691.1 -113 1120 889 23648.4 10510.8 20891.3 -114 1130 888 4261.47 21720.9 16574.1 -115 1140 887 -12855.3 18132.7 19193.6 -116 1150 886 -1797.63 4229.63 8613.72 -117 1160 885 -7565.97 11295.1 364.834 -118 1170 884 -4418.74 22393.2 3576 -119 1180 883 -12645.7 22459.2 6597.46 -120 1190 882 2601.57 25492.8 10472.4 -121 1200 881 -220.887 30179.5 3420.7 -122 1210 880 -20417.2 37086.7 8069.07 -123 1220 879 -28611.3 41436.2 20195.4 -124 1230 878 -16055.7 30076.3 23887.4 -125 1240 877 -7857.39 14171.8 21768.2 -126 1250 876 10270.5 3868.31 15.4366 -127 1260 875 20064.9 5101.99 -14269 -128 1270 874 12106.2 7290.2 -8251.39 -129 1280 873 7965.9 17664 -16995.6 -130 1290 872 6404.17 7045.73 -11738.5 -131 1300 871 -1165.69 3388.22 -16053.1 -132 1310 870 -3807.33 1979.79 -34013.4 -133 1320 869 623.335 -567.904 -38110.5 -134 1330 868 7817.78 -3198.72 -33706.6 -135 1340 867 6954.07 43.4985 -32613.4 -136 1350 866 -2953.21 10360.9 -25908.8 -137 1360 865 -11983.4 8930.42 -13021 -138 1370 864 -18374.9 16656.5 -8773.87 -139 1380 863 8686.41 19831.4 -4719.26 -140 1390 862 4913.05 23022.6 617.549 -141 1400 861 5416.36 21794.6 17604.9 -142 1410 860 4361.51 30047.2 26084.9 -143 1420 859 8812.55 24741.7 20969.4 -144 1430 858 8211.74 20116.1 19637 -145 1440 857 2039.66 24261.8 22653.7 -146 1450 856 2779.12 18866.7 28609.4 -147 1460 855 11462.5 4798.51 20683.6 -148 1470 854 8833.73 2524.28 8927.57 -149 1480 853 11090.5 8005.11 4106.77 -150 1490 852 -1604.73 3743.5 -12376 -151 1500 851 -10919 -12303.7 -12234.4 -152 1510 850 -16218.2 -17077.4 -4004.53 -153 1520 849 -11312 -17392.1 2343.32 -154 1530 848 -3330.95 -20478.4 10926.3 -155 1540 847 811.726 -14322.7 5997.88 -156 1550 846 -14578.3 -5545.5 25057.3 -157 1560 845 -25532 -16749.2 39058.8 -158 1570 844 -15685.1 -28133.3 45749.3 -159 1580 843 -10138.1 -21970.8 32766.9 -160 1590 842 -6635.73 -31296.8 18059.3 -161 1600 841 -7343.34 -45190 29409.7 -162 1610 840 1534.85 -44166.3 15948.6 -163 1620 839 1642.96 -43990.4 -3043.4 -164 1630 838 11284.8 -43539 -19335.1 -165 1640 837 5874.24 -44048.8 -34824.3 -166 1650 836 -7458.29 -42634.1 -37862.6 -167 1660 835 -10851.3 -27625.8 -37181.6 -168 1670 834 -4726.38 -20177.9 -30108.1 -169 1680 833 2057.1 -10108.4 -19260.7 -170 1690 832 11733.2 -1003.45 -18088.3 -171 1700 831 15492.6 -4589.96 -23043.8 -172 1710 830 23562.7 -161.095 -8638.05 -173 1720 829 39699.6 17414.3 -4112.04 -174 1730 828 20886.3 27589.3 2964.75 -175 1740 827 20352.8 20713.7 8091.52 -176 1750 826 23969.7 11067 21428.8 -177 1760 825 30470.4 26483.8 25174.4 -178 1770 824 27036.7 19660.5 12282.9 -179 1780 823 33658.5 16265.8 2813.29 -180 1790 822 21533.9 11090.4 -7458.39 -181 1800 821 25543.7 4522.06 -9571.32 -182 1810 820 24738.7 4263.6 -9512.55 -183 1820 819 28282 7366.81 -23765.9 -184 1830 818 12188.7 6226.02 -23953.5 -185 1840 817 -4649.13 4709.71 -24842.3 -186 1850 816 -5995.59 3625.56 -24018.6 -187 1860 815 9788.23 5557.77 -30395.5 -188 1870 814 22902.3 -9249.96 -30413.5 -189 1880 813 25302.8 -12695 -26183.8 -190 1890 812 13988.1 -4828.42 -23543.5 -191 1900 811 8827.8 -4457.89 -18796.9 -192 1910 810 9505.98 4037.91 -15329.4 -193 1920 809 26798.8 13793.6 -18749.1 -194 1930 808 35075.5 25743.2 -17078.6 -195 1940 807 31330.1 31805.1 -5768.46 -196 1950 806 37587.5 37609.4 -9371.45 -197 1960 805 23753.4 30405.3 -13252.4 -198 1970 804 16864.7 5068.47 -12129.5 -199 1980 803 12876.2 7128.16 -9613.9 -200 1990 802 21659.9 5847.48 -16911.8 -12000 200 -1 0 1201 406517 367891 401661 -2 10 1200 240595 210379 252649 -3 20 1199 128996 111545 151544 -4 30 1198 86798.4 72179.5 113607 -5 40 1197 73364.3 57410 92067 -6 50 1196 52459.3 39640.1 75326.4 -7 60 1195 35144.4 30039 49091.3 -8 70 1194 21732.9 31621.9 42496.9 -9 80 1193 25967.8 9878.36 34766.4 -10 90 1192 14679 1595.17 21667.4 -11 100 1191 2653.52 -1466.94 11974 -12 110 1190 7633.54 -2882.14 -3520.24 -13 120 1189 1327.08 -10986.8 -8389.26 -14 130 1188 5772.32 -10611 -6904.03 -15 140 1187 11187.3 -8791.7 -2953.8 -16 150 1186 7927.11 -9299.39 3474.1 -17 160 1185 -449.907 -12855 3751.58 -18 170 1184 -716.276 -15525.8 -1865.57 -19 180 1183 1488.47 -8835.77 -7474.32 -20 190 1182 1830.41 5023.53 5732.15 -21 200 1181 -3244.97 16906.8 15614.1 -22 210 1180 -4271.53 11065.3 4744.26 -23 220 1179 -16764.7 9771.35 -2402.92 -24 230 1178 1048.43 -4031.1 -8692.18 -25 240 1177 -6812.72 -10575.3 -9316.68 -26 250 1176 -18740.2 6512.54 -16702.4 -27 260 1175 -27766.6 16288.9 -19961.4 -28 270 1174 -14672.7 28114 -10515.5 -29 280 1173 -9656.97 24918.6 4948.67 -30 290 1172 -2846.26 16379.5 17295.1 -31 300 1171 -9002.71 -6428.73 16819.1 -32 310 1170 -4897.88 -17735.6 7636.21 -33 320 1169 7821.56 -19636 12338.8 -34 330 1168 3909.79 -18542.3 23260.4 -35 340 1167 8926.42 -18990.6 30682.6 -36 350 1166 11226.3 -10561.3 38341.6 -37 360 1165 8558.09 711.614 35409.9 -38 370 1164 4507.27 1490.87 22023.7 -39 380 1163 11933 -11413.9 9899.58 -40 390 1162 -2514.79 -11131.6 1326.43 -41 400 1161 -6000.17 -11121.1 -2672.51 -42 410 1160 -5189.23 -5575.16 4354.07 -43 420 1159 3451.4 4681.67 13544.5 -44 430 1158 3937.32 12335.8 14773.4 -45 440 1157 3019.71 11391 6994.75 -46 450 1156 -5825.11 19103.5 3232.98 -47 460 1155 4453.39 35252.6 14308 -48 470 1154 8984.77 35884.4 19910.7 -49 480 1153 4356.11 31927.3 16647.7 -50 490 1152 3091.59 34028.8 7085.08 -51 500 1151 2354.16 34546.7 2456.52 -52 510 1150 3890.29 32987.9 6724.66 -53 520 1149 11946.9 34056.5 8355.04 -54 530 1148 6204.9 34975.6 13602.3 -55 540 1147 1192.09 34284.4 28918.9 -56 550 1146 236.996 22212.4 26116.3 -57 560 1145 -14601.3 22764.4 11074.8 -58 570 1144 -9200.23 19312.9 1011.46 -59 580 1143 -11646.8 8737.54 12985.9 -60 590 1142 -10748.8 -6097.89 13027.4 -61 600 1141 -13587.2 -26943.3 7840.59 -62 610 1140 -12741 -20574 22663.6 -63 620 1139 -14615.3 -9784 35367 -64 630 1138 -8308.66 -803.387 39701.9 -65 640 1137 -5398.33 -2792.72 31399.5 -66 650 1136 8118.08 -6649.69 26841.9 -67 660 1135 -3268.49 -3970.55 30615.9 -68 670 1134 -8362.27 -10737.6 20818.6 -69 680 1133 -8565.62 -24130.6 16510.6 -70 690 1132 -13502.4 -16030.8 20142.9 -71 700 1131 -8366.95 -6470.72 21763.8 -72 710 1130 -4174.18 8697.18 24204.6 -73 720 1129 820.917 18191.4 7125.86 -74 730 1128 4850.67 22780.3 -3357.97 -75 740 1127 8930.1 25347.9 -11005.2 -76 750 1126 1712.94 16758.3 -868.365 -77 760 1125 5364.89 16094.5 2882.55 -78 770 1124 -441.965 21078.9 -3790.95 -79 780 1123 1013.74 33502.7 -2829.86 -80 790 1122 -6707.66 29611.2 -3772.94 -81 800 1121 -7138.89 27693.2 -3489.33 -82 810 1120 969.325 26251.7 -10763.7 -83 820 1119 7755.01 19547.5 -13221.8 -84 830 1118 14508.1 18245.3 -7435.39 -85 840 1117 11363.8 19006.6 -4302.22 -86 850 1116 10302.9 17231.3 7239.85 -87 860 1115 3883.01 3470.13 16157.3 -88 870 1114 -2323.63 -7367.7 8837.52 -89 880 1113 -5950.61 -744.507 4149.19 -90 890 1112 -8419.83 -1725.05 16594.5 -91 900 1111 -13437.8 -1042.75 23215.7 -92 910 1110 -9690.84 20424 20988.3 -93 920 1109 -10816.8 26619.3 17662 -94 930 1108 -7760.05 38252.6 12532.5 -95 940 1107 -6796.29 38791.1 12676.5 -96 950 1106 -6325.31 17768.7 -2568.21 -97 960 1105 5396.17 -3922.88 -15291.5 -98 970 1104 9974.22 -4220.67 -8677.25 -99 980 1103 -8699.95 15860.3 1752.75 -100 990 1102 -11904 26340.3 16697.2 -101 1000 1101 -13774.1 38251.9 16748.1 -102 1010 1100 -2900.48 30567 11151.9 -103 1020 1099 14577 12445.8 16228.7 -104 1030 1098 18067.8 -5556.59 8693.9 -105 1040 1097 22911.4 -8648.68 17649.1 -106 1050 1096 40368.8 955.531 27441.2 -107 1060 1095 27633.4 -2078.55 36624.9 -108 1070 1094 10683.6 -10773.5 38382.1 -109 1080 1093 -988.951 -2540.78 46832.4 -110 1090 1092 -1587.55 2693.17 55894.4 -111 1100 1091 24087.8 902.554 45832.1 -112 1110 1090 34609.3 3883.96 23181.1 -113 1120 1089 21906.8 19975.1 8635.52 -114 1130 1088 10549.9 32013.9 1021.59 -115 1140 1087 987.836 24876.8 -82.5943 -116 1150 1086 8205.71 5834.49 -11160.4 -117 1160 1085 -1358.55 7055.88 -17099.5 -118 1170 1084 -3472.68 13142.1 -16428.9 -119 1180 1083 -10499.9 18257 -17161.9 -120 1190 1082 8389.17 31188.7 -7743.3 -121 1200 1081 10631.8 43544.9 -6733.23 -122 1210 1080 -10358.9 45612 -818.111 -123 1220 1079 -17260.5 46387.7 7537.51 -124 1230 1078 -14192.2 39491.4 9647.81 -125 1240 1077 -11237.8 25893.5 4769.39 -126 1250 1076 -2413.34 22968 -15873.4 -127 1260 1075 7604.56 28400.7 -27881.6 -128 1270 1074 633.748 28283 -23086.4 -129 1280 1073 1640.24 28346.7 -27982.6 -130 1290 1072 -2392.44 7772.04 -20885.9 -131 1300 1071 -9272.01 2332.82 -23420.7 -132 1310 1070 -10390.6 -3861.88 -32950 -133 1320 1069 -6831.78 -3988.46 -26645.5 -134 1330 1068 -2030.76 -4077 -14239 -135 1340 1067 -6018.68 3570.49 -14019 -136 1350 1066 -14304.8 10808.1 -13599.7 -137 1360 1065 -24312.3 10006 -2560.85 -138 1370 1064 -28408 21032.8 238.401 -139 1380 1063 -9430.02 26001.5 5224.26 -140 1390 1062 -8749.47 26068.8 13512.3 -141 1400 1061 -7132.73 21456.4 25053.7 -142 1410 1060 -2883.15 32906.5 27320.9 -143 1420 1059 8618.88 30059.7 23496.8 -144 1430 1058 13777.3 26128.2 25032.2 -145 1440 1057 12464.4 24303.4 26556.5 -146 1450 1056 16735.2 16371.2 29075.5 -147 1460 1055 20581.9 -1533.13 22215.6 -148 1470 1054 14736.1 -188.574 9485.68 -149 1480 1053 12191.7 9522.04 2190.52 -150 1490 1052 1925.58 13272.7 -10584.7 -151 1500 1051 -9720.61 -2993.41 -12485.6 -152 1510 1050 -6439.84 -7921.18 -2297.4 -153 1520 1049 -1966.81 -5488.49 9557.34 -154 1530 1048 4613.95 -8565.26 19981.4 -155 1540 1047 5295.82 -5657.55 12831.1 -156 1550 1046 -8163.11 -834.142 24012.5 -157 1560 1045 -14835.5 -7402.14 38152.5 -158 1570 1044 -2049.01 -18880 44204.1 -159 1580 1043 4673.6 -16682.5 32524.2 -160 1590 1042 10081 -28018.4 14667 -161 1600 1041 7096.34 -45634.8 19730.4 -162 1610 1040 7184.98 -46875.5 10037.9 -163 1620 1039 11365 -32448 1660.18 -164 1630 1038 11034.1 -23193.5 -3142.56 -165 1640 1037 2557.64 -29438.7 -14671.9 -166 1650 1036 -2923.53 -34553.6 -14709.3 -167 1660 1035 -7148.82 -20625.9 -10113.9 -168 1670 1034 -5507.09 -14997 -3636.2 -169 1680 1033 196.629 -8028.23 6467.08 -170 1690 1032 3168.78 5701.82 6182.39 -171 1700 1031 9069.8 2731.94 463.779 -172 1710 1030 8694.56 -481.768 12719.2 -173 1720 1029 11667.3 9997.69 10319 -174 1730 1028 -302.642 15983.4 11143.5 -175 1740 1027 7115 8525.39 16061.6 -176 1750 1026 14557.7 3783.8 25858.5 -177 1760 1025 22390.7 20705.8 26719.2 -178 1770 1024 16474.6 21130.4 12744.5 -179 1780 1023 20847.8 16643.1 8557.09 -180 1790 1022 12392.9 9975.52 8077.3 -181 1800 1021 14736.6 560.888 7174.79 -182 1810 1020 14494.4 -1288.22 4621.58 -183 1820 1019 14387.9 5684.1 -11768 -184 1830 1018 -5862.5 4966.17 -17882.1 -185 1840 1017 -21159.4 4899.88 -27623 -186 1850 1016 -16808.4 3211.11 -29560.9 -187 1860 1015 -2320.96 -2457.05 -32416.7 -188 1870 1014 12501.9 -18575.3 -33262.1 -189 1880 1013 17118.2 -16083.1 -33999.8 -190 1890 1012 12960.3 -4020.23 -31388.2 -191 1900 1011 11028.7 -1285.58 -25571.8 -192 1910 1010 16374.1 11580.7 -25222.2 -193 1920 1009 27713.2 20208.5 -29814.3 -194 1930 1008 36651.9 25424 -28400.2 -195 1940 1007 39083 31129.9 -20678.1 -196 1950 1006 42846.4 32288.3 -24493.8 -197 1960 1005 25600.7 25906.6 -24970.8 -198 1970 1004 14168.2 10279.5 -22306.9 -199 1980 1003 11517.8 19902.2 -13767.7 -200 1990 1002 17815.7 15714.8 -11537.5 -14000 200 -1 0 1401 391487 372311 402274 -2 10 1400 227460 215881 254684 -3 20 1399 122000 115470 151950 -4 30 1398 83284.6 74602.7 112435 -5 40 1397 71924.9 58044 88036.2 -6 50 1396 45690.1 39832.9 70118.4 -7 60 1395 30074 30591.5 46259 -8 70 1394 18530.4 33252.1 37740.8 -9 80 1393 23508.1 18551.5 28396.1 -10 90 1392 14593.9 10086.3 16269.2 -11 100 1391 2825.12 4928.77 10469.6 -12 110 1390 8847.17 350.598 -1914.62 -13 120 1389 4583.47 -7768.25 -11157.3 -14 130 1388 9635.87 -6844.76 -12135 -15 140 1387 11677.6 -4082.47 -10858.2 -16 150 1386 7424.45 -4144.12 -9231.45 -17 160 1385 3975.37 -7355.01 -9894.29 -18 170 1384 6027.92 -10543.5 -14427.2 -19 180 1383 6057.02 -5056.51 -20777.4 -20 190 1382 4143.25 3984.9 -10947.2 -21 200 1381 771.129 14639.2 -375.724 -22 210 1380 -2273.07 10880 -2192.8 -23 220 1379 -15017.2 7901.26 -4810.04 -24 230 1378 -3222.14 -3818.74 -6857.2 -25 240 1377 -12556.7 -11755.2 -3409.71 -26 250 1376 -25202.7 1506.14 -7968.39 -27 260 1375 -30200 8032.59 -10598 -28 270 1374 -17449.2 13997.4 102.861 -29 280 1373 -10717.3 13067 20433.3 -30 290 1372 -3863.52 10947.7 31096.6 -31 300 1371 -3507.83 -10022.1 27542.6 -32 310 1370 630.051 -22659.3 19744 -33 320 1369 8171.49 -25633.6 22859.4 -34 330 1368 2768.64 -23315 30453 -35 340 1367 6601.79 -24316 37962 -36 350 1366 7827.74 -17149.8 41067.8 -37 360 1365 2306.03 -10615.4 32496.1 -38 370 1364 -2158.31 -12633.2 21797 -39 380 1363 43.0657 -24820.6 11334.6 -40 390 1362 -13460 -22520.7 5013.55 -41 400 1361 -14478 -21890.9 -1913.62 -42 410 1360 -11868.5 -13556.5 -99.6758 -43 420 1359 -3328.93 -5716.35 8157.91 -44 430 1358 3.97368 6478.83 6974.97 -45 440 1357 8347.55 5118.12 -4544.67 -46 450 1356 130.823 8161.5 -14282.3 -47 460 1355 6687.71 18956.8 -7966.23 -48 470 1354 9975.7 23225.6 -795.215 -49 480 1353 8010 24813.5 -1599.22 -50 490 1352 1546.66 31996.3 -5942.77 -51 500 1351 -13.909 35163.7 -1744.75 -52 510 1350 3355.47 34994 2227.14 -53 520 1349 9145.45 37092.9 1821.78 -54 530 1348 6104.5 36350.8 6925.88 -55 540 1347 511.517 35359.6 16560 -56 550 1346 -2969 24325.2 15592.6 -57 560 1345 -19074 27609 3999.32 -58 570 1344 -11443.3 26118.4 -4027.16 -59 580 1343 -17218.6 20083.1 10090.4 -60 590 1342 -13591.4 9944.22 11064.8 -61 600 1341 -15071.1 -14393.1 10962.6 -62 610 1340 -10450 -14116.5 31822.3 -63 620 1339 -8601.93 -7867.74 46536.5 -64 630 1338 692.59 -3812.33 50393.8 -65 640 1337 2759.3 324.479 38842.3 -66 650 1336 16420.1 1243.51 32796.3 -67 660 1335 1233.93 4753.16 34759.9 -68 670 1334 -3064.87 2525.51 25610.7 -69 680 1333 -3699.56 -9802.99 21292.8 -70 690 1332 -11900.2 -6904.84 22654.8 -71 700 1331 -8191.01 -3440.87 22420.7 -72 710 1330 -2838.75 6699.73 24781.7 -73 720 1329 -1588.57 18535.6 8395.61 -74 730 1328 -897.33 25645.7 -1788.26 -75 740 1327 9509.32 35015 -7311.18 -76 750 1326 6232.84 29061.8 3355.23 -77 760 1325 5050.27 26830.5 5806.04 -78 770 1324 -856.181 26527 -6826.47 -79 780 1323 2858.3 33938.8 -9083.21 -80 790 1322 -4476.15 24626 -7295.35 -81 800 1321 -7385.26 24028.6 -5688.7 -82 810 1320 3440.61 20692.8 -11252.5 -83 820 1319 6620.17 18400.6 -15196.7 -84 830 1318 8328.5 17447.9 -12096.7 -85 840 1317 4372.26 18869.8 -8696.71 -86 850 1316 7009.06 16496.9 5114.61 -87 860 1315 -600.65 1552.75 16600.2 -88 870 1314 -5200.7 -11157.6 11975.3 -89 880 1313 -3879.56 -4804.38 5261.87 -90 890 1312 -6352.94 -8158.44 18562.6 -91 900 1311 -15486.5 -10591.1 30990.3 -92 910 1310 -9249.86 7442.85 30984.2 -93 920 1309 -9900.71 15217 31334.9 -94 930 1308 -11329.4 29003.6 26266.9 -95 940 1307 -13480.5 29352.9 17311.6 -96 950 1306 -8897.06 6458.33 548.984 -97 960 1305 380.438 -17820.6 -8616.21 -98 970 1304 4009.47 -17208.8 -1597.04 -99 980 1303 -13014.2 1179.58 5276.42 -100 990 1302 -12062.2 10282 18436.4 -101 1000 1301 -13457.5 25455.1 23784.4 -102 1010 1300 -3591.02 17479.5 22073.3 -103 1020 1299 8433.72 2985.65 27714.1 -104 1030 1298 12605.8 -12721.8 19602.8 -105 1040 1297 14535.7 -15824.1 24465 -106 1050 1296 30747.1 -5619.56 28465.1 -107 1060 1295 16401.3 -8374.63 32764.6 -108 1070 1294 2582.44 -14371.9 31460.4 -109 1080 1293 -10050.7 -9127.55 37774 -110 1090 1292 -12163.5 -4198.25 41736.3 -111 1100 1291 10964.4 -4391.9 33516.1 -112 1110 1290 19972.1 -2310.73 10813.8 -113 1120 1289 8036.81 9027.89 -4681.11 -114 1130 1288 1093.69 20781.8 -6012.33 -115 1140 1287 -61.9985 15253.7 -6897.86 -116 1150 1286 8590.69 1496.4 -18700.6 -117 1160 1285 681.172 3201.35 -23922.7 -118 1170 1284 -3616.86 11875.6 -22354.2 -119 1180 1283 -10061.5 16658.7 -18400.1 -120 1190 1282 5564.46 22597.4 -10353.6 -121 1200 1281 -369.269 29767.7 -11982.9 -122 1210 1280 -21442.8 35353.7 -5276.87 -123 1220 1279 -23136.2 35590.8 853.362 -124 1230 1278 -16657.2 36139.1 4574.32 -125 1240 1277 -15366.4 27616.2 4498.15 -126 1250 1276 -7794.65 27288.9 -13960.5 -127 1260 1275 444.829 33595.4 -24431.9 -128 1270 1274 -5406.59 30326.8 -20317 -129 1280 1273 -4672.36 31047.3 -23942.8 -130 1290 1272 -8581.01 14029.8 -12234.1 -131 1300 1271 -11129.7 5748.62 -11147.1 -132 1310 1270 -12355.4 -3297.36 -19425.3 -133 1320 1269 -2422.78 407.28 -17260 -134 1330 1268 5869.97 6373.95 -7944.66 -135 1340 1267 2483.65 15286.9 -5941.63 -136 1350 1266 -7027.92 19845.8 -7467.56 -137 1360 1265 -14356.5 18033 -691.186 -138 1370 1264 -22662.9 22433.4 -1593.61 -139 1380 1263 -9036.05 21695.2 3336.72 -140 1390 1262 -7163.7 22666.7 9850.92 -141 1400 1261 -6215.65 12471.9 16818.9 -142 1410 1260 -2057.92 18514 14579.1 -143 1420 1259 5399.74 19362.7 9461.05 -144 1430 1258 11005.3 18992.7 8717.14 -145 1440 1257 12776.4 18357.3 7562.08 -146 1450 1256 24351.8 12309.8 7052.13 -147 1460 1255 28664.1 197.818 375.544 -148 1470 1254 20301.8 1448.52 -5289.8 -149 1480 1253 14953.3 3636.98 -8534.87 -150 1490 1252 7268.5 5400.96 -18683 -151 1500 1251 -1605.49 -5939.61 -16062.9 -152 1510 1250 -7546.61 -14600.6 -5084.08 -153 1520 1249 -3185.25 -14625.8 10432.9 -154 1530 1248 1339.05 -18545.8 20982.8 -155 1540 1247 3043.48 -13907.7 11385.8 -156 1550 1246 -12798.6 -8179.63 22684.1 -157 1560 1245 -16689.8 -13921.7 33168.7 -158 1570 1244 -7445.83 -20316.1 38124.7 -159 1580 1243 3228.6 -13445.1 31869.5 -160 1590 1242 10197.3 -21864.2 17277.7 -161 1600 1241 7567.9 -39524.9 19879.7 -162 1610 1240 8466.47 -40254.9 12088.2 -163 1620 1239 13934.6 -28540.8 7180.92 -164 1630 1238 14623.2 -26092.5 12193 -165 1640 1237 4613.61 -33250.3 5573.09 -166 1650 1236 -5647.97 -32745.7 1629.92 -167 1660 1235 -5474.41 -20321.1 7483.14 -168 1670 1234 16.9021 -16343.9 11971.1 -169 1680 1233 1786.42 -11161.9 19542 -170 1690 1232 4100.88 1956.01 16785.1 -171 1700 1231 12774.3 -5556.57 7727.7 -172 1710 1230 8411.65 -10060.4 15854.8 -173 1720 1229 8010.57 -498.625 10507.1 -174 1730 1228 -2286.46 4341.95 8627.82 -175 1740 1227 -119.123 -2026.88 12750.3 -176 1750 1226 7652.35 -5121.56 19705 -177 1760 1225 14906.5 11334.1 23236.9 -178 1770 1224 13907.4 5136.73 14333.6 -179 1780 1223 19644.5 863.706 8817.31 -180 1790 1222 13053.5 -4721.83 11268.5 -181 1800 1221 17690.4 -10497.6 13435.3 -182 1810 1220 18809 -12388.7 10849.4 -183 1820 1219 20011 -1053.27 -7842.82 -184 1830 1218 -3291.59 2079.56 -17333.2 -185 1840 1217 -12700.5 -3902.98 -25732.6 -186 1850 1216 -11283.9 -8331.67 -27134.6 -187 1860 1215 1741.09 -12406 -27477.5 -188 1870 1214 13707.5 -20265.5 -25919.3 -189 1880 1213 20978.7 -17051.6 -28819.3 -190 1890 1212 17989.6 -10038.9 -27514.8 -191 1900 1211 17363.9 -7604.45 -20426.4 -192 1910 1210 21844.7 7781.9 -18426.8 -193 1920 1209 31076.6 17145.6 -20864.3 -194 1930 1208 38484 20912.2 -20515.1 -195 1940 1207 34403.9 27944.6 -10707.1 -196 1950 1206 35102.9 32959.2 -12810.8 -197 1960 1205 20383.1 22220.9 -13980.1 -198 1970 1204 8860.93 5974.9 -11817.5 -199 1980 1203 12615.3 18034.4 -5376.96 -200 1990 1202 18621.9 20317.1 -4015.19 -16000 200 -1 0 1601 382056 371851 400886 -2 10 1600 219976 210627 254951 -3 20 1599 114904 105580 152932 -4 30 1598 81245.3 66897.4 112014 -5 40 1597 71426.7 52774.5 87032.6 -6 50 1596 47631.6 40813.2 69075.2 -7 60 1595 32937.6 30142.1 49534.6 -8 70 1594 19876.6 30276.9 38152.2 -9 80 1593 23335 17207.4 26244.9 -10 90 1592 15774.1 6839.02 13777.2 -11 100 1591 6922.78 3860.68 5407.24 -12 110 1590 11172.7 20.9055 -6639.64 -13 120 1589 6215.58 -10430.6 -15363.3 -14 130 1588 11400.7 -3669.98 -16943.7 -15 140 1587 11667.3 -634.968 -15778 -16 150 1586 5345.04 -3993.63 -16443.5 -17 160 1585 2137.26 -6393.22 -17174.6 -18 170 1584 5514.24 -11183.5 -22121.9 -19 180 1583 3019.29 -5631.41 -26053.8 -20 190 1582 1812.58 2098.18 -13941.1 -21 200 1581 1831.16 9825.05 -2222.76 -22 210 1580 2446.6 9681.3 -5970.23 -23 220 1579 -6625.96 4404.19 -5136.92 -24 230 1578 3342.32 -9040.36 -5247.69 -25 240 1577 -7089.63 -10009.3 -2678.42 -26 250 1576 -16610 -676.744 -5609.38 -27 260 1575 -19429.4 4451.66 -3334.72 -28 270 1574 -7647.95 11378.8 6796.62 -29 280 1573 -5189.31 11872.1 24372.4 -30 290 1572 -1036.79 8693.3 30456.9 -31 300 1571 -1213.86 -14265.2 26002.3 -32 310 1570 2277.1 -23703 20694.7 -33 320 1569 9599.83 -20763.5 27821.2 -34 330 1568 4784.36 -18967.1 38317.6 -35 340 1567 9528.06 -16201.2 45171.7 -36 350 1566 14476.5 -12934.8 45317.6 -37 360 1565 4889.72 -12966.9 34747.1 -38 370 1564 -5444.47 -16340.9 23631.2 -39 380 1563 -1120.62 -25323.4 11719 -40 390 1562 -11833.4 -18542.1 8040.34 -41 400 1561 -12101.3 -15198.1 -52.4507 -42 410 1560 -8223.57 -4613.85 580.265 -43 420 1559 -190.217 3437.02 10524.8 -44 430 1558 1902.67 10770.3 10091.7 -45 440 1557 9695.36 5003.23 -2110.11 -46 450 1556 1138.58 8817.41 -11540.5 -47 460 1555 8419.72 21738.8 -7517.1 -48 470 1554 13574.2 25437.3 -3415.14 -49 480 1553 12820.6 23301.8 -953.333 -50 490 1552 7554.74 25578 -3540.84 -51 500 1551 4668.41 24828.2 -169.07 -52 510 1550 5748.57 25690 3766.36 -53 520 1549 10119.1 36229.9 -77.8414 -54 530 1548 5260.51 39127.7 2668.71 -55 540 1547 1194.89 38088.6 14617.2 -56 550 1546 -950.006 24894.4 15887.1 -57 560 1545 -16723 23464.4 5037.66 -58 570 1544 -7947.88 22461 -1851.66 -59 580 1543 -11512.4 15886.2 7561.22 -60 590 1542 -9129.44 5890.86 7183.19 -61 600 1541 -9996.24 -9302.17 4999.84 -62 610 1540 -6184.56 -8889.29 23543.9 -63 620 1539 -4543.03 -8914.94 39223.3 -64 630 1538 3373.79 -7470.63 42250.1 -65 640 1537 5008.73 -3789.89 32133.8 -66 650 1536 16845.8 -2081.51 28326.4 -67 660 1535 4454.79 2102.29 30132.7 -68 670 1534 -360.209 3532.87 21081.1 -69 680 1533 471.934 -3895.91 16339.2 -70 690 1532 -3808.5 -3673.26 15508 -71 700 1531 905.546 -3123.3 17890.6 -72 710 1530 4226.77 4537.66 25522.8 -73 720 1529 1867.68 10410.2 13770.1 -74 730 1528 3583.74 19281 2615.95 -75 740 1527 16375.5 29937.9 -2435.58 -76 750 1526 11947.1 25695.3 6447.83 -77 760 1525 9365.1 26570.4 11413.4 -78 770 1524 3848.06 25918.1 1689.02 -79 780 1523 2636.46 30694.2 -1527.82 -80 790 1522 -2380.81 19987.7 -5496.76 -81 800 1521 -4123.84 18327 -6092.2 -82 810 1520 4134.71 22504.2 -10382.9 -83 820 1519 8559.93 20558.5 -11475.3 -84 830 1518 10079.1 12577 -9177.55 -85 840 1517 4762.22 14066.9 -6717.8 -86 850 1516 2960.31 16084.4 3809.74 -87 860 1515 -3487.29 9134.33 10684.7 -88 870 1514 -5346.74 -3244.01 5415.01 -89 880 1513 -3686.92 -1879.16 98.105 -90 890 1512 -3800.32 -3811.13 14744.7 -91 900 1511 -9123 -10142.4 27815.9 -92 910 1510 -4773.03 6489.75 28608.7 -93 920 1509 -5200.87 16267.2 25851.9 -94 930 1508 -3338.8 27128.7 22472.2 -95 940 1507 -7076.3 26975.8 13449.4 -96 950 1506 -5032.93 11325.1 -2772.95 -97 960 1505 2619.26 -10431.9 -9738.6 -98 970 1504 4499.1 -12951.7 -2085.41 -99 980 1503 -13836.2 2733.64 3388.05 -100 990 1502 -10564.4 12841.5 15409 -101 1000 1501 -8974.58 28775.1 21841.3 -102 1010 1500 -1383.76 18049.6 18994.7 -103 1020 1499 8396.5 4458.34 22173 -104 1030 1498 10747.9 -14647.1 17494.9 -105 1040 1497 12113.1 -25583.2 25004.7 -106 1050 1496 24975 -11948.6 28938 -107 1060 1495 14192.5 -8635.18 30327.3 -108 1070 1494 1117.06 -15228.5 25964.2 -109 1080 1493 -13377.5 -10039.6 31562.2 -110 1090 1492 -12183.9 -5977.02 34389 -111 1100 1491 9003.99 -4170.26 28436.5 -112 1110 1490 12446.2 -1616.88 8472.9 -113 1120 1489 4370.18 7596.66 -9245.75 -114 1130 1488 1776.91 16529 -11145.3 -115 1140 1487 2126.81 7004.81 -10915 -116 1150 1486 9314.45 -1992.05 -17781.5 -117 1160 1485 1943.29 3764.62 -18291.5 -118 1170 1484 242.013 11517.6 -12152.4 -119 1180 1483 -8143.77 14803.8 -8162.76 -120 1190 1482 3800.54 21721.3 -1969.44 -121 1200 1481 751.378 30122.4 -5843.85 -122 1210 1480 -15385.1 37159.8 -1477.05 -123 1220 1479 -19222.1 32711.8 2267.86 -124 1230 1478 -10587.9 31716.2 3987.7 -125 1240 1477 -9693.89 23845 5564.01 -126 1250 1476 -2979.34 21879.3 -10843 -127 1260 1475 4928.87 27950.9 -18950.7 -128 1270 1474 -2190.78 27984.6 -15007.1 -129 1280 1473 -7082.18 29092.4 -16583.9 -130 1290 1472 -12469.3 13465.3 -11244.8 -131 1300 1471 -14859.6 1616.5 -10235.4 -132 1310 1470 -16656.3 -11545.1 -16539 -133 1320 1469 -6853.86 -8584.9 -10885.3 -134 1330 1468 1948.23 2243.8 -264.109 -135 1340 1467 2500.87 16085.4 1992.84 -136 1350 1466 -6683.58 21033.5 -2931.62 -137 1360 1465 -12690.1 16344 2294.52 -138 1370 1464 -14766.7 19425 2021.75 -139 1380 1463 -4589.57 16119.1 9065.56 -140 1390 1462 -6460.59 17153.8 16596.9 -141 1400 1461 -6514.01 14034.9 23112.3 -142 1410 1460 -3319.66 22696.6 16773.2 -143 1420 1459 4753.65 22405.6 11949.6 -144 1430 1458 12374.8 15640.7 11603.1 -145 1440 1457 12979 9347.03 10873.7 -146 1450 1456 20464.5 5403.25 8525.3 -147 1460 1455 24380.7 -3503.78 1874.02 -148 1470 1454 21059.8 -2168.5 -756.107 -149 1480 1453 18532.3 1085.61 690.923 -150 1490 1452 11104.2 6298.24 -9398.47 -151 1500 1451 -1660.12 -5745.55 -10437.6 -152 1510 1450 -7873.71 -15861.7 -4357.84 -153 1520 1449 -3235.56 -13407.6 8024.29 -154 1530 1448 -289.24 -14480.7 15165.8 -155 1540 1447 2587.4 -13073.3 7540.01 -156 1550 1446 -10263.3 -11426.2 15391.3 -157 1560 1445 -13429.8 -18191.7 23917 -158 1570 1444 -5858.02 -24258.6 27946.7 -159 1580 1443 4748.27 -19578 24851.2 -160 1590 1442 12082.7 -25908.9 14090.9 -161 1600 1441 9186.46 -41252.2 13595.7 -162 1610 1440 9846.58 -41356.6 7568.55 -163 1620 1439 11947.3 -27248.5 3990.41 -164 1630 1438 13020.9 -22050.8 5946.86 -165 1640 1437 6592.17 -26351.8 -1993.84 -166 1650 1436 -2636.15 -29133 -2195.51 -167 1660 1435 -7765.65 -16390.6 6049.71 -168 1670 1434 -982.425 -11841.4 15329.8 -169 1680 1433 1207.1 -6388.58 26421.1 -170 1690 1432 3910.31 7864.49 23936.2 -171 1700 1431 10933.4 3930.09 13077.9 -172 1710 1430 7142.28 -3022.18 18093.3 -173 1720 1429 4759.53 1972.1 13666.7 -174 1730 1428 -6877.14 9193.16 13174.5 -175 1740 1427 -2962.1 3020.42 16075.2 -176 1750 1426 6478.99 3388.97 23195 -177 1760 1425 12016.1 18631.1 25771 -178 1770 1424 10000.2 16074.6 15737.6 -179 1780 1423 15011.2 6374.23 10282.9 -180 1790 1422 9299.39 -4902.49 14367.7 -181 1800 1421 14766.7 -9827.65 16436.1 -182 1810 1420 15088.5 -9234.34 15586.2 -183 1820 1419 13658.5 -286.366 4032.66 -184 1830 1418 -1812.71 1974.71 -7413.92 -185 1840 1417 -4665.27 -4556.65 -19650.7 -186 1850 1416 -10065.8 -8681.73 -23553.3 -187 1860 1415 -1787.48 -9964.56 -25034.8 -188 1870 1414 13617.5 -15088.9 -25367.5 -189 1880 1413 23901.7 -12491.7 -31207.7 -190 1890 1412 19150.2 -8316.19 -28589.3 -191 1900 1411 14201 -8322.22 -20928.6 -192 1910 1410 21995.8 6321.09 -20429.5 -193 1920 1409 28140.5 17085.7 -25270.6 -194 1930 1408 30498.4 24241.2 -21883.4 -195 1940 1407 27173.4 34315.8 -15811.2 -196 1950 1406 31749.7 36591.8 -18354.1 -197 1960 1405 16123.8 21225.5 -18763.3 -198 1970 1404 9957.47 3257.17 -16692.5 -199 1980 1403 8345.76 10426.3 -12185.1 -200 1990 1402 8741.18 9165.04 -8497.75 -18000 200 -1 0 1801 381717 369735 400801 -2 10 1800 221995 210762 253193 -3 20 1799 120747 107215 150095 -4 30 1798 87266.7 68336.4 112596 -5 40 1797 74690.9 52300.7 87569 -6 50 1796 50512.2 38924.2 72066.2 -7 60 1795 34518 25569.1 52824.4 -8 70 1794 18219.6 26742.7 37507 -9 80 1793 20224.4 16272.6 23734.9 -10 90 1792 9399.93 4927.68 12606.3 -11 100 1791 482.481 1187.68 7977.48 -12 110 1790 2750.4 -3141.59 -2490.86 -13 120 1789 -3471.61 -13613.4 -8984.93 -14 130 1788 204.865 -5790.33 -8244.37 -15 140 1787 -780.871 -678.836 -7882.56 -16 150 1786 -4504.94 -7231.85 -11828.6 -17 160 1785 -3946.14 -9805.02 -11613.3 -18 170 1784 -1475.6 -12230.4 -14455.8 -19 180 1783 -4792.02 -8075.36 -17064.1 -20 190 1782 -4763.05 -1843.1 -8099.59 -21 200 1781 -2269.19 2947.3 -3214.29 -22 210 1780 -139.679 3722.61 -7331.08 -23 220 1779 -6431.13 1141.47 -3606.8 -24 230 1778 3976.16 -8640.06 -2235.97 -25 240 1777 -4270.32 -9852.86 2450.25 -26 250 1776 -13457.3 1258.77 -1439.74 -27 260 1775 -15032.5 4678.87 2800.76 -28 270 1774 -5700.94 10699.7 14107.6 -29 280 1773 -7596.93 12416.2 28530.7 -30 290 1772 -6571.88 7874.75 32409.4 -31 300 1771 -8623.72 -13087.4 25291.9 -32 310 1770 -8163.21 -18175.7 19370.6 -33 320 1769 -3474.97 -14224.5 26389.7 -34 330 1768 -8643.14 -17914.7 32961.6 -35 340 1767 -4704.12 -19603.5 38403.8 -36 350 1766 -787.204 -14784.7 37554.1 -37 360 1765 -8878.36 -10553.2 30846.1 -38 370 1764 -14017.3 -13497.1 23001.1 -39 380 1763 -6697.65 -25477.3 13339.6 -40 390 1762 -15749.5 -17080.6 9274.41 -41 400 1761 -13041 -11751 3578.27 -42 410 1760 -7283.66 -3848.66 5450.69 -43 420 1759 285.384 6228.01 16268.1 -44 430 1758 4152.54 11356 16516.4 -45 440 1757 14996.6 5860.53 2884.48 -46 450 1756 10726 11058.5 -5864.2 -47 460 1755 19430.3 25059.4 -1215.32 -48 470 1754 22460.9 26735.8 -417.975 -49 480 1753 20871.9 26272.5 -405.43 -50 490 1752 18966.3 28699.9 -3901.44 -51 500 1751 16980.9 26739.9 1357.15 -52 510 1750 18118.6 23251.7 5491.14 -53 520 1749 20756.3 28636.6 133.528 -54 530 1748 14638.4 34658.8 3105.25 -55 540 1747 8601.04 33337.8 14598.3 -56 550 1746 3245.72 19014.3 19416.8 -57 560 1745 -10393.7 19223.5 11928.7 -58 570 1744 -3763.58 18816.9 1928.69 -59 580 1743 -10111.8 14173.2 7316.54 -60 590 1742 -10041.1 8490.98 5445.75 -61 600 1741 -11083.3 -3693.01 7591.42 -62 610 1740 -6992.92 -4414.67 24839.2 -63 620 1739 -2743.06 -3813.58 36109.4 -64 630 1738 2577.72 -1133.13 38220.5 -65 640 1737 3748.5 -1447.57 28372.5 -66 650 1736 12362.7 -4458.15 23361 -67 660 1735 3609.25 -4406.02 26259.3 -68 670 1734 2282.92 -2053.14 19245 -69 680 1733 4433.83 -8323.76 19124.9 -70 690 1732 -1819.54 -11541.4 21709.5 -71 700 1731 2249.71 -7410.12 22493.7 -72 710 1730 5274.62 6035.31 24646.5 -73 720 1729 3360.94 12454.1 15914.8 -74 730 1728 4614.69 19154.3 9245.87 -75 740 1727 13108.1 25476.1 8400.64 -76 750 1726 9263.38 18739.7 15651.6 -77 760 1725 5123.64 20457.2 15597.2 -78 770 1724 -2433.31 21298.4 6465.97 -79 780 1723 -3296.81 25725.8 5312.73 -80 790 1722 -6304.04 14648.6 4029.75 -81 800 1721 -10054.8 9617.14 4546.94 -82 810 1720 -5273.78 11259.9 -1976.6 -83 820 1719 -2827.49 9146.62 -2689.63 -84 830 1718 2029.5 1450.47 -2437.88 -85 840 1717 -1834.37 9262.59 -2283.21 -86 850 1716 -3926.93 16512.4 6626.03 -87 860 1715 -10984.6 10880.9 11932 -88 870 1714 -11127.7 -2982.45 6513.8 -89 880 1713 -8654.26 -561.198 1333.76 -90 890 1712 -9967.75 1034.15 12903.6 -91 900 1711 -13656 -4000.11 23118.8 -92 910 1710 -6220.95 7549.87 23247.3 -93 920 1709 -5193.25 16679.7 22663.7 -94 930 1708 -3410.85 28246.2 20210.7 -95 940 1707 -5576.58 25896.2 11107.5 -96 950 1706 -3464.32 11300.4 -4129.68 -97 960 1705 3553.99 -8091.6 -11604.1 -98 970 1704 5263.79 -12479.7 -3643.09 -99 980 1703 -10527 1147.87 3992.25 -100 990 1702 -9333.14 10738.8 11923.2 -101 1000 1701 -6767.04 24668.9 14476 -102 1010 1700 -955.935 14128.9 13462.6 -103 1020 1699 8573.19 1420.79 16401.9 -104 1030 1698 8599.99 -13859 9995.7 -105 1040 1697 7704.73 -26007.8 16750.2 -106 1050 1696 18908 -15456.4 17156.5 -107 1060 1695 10261.5 -11398 20828.3 -108 1070 1694 -1696.81 -18394.7 21382.2 -109 1080 1693 -11325.4 -7961.94 26496.9 -110 1090 1692 -7853.8 -1377.08 27660.9 -111 1100 1691 14931.8 -1191.6 19634.7 -112 1110 1690 16596.6 -3223.58 2231 -113 1120 1689 8948 2452.64 -10964 -114 1130 1688 6293.9 13303.7 -14371.6 -115 1140 1687 2077.14 4591.91 -15002.3 -116 1150 1686 7902.93 -5615.72 -18908.8 -117 1160 1685 1735.94 4501.95 -15629.3 -118 1170 1684 -236.353 14042.5 -9925.6 -119 1180 1683 -7102.39 14365.7 -9884.57 -120 1190 1682 1743.62 17289.6 -6787.53 -121 1200 1681 -404.028 26282.8 -7303.29 -122 1210 1680 -13104.9 32069.6 -3699.07 -123 1220 1679 -18533.1 25429.2 -1512.48 -124 1230 1678 -11410 21209.5 1399.48 -125 1240 1677 -9333.41 15234.4 595.016 -126 1250 1676 -850.495 14333.9 -14641 -127 1260 1675 7083.99 16721.6 -21835.3 -128 1270 1674 -3444.48 15259.7 -20102 -129 1280 1673 -6858.12 17057.4 -23623.9 -130 1290 1672 -10873.9 3029.95 -17954.3 -131 1300 1671 -14052.4 -3034.62 -13721.7 -132 1310 1670 -17239.1 -10019.1 -20215.8 -133 1320 1669 -8393.23 -6591.96 -16006.8 -134 1330 1668 2502.37 4548.5 -6958.91 -135 1340 1667 4287.58 16348.4 -3657.55 -136 1350 1666 -5089.35 19786.8 -3418.75 -137 1360 1665 -9021.55 13838.5 1875.22 -138 1370 1664 -11689 16670.3 -2694.65 -139 1380 1663 -4669.36 16197.5 3702.28 -140 1390 1662 -8320.31 18091.3 10729 -141 1400 1661 -12355.6 12654.4 17561.3 -142 1410 1660 -10560.8 18350.7 14650.9 -143 1420 1659 -3748.43 18256.2 10052.5 -144 1430 1658 1767.72 9752.38 8447.99 -145 1440 1657 1076.72 7372.98 8004.86 -146 1450 1656 7932.8 8163.6 2798.5 -147 1460 1655 11081.1 -740.197 -2897.45 -148 1470 1654 10608.5 -506.806 -6639.43 -149 1480 1653 8388.48 2058.67 -4450.63 -150 1490 1652 4141.33 8951.62 -10517.3 -151 1500 1651 -6449.29 63.7622 -11787 -152 1510 1650 -8250.54 -13379.4 -8301.19 -153 1520 1649 -4190.1 -9916.23 2722.16 -154 1530 1648 -2184.12 -10641.1 7916.47 -155 1540 1647 2114.03 -10786.3 1225.84 -156 1550 1646 -7484.13 -9777.71 9196.65 -157 1560 1645 -9920.16 -14113.6 13055.8 -158 1570 1644 -3810.82 -19429.2 15072.9 -159 1580 1643 5573.42 -17141 16958.8 -160 1590 1642 13815.6 -20952.6 10605.6 -161 1600 1641 12168.4 -35232.7 9789.79 -162 1610 1640 10386.5 -34762.7 709.876 -163 1620 1639 12123.5 -24908.5 814.636 -164 1630 1638 14797.4 -19830.2 4494.66 -165 1640 1637 11405.4 -23664.5 59.0336 -166 1650 1636 1419.26 -31041.1 1151.27 -167 1660 1635 -2921.83 -17737.9 6890.18 -168 1670 1634 995.921 -13337.2 14812.9 -169 1680 1633 -828.821 -11424.3 23836.6 -170 1690 1632 -860.308 197.946 21670.2 -171 1700 1631 3498.85 -694.052 14410.1 -172 1710 1630 -2388.52 -2662.85 18439.8 -173 1720 1629 -2519.79 -366.791 11894.9 -174 1730 1628 -12152.5 4839.47 7613.31 -175 1740 1627 -5665 1940.28 6152.03 -176 1750 1626 2497.27 1710.43 10771.1 -177 1760 1625 8839.33 16041.9 14585.2 -178 1770 1624 9170.47 15942.8 7330.07 -179 1780 1623 14314.7 5802.17 2965.21 -180 1790 1622 9158.73 -3407.2 1160.2 -181 1800 1621 13809 -6809.76 871.282 -182 1810 1620 12941.3 -7457.75 1731.25 -183 1820 1619 10575.9 -1771.17 -8230.22 -184 1830 1618 -3964.07 -141.397 -17802 -185 1840 1617 -8142.48 -1784.77 -24837.4 -186 1850 1616 -11861.6 -3821.38 -28164 -187 1860 1615 -2151.13 -8686.32 -27675.7 -188 1870 1614 11711 -11385 -30624 -189 1880 1613 17715.8 -7427.92 -37707.9 -190 1890 1612 16598.1 -4332.23 -31662.4 -191 1900 1611 10742.1 -4436.51 -23248.5 -192 1910 1610 13809.3 9050.78 -21457.3 -193 1920 1609 18288.9 21565 -24267 -194 1930 1608 18477 31172.9 -20777.2 -195 1940 1607 15370.5 38355.3 -14633.1 -196 1950 1606 21627.4 39549.2 -16885 -197 1960 1605 5929.8 23596.4 -17155 -198 1970 1604 1573.55 3058.52 -14735.8 -199 1980 1603 -492.871 11399.4 -10664.4 -200 1990 1602 1241.86 10350.7 -7760.57 -20000 200 -1 0 2001 387728 370715 415482 -2 10 2000 227863 212635 264818 -3 20 1999 123475 110876 154752 -4 30 1998 85270.6 73190.2 112617 -5 40 1997 71339.9 57234.9 88647.5 -6 50 1996 50156.1 40563.1 74030.1 -7 60 1995 33318.9 26163.9 55731 -8 70 1994 13224.7 28292.6 41458.3 -9 80 1993 10014.4 19803.6 26358.9 -10 90 1992 -3658.59 8460.66 12015.8 -11 100 1991 -14643 5667.01 5333.68 -12 110 1990 -9274.79 -1118.26 -6012.01 -13 120 1989 -10214.5 -13869.2 -9249.24 -14 130 1988 -6180.61 -9448.36 -5520.31 -15 140 1987 -6998.81 -5465.92 -4323.66 -16 150 1986 -9193.47 -12843.4 -9441.17 -17 160 1985 -3015.68 -16948.8 -8914.35 -18 170 1984 3726.02 -19111.3 -12743.1 -19 180 1983 610.936 -13283.6 -16541.4 -20 190 1982 247.739 -7366.17 -11018.7 -21 200 1981 867.325 -1912.46 -4951.53 -22 210 1980 5967.6 268.917 -2367.77 -23 220 1979 3416.57 -1548.64 3197.11 -24 230 1978 11233.3 -11758 -902.344 -25 240 1977 2253.62 -12386.3 -2486.83 -26 250 1976 -8513.4 1.95923 -6844.77 -27 260 1975 -13304.4 -1015.29 -2848.58 -28 270 1974 -6457.57 3621.42 8167.71 -29 280 1973 -5413.11 8141.83 24715.6 -30 290 1972 -3245.91 4733.72 28701.4 -31 300 1971 -1869.45 -14175.5 21718.4 -32 310 1970 -2646.45 -18411.4 15493.7 -33 320 1969 -2278.22 -12727.2 25014.5 -34 330 1968 -4965.48 -15543.5 33571.3 -35 340 1967 -3567.92 -17731.8 41680.7 -36 350 1966 -464.137 -12717.4 38654.3 -37 360 1965 -7689.11 -9776.08 28070.5 -38 370 1964 -14356.4 -13834.2 16252.5 -39 380 1963 -7368.2 -21521.7 5752.32 -40 390 1962 -16603.4 -13476.9 1643.63 -41 400 1961 -15823.6 -9150.29 -1088.67 -42 410 1960 -11341.2 222.675 3060.17 -43 420 1959 -5332.24 8845.2 9688.7 -44 430 1958 -3231.44 13362.5 6325.84 -45 440 1957 5481.08 6362.05 -7240.35 -46 450 1956 5054.21 12429.6 -17385.5 -47 460 1955 15493.8 26937.6 -12550.5 -48 470 1954 20319.4 27574.5 -13892.2 -49 480 1953 16310.8 27001.8 -11245.8 -50 490 1952 14431.7 29339.2 -12297.4 -51 500 1951 15337.9 30201.6 -3831.89 -52 510 1950 19471.9 26591.8 1746.41 -53 520 1949 29397.7 29407.8 -4067.19 -54 530 1948 25043.8 36255.3 -2214.97 -55 540 1947 18248.6 32700.3 13775.3 -56 550 1946 10217.4 19224.4 24346.2 -57 560 1945 -5971.24 18840.1 18432 -58 570 1944 -361.893 21125.3 7726.82 -59 580 1943 -4595.07 17455.3 11218.3 -60 590 1942 -4386.5 7945.58 9942.02 -61 600 1941 -8389.58 -5257.11 11380.3 -62 610 1940 -8160.44 -4156.82 29254.4 -63 620 1939 -8242.37 -4383.85 43721.8 -64 630 1938 -5907.59 -1892.23 44653.5 -65 640 1937 -3104.25 -2843.69 32443.1 -66 650 1936 2897.95 -7296 24327.1 -67 660 1935 -4868.4 -6774.48 26728.2 -68 670 1934 -6173.36 -3577.25 20521.6 -69 680 1933 -2962.77 -7854.18 18864.9 -70 690 1932 -6604.67 -10806.3 19361.4 -71 700 1931 295.436 -8600.1 15127 -72 710 1930 5490.98 4445.26 14324.2 -73 720 1929 3833.38 9967.26 8642.43 -74 730 1928 5767.56 16783.5 5822.51 -75 740 1927 16696 20025.3 3158.07 -76 750 1926 16301.8 14283.7 9583.63 -77 760 1925 14331.1 16336.1 13037.3 -78 770 1924 7679.26 17436.8 4760.07 -79 780 1923 7078.88 23585.5 4768.25 -80 790 1922 -130.046 13755.5 4048.76 -81 800 1921 -5041.57 9501.26 7456.94 -82 810 1920 -3109.74 8002.27 839.906 -83 820 1919 -1736.52 6147.07 -1552.55 -84 830 1918 4087.24 -33.2042 -276.041 -85 840 1917 -3864.41 5864.89 1525.39 -86 850 1916 -8766.9 13552.1 8198.38 -87 860 1915 -16803.8 10069.1 11638.4 -88 870 1914 -19249 -3738.02 5001.26 -89 880 1913 -16961.9 -2739.02 -1606.1 -90 890 1912 -17452 212.879 9127.86 -91 900 1911 -21234.4 -4309.64 18482.9 -92 910 1910 -13234.3 9079.16 21786.1 -93 920 1909 -9706.88 19591.8 21604.8 -94 930 1908 -9095.11 34684.9 19905.5 -95 940 1907 -9029.53 34331.2 14615 -96 950 1906 -2092.2 20774.7 3094.28 -97 960 1905 5022.03 5616.4 -4636.89 -98 970 1904 9934.96 -3423.47 -3153.03 -99 980 1903 -2697.44 5998.49 -123.494 -100 990 1902 -728.532 14738.8 5931.34 -101 1000 1901 729.387 29390.7 10358.9 -102 1010 1900 3830.87 19437.6 13234.2 -103 1020 1899 12047.8 9513.79 15217.6 -104 1030 1898 10794.3 -544.169 6216.11 -105 1040 1897 10775.6 -10458.5 9106 -106 1050 1896 21665 -3632.04 9445.01 -107 1060 1895 8860.84 -4840.76 12697.7 -108 1070 1894 -6357.23 -14405.1 14351.1 -109 1080 1893 -13931.8 -7958.65 20137.4 -110 1090 1892 -9976.03 -5722.3 22116 -111 1100 1891 11352.3 -5114.14 14270.6 -112 1110 1890 14057 -7407.03 -3743.54 -113 1120 1889 2482.01 -2509.55 -12260.8 -114 1130 1888 -1010.88 6186.44 -9988.91 -115 1140 1887 -4734.69 283.704 -9415.62 -116 1150 1886 -1973.67 -7787.82 -12840.1 -117 1160 1885 -6246.77 1269.09 -8059.37 -118 1170 1884 -4204.68 7874.83 1085.83 -119 1180 1883 -8826.73 12534.4 1278.01 -120 1190 1882 -734.997 15436 544.373 -121 1200 1881 -1859.53 20074.2 -2013.52 -122 1210 1880 -10908.8 25762.1 4009.61 -123 1220 1879 -13306.7 18442.5 8981.33 -124 1230 1878 -4771.66 13572.9 12226.2 -125 1240 1877 -4340.15 9635.04 10780.8 -126 1250 1876 4935.46 9940.25 -5264.96 -127 1260 1875 13382.7 14217.7 -12655.9 -128 1270 1874 4711.53 11856.9 -10398 -129 1280 1873 182.565 13376.6 -15015.6 -130 1290 1872 -8304.56 -2478.76 -12002.8 -131 1300 1871 -13095.4 -9494.91 -10049.3 -132 1310 1870 -18335.9 -16005.6 -19280 -133 1320 1869 -11472.8 -11013.7 -18420.2 -134 1330 1868 -156.975 692.171 -12101.9 -135 1340 1867 1929.71 13910.2 -4919.39 -136 1350 1866 -7490.13 19942.7 3047.35 -137 1360 1865 -14447.2 17502 8500.37 -138 1370 1864 -18830.4 19309.4 2207.23 -139 1380 1863 -11736.3 16739.5 2499.52 -140 1390 1862 -13301.4 16932.1 7431.41 -141 1400 1861 -16725.9 12057.1 13650.3 -142 1410 1860 -15239.8 20982.4 12491.5 -143 1420 1859 -7541.3 21843.1 11198.1 -144 1430 1858 -640.763 14369.7 8394.96 -145 1440 1857 470.665 14428.7 2253.66 -146 1450 1856 7022.23 15136.6 -5331.46 -147 1460 1855 9934.27 6953.15 -10402.9 -148 1470 1854 11864.4 5699.12 -10973.3 -149 1480 1853 12523.8 4500.09 -6692.6 -150 1490 1852 13683.4 12776.9 -6509.53 -151 1500 1851 4077.46 5048.54 -5783.01 -152 1510 1850 1637.36 -5428.64 -4271.9 -153 1520 1849 349.98 -4311.42 298.508 -154 1530 1848 -632.891 -5462.53 3531.63 -155 1540 1847 4263.16 -7005.37 -847.904 -156 1550 1846 -3118.4 -7472.36 10612.4 -157 1560 1845 -5384.6 -14652.1 20543.4 -158 1570 1844 -1188.61 -20619.9 25102.4 -159 1580 1843 1265.77 -20311.1 26588.9 -160 1590 1842 6110.61 -23490 17415.8 -161 1600 1841 2432.55 -37644.5 11047.1 -162 1610 1840 1629.7 -37287.7 1662.87 -163 1620 1839 4391.29 -29677.9 986.808 -164 1630 1838 9878.37 -22914.8 6840.42 -165 1640 1837 7990.97 -23572.3 5656.78 -166 1650 1836 -970.314 -29919.8 2125.56 -167 1660 1835 -5266.12 -18198.4 2155.52 -168 1670 1834 -2528.83 -14271 8677.22 -169 1680 1833 -2531.19 -13527 16579 -170 1690 1832 1156 -2257 14535.9 -171 1700 1831 6627.99 -5966.6 9040.17 -172 1710 1830 1716.59 -4319.87 16540.2 -173 1720 1829 2052.37 -981.638 9853.71 -174 1730 1828 -7553.73 4073.11 6128.71 -175 1740 1827 -2583.88 3369.44 5000.42 -176 1750 1826 5718 3356.77 12317.4 -177 1760 1825 11432 18468.7 20233.8 -178 1770 1824 12709.2 20103.4 18466 -179 1780 1823 17068.7 9647.13 14692.4 -180 1790 1822 12517.9 1726.77 11676.1 -181 1800 1821 17515 -4213.63 8411.48 -182 1810 1820 13564.4 -5850.29 7427.44 -183 1820 1819 7866.12 -2103.28 -1794.32 -184 1830 1818 -9283.6 -3290.01 -14745.4 -185 1840 1817 -12842.2 -4428.96 -28390.8 -186 1850 1816 -15742.9 -5483.43 -30617.4 -187 1860 1815 -6587.72 -9646.94 -31001.5 -188 1870 1814 6781.75 -11096.8 -32446.7 -189 1880 1813 11476.3 -7021.28 -41775.8 -190 1890 1812 8326.96 -1189.18 -35968.2 -191 1900 1811 1216.57 -2998.92 -22859.3 -192 1910 1810 4481.01 9161.5 -15870.2 -193 1920 1809 11610.6 23917.7 -15301.4 -194 1930 1808 13488.4 32508.9 -13599.8 -195 1940 1807 13951 38862.9 -13613.8 -196 1950 1806 20267.3 39690.6 -15352.8 -197 1960 1805 10825.8 26975.1 -15372.4 -198 1970 1804 6955.33 9912.06 -14244.2 -199 1980 1803 2770.3 15855.4 -9894.36 -200 1990 1802 3201.87 14732.1 -7235.75 -22000 200 -1 0 2201 389145 375585 414093 -2 10 2200 229307 218168 262654 -3 20 2199 122407 117029 152669 -4 30 2198 85143.6 79930.5 110561 -5 40 2197 70429.8 62465.2 83140.4 -6 50 2196 50098.8 43459.2 65489.8 -7 60 2195 32783.4 28072.5 48006.9 -8 70 2194 16497.3 26848.6 37474.1 -9 80 2193 14095 18557.8 25902.7 -10 90 2192 285.498 6623.66 14734.7 -11 100 2191 -9832.45 3973.61 8423.62 -12 110 2190 -6246.75 -3353.97 -1196.79 -13 120 2189 -6520.39 -13874.5 -7554.36 -14 130 2188 -1756.73 -8856.1 -7222.47 -15 140 2187 -3845.81 -5486.31 -9579.26 -16 150 2186 -7185.3 -14129 -16431.1 -17 160 2185 58.596 -17005.1 -14094.3 -18 170 2184 9023.42 -18854.1 -16088.7 -19 180 2183 7853.39 -15335.5 -19787.2 -20 190 2182 10225.1 -9249 -11096.1 -21 200 2181 9566.35 -2636.29 -6277.1 -22 210 2180 12523.4 -222.604 -5792.43 -23 220 2179 10427.3 -798.964 -510.011 -24 230 2178 16985.3 -9347.51 -3603.5 -25 240 2177 8464.08 -9292.8 -8329.1 -26 250 2176 -50.6535 2192.35 -15066.8 -27 260 2175 -4400.34 -348.796 -8878.27 -28 270 2174 -1472.43 2645.63 2371.17 -29 280 2173 -1344.02 7065.37 18378.6 -30 290 2172 1509.55 3595.97 21720.3 -31 300 2171 2590.75 -12750.1 16584 -32 310 2170 1601.26 -17275.5 13689.9 -33 320 2169 3154.55 -12858.9 23673 -34 330 2168 214.823 -14507.5 32397.7 -35 340 2167 -5261.96 -13508.4 41614.3 -36 350 2166 -4992.93 -12186.5 40568.4 -37 360 2165 -11103.7 -9680.01 32318.8 -38 370 2164 -16059 -12666 20972.9 -39 380 2163 -6283.86 -20021.1 8696.35 -40 390 2162 -13522.2 -13810.6 5747.47 -41 400 2161 -15230.9 -8204.84 3149.11 -42 410 2160 -13954.1 -730.987 7648.17 -43 420 2159 -7799.74 7838.31 16683.1 -44 430 2158 -2155.13 11320.3 15562.6 -45 440 2157 6412.76 5371.16 2013.99 -46 450 2156 8430.58 8785.19 -7118.86 -47 460 2155 18232.7 22941.6 -5024.19 -48 470 2154 22713.7 24442.7 -11963.8 -49 480 2153 18822.1 22397.2 -11834.7 -50 490 2152 17016.5 23223.1 -12752.4 -51 500 2151 18336.3 26936.1 -5402.97 -52 510 2150 21962.5 23409.8 -1072.89 -53 520 2149 33434.8 25877.4 -5440.9 -54 530 2148 28055.7 32822.7 -4904.05 -55 540 2147 18556.9 28538.8 9789.23 -56 550 2146 10421.8 15927.6 22497.5 -57 560 2145 -3430.83 18891.7 16572.7 -58 570 2144 4009.32 20376.4 4415.98 -59 580 2143 -1810.71 13992 7300.44 -60 590 2142 -5966.91 3680.57 4908.5 -61 600 2141 -14235.4 -10282.8 2724.7 -62 610 2140 -14003.6 -9885.37 17213.3 -63 620 2139 -8399.45 -8191.15 33762.5 -64 630 2138 -5967.64 -3561.42 38299.2 -65 640 2137 -4402.21 -3108.97 27870.2 -66 650 2136 3670.13 -6739.7 24783.2 -67 660 2135 -1394.97 -4414.26 27155 -68 670 2134 -2745.5 1529.98 20484.9 -69 680 2133 -964.562 -4244.12 15911.3 -70 690 2132 -4723.9 -8826.41 12582.4 -71 700 2131 1318.47 -6729.22 8115.52 -72 710 2130 8140.36 4885.65 10067.7 -73 720 2129 5393.23 10107.2 7797.18 -74 730 2128 7203.46 15131.8 6664.72 -75 740 2127 21215.9 19381.3 7671.26 -76 750 2126 24247.4 15496.4 14284.2 -77 760 2125 22877.7 16438.1 18657 -78 770 2124 14270.4 17326.8 11803.7 -79 780 2123 13711.4 22586.9 10858.5 -80 790 2122 3345.02 13850.3 7585.19 -81 800 2121 -5794.59 12631.8 6569.2 -82 810 2120 -4076.84 10068.5 -3544.56 -83 820 2119 -1369.92 5235.3 -5377.27 -84 830 2118 5234.17 -3384.4 -3083.42 -85 840 2117 1666.3 2965.07 -475.576 -86 850 2116 -1588.19 9953.52 8613.73 -87 860 2115 -10737 5130.13 10688.8 -88 870 2114 -15633.2 -7495.02 5216.45 -89 880 2113 -15019.8 -7470.82 414.141 -90 890 2112 -16717 -4521.14 8982.55 -91 900 2111 -19060 -5838.93 14476.7 -92 910 2110 -11121.7 5128.6 14561.7 -93 920 2109 -8432.44 13974.4 14374.5 -94 930 2108 -9610.57 27661.2 15262.5 -95 940 2107 -10399.6 29113.2 11661.8 -96 950 2106 -1961.05 16309.9 2838.02 -97 960 2105 5283.03 1915.43 -5229.96 -98 970 2104 10827.6 -3703.03 -4920.01 -99 980 2103 -1271.07 5411.94 456.35 -100 990 2102 -275.312 15176.8 7783.24 -101 1000 2101 3421.36 29318.6 9860.88 -102 1010 2100 8364.68 23812.1 13104 -103 1020 2099 16018.8 14409.6 14198.4 -104 1030 2098 15410.9 7629.35 2188.25 -105 1040 2097 17621.7 -1207.7 4655.81 -106 1050 2096 27974.2 3333.57 6474.16 -107 1060 2095 14471.1 798.203 15063.1 -108 1070 2094 1119.53 -8972.98 21775.6 -109 1080 2093 -5618.5 -4475.83 29858.8 -110 1090 2092 1055.78 1079.99 29892.4 -111 1100 2091 19512.8 635.153 21021.8 -112 1110 2090 18606.8 -5266.7 5771.13 -113 1120 2089 3953.85 -2812.32 -4079.63 -114 1130 2088 -4056.75 5266.37 -4087.78 -115 1140 2087 -7086.33 297.479 -4779.17 -116 1150 2086 -4939.7 -5623.81 -7313.31 -117 1160 2085 -9132.89 -1044.27 -5435.18 -118 1170 2084 -7959.86 2869.79 2905.08 -119 1180 2083 -13206.1 7722.58 4041.29 -120 1190 2082 -4178.5 11866.2 2537.02 -121 1200 2081 -3811.38 17419.6 -871.061 -122 1210 2080 -10395.1 23373.2 6682.83 -123 1220 2079 -13048.5 18623.2 13601 -124 1230 2078 -935.248 16495.3 15823.4 -125 1240 2077 3085.42 14141.2 13008.9 -126 1250 2076 10900.2 12600.6 -4074.58 -127 1260 2075 18758.5 14913.6 -13585.2 -128 1270 2074 12407 12990.5 -12364.7 -129 1280 2073 10544.7 15115.2 -17789.7 -130 1290 2072 4172.81 -2587.08 -13152.8 -131 1300 2071 -1422.77 -8147.23 -9620.61 -132 1310 2070 -8325.72 -13415.2 -19067.1 -133 1320 2069 -4941.53 -11015.1 -19079 -134 1330 2068 4684.78 -4242.42 -13830.6 -135 1340 2067 6930.77 10078.5 -7445.31 -136 1350 2066 -3222.38 19013.6 -2754.53 -137 1360 2065 -13097 15297.2 -1674.43 -138 1370 2064 -18343.8 18189.4 -8067.36 -139 1380 2063 -13943.7 19952.8 -5793.55 -140 1390 2062 -17790.7 21775.9 1521.82 -141 1400 2061 -18199.1 15941 8188.62 -142 1410 2060 -15045.5 25208.6 8249.12 -143 1420 2059 -4058.69 27920.5 9856.12 -144 1430 2058 2667.86 22036.7 11118.4 -145 1440 2057 -1023.19 20970 5326.25 -146 1450 2056 2651.12 18788.2 -3381.76 -147 1460 2055 6549.45 7376.72 -10503.4 -148 1470 2054 11564.5 6868.45 -11514.5 -149 1480 2053 13475.9 5329.45 -9493.85 -150 1490 2052 16591.7 13966.3 -9423.21 -151 1500 2051 9338.25 6637.16 -5467.82 -152 1510 2050 8477.33 -5849.76 92.8732 -153 1520 2049 8641.38 -4815.26 5543.59 -154 1530 2048 7112.05 -5627.44 9180.1 -155 1540 2047 14054.8 -8593.46 4313.02 -156 1550 2046 7754.32 -11005.6 10325 -157 1560 2045 4935.36 -18772.8 18255 -158 1570 2044 6559.08 -25592.1 20394.8 -159 1580 2043 4015.37 -26030.3 20847.9 -160 1590 2042 9949.5 -28505.6 11930.4 -161 1600 2041 5016.37 -38719.4 6921.01 -162 1610 2040 -751.461 -39032 1113.15 -163 1620 2039 1718.47 -29807.5 98.6111 -164 1630 2038 5934.61 -23613.4 8187.69 -165 1640 2037 4924.2 -24550.2 10182.6 -166 1650 2036 -4184.02 -29918.5 7901.83 -167 1660 2035 -6275.15 -16887.6 8143.14 -168 1670 2034 -2889.62 -16147.3 13964.2 -169 1680 2033 -2107.17 -13731.2 18005.4 -170 1690 2032 -1209.86 -2927.23 11329.3 -171 1700 2031 2883.52 -3099.7 5556.72 -172 1710 2030 648.554 -170.992 14029 -173 1720 2029 2795.68 5791.17 10242.8 -174 1730 2028 -2025.81 11609.4 9176.25 -175 1740 2027 5506.55 11872.6 9362.67 -176 1750 2026 13439.1 10188.1 14113.1 -177 1760 2025 19819.2 23049.7 17180 -178 1770 2024 16756.2 27092.3 13982.9 -179 1780 2023 19753 19055.7 9150.78 -180 1790 2022 19659 9876.11 4493.72 -181 1800 2021 24002.5 1725.87 1226.1 -182 1810 2020 19702.8 -353.073 1595.51 -183 1820 2019 12727.9 1128.99 -6090.34 -184 1830 2018 -2661.07 -2821.27 -17676.4 -185 1840 2017 -6521.78 -5631.87 -27139.8 -186 1850 2016 -7411.05 -8322.01 -26978.4 -187 1860 2015 1181.39 -14766.5 -28944.8 -188 1870 2014 15156.1 -15987.9 -29098.4 -189 1880 2013 16142.2 -12597.7 -35591.5 -190 1890 2012 9585.79 -9315.05 -28512.8 -191 1900 2011 1362.18 -12683.7 -17765.3 -192 1910 2010 -1204.11 250.488 -13682.2 -193 1920 2009 4259.77 12556 -14002.1 -194 1930 2008 4896.21 21350.5 -10866.9 -195 1940 2007 7952.71 30340.9 -10480.1 -196 1950 2006 19194.8 33566.2 -12045.5 -197 1960 2005 9601.01 21667.7 -13805.6 -198 1970 2004 5178.53 5799.99 -11930.8 -199 1980 2003 1676.71 10587.1 -9920.06 -200 1990 2002 2661.23 8354.53 -9626.24 -24000 200 -1 0 2401 385476 361707 410661 -2 10 2400 225982 207243 259671 -3 20 2399 117304 109990 152849 -4 30 2398 78682.8 75060.3 113151 -5 40 2397 64951.7 58224.8 87248.1 -6 50 2396 48946.9 41418 66749.9 -7 60 2395 32852.6 26829.9 46823.3 -8 70 2394 17489.2 24863.2 39140.3 -9 80 2393 12937.5 16649.6 26148.5 -10 90 2392 -1555.73 5734.98 14635.3 -11 100 2391 -11464.9 5183.87 4599.62 -12 110 2390 -3707.13 -604.804 -3781.1 -13 120 2389 -102.903 -10842.9 -10074 -14 130 2388 4225.69 -5855.11 -13182.7 -15 140 2387 -78.7928 -3659.75 -13200.3 -16 150 2386 -3782.27 -10920.2 -18652.8 -17 160 2385 2373.61 -14402 -16214.1 -18 170 2384 10243.7 -16228.9 -20487.8 -19 180 2383 8780.63 -13910.5 -22083.1 -20 190 2382 8995.97 -9457.38 -14021.1 -21 200 2381 7102.61 -4503.44 -9398.63 -22 210 2380 10494.8 -1720.44 -7772.94 -23 220 2379 10527.6 -1837.2 26.6595 -24 230 2378 18666.1 -8109.32 -159.947 -25 240 2377 8824.44 -5998.07 -6711.49 -26 250 2376 -3216.39 4198.67 -14101.5 -27 260 2375 -6265.24 3570.63 -10345.8 -28 270 2374 -1312.56 5257.33 -49.7969 -29 280 2373 2134.43 9037.48 14333.3 -30 290 2372 2880.21 7002.98 16188.4 -31 300 2371 1230.23 -8820.71 13295.8 -32 310 2370 -1875.62 -13870.4 9805.71 -33 320 2369 -4303.05 -11951.7 18776.7 -34 330 2368 -6139.41 -15367.1 24493.3 -35 340 2367 -6109.54 -14061.5 32305 -36 350 2366 -4750.41 -11436 32080.3 -37 360 2365 -11632.9 -10171.7 24754.9 -38 370 2364 -17660.6 -12770.2 15745.7 -39 380 2363 -9968.13 -19368.5 5503.69 -40 390 2362 -14403.3 -12199.3 6530.79 -41 400 2361 -13387.4 -6359.74 4507.88 -42 410 2360 -12858 -977.518 9121.15 -43 420 2359 -9840.57 6239.14 19146.2 -44 430 2358 -6326.73 10159.9 18587.5 -45 440 2357 584.382 3377.2 7434.96 -46 450 2356 4666.18 7059.65 -2990.6 -47 460 2355 16957 19411.4 409.377 -48 470 2354 19405.3 19666.8 -5610.84 -49 480 2353 12547.3 18916.2 -7974.31 -50 490 2352 13181.3 19129.7 -11185.3 -51 500 2351 18709.1 22330.7 -4234.41 -52 510 2350 24560.6 20312 -319.944 -53 520 2349 35093.9 24410.6 -6323.42 -54 530 2348 26513.8 31448 -5421.58 -55 540 2347 17438 26116.1 7717.09 -56 550 2346 9249.48 15133.4 17900 -57 560 2345 -1510.31 19368.8 12302.1 -58 570 2344 10209.7 19601.4 -209.993 -59 580 2343 6026.83 14860.8 1946.52 -60 590 2342 -2014.35 6749.42 -824.537 -61 600 2341 -15093.4 -6838.92 -1863.74 -62 610 2340 -15925.9 -8282.43 12272.8 -63 620 2339 -8060.84 -8210.48 28964.2 -64 630 2338 -1404.48 -4253.07 33766.7 -65 640 2337 1307.64 -5568.99 25053.9 -66 650 2336 7047.66 -8445.83 22972.6 -67 660 2335 -2406.76 -4405.76 24303.8 -68 670 2334 -3355.53 2338.91 18770.7 -69 680 2333 2980.82 -3107.56 15887.2 -70 690 2332 3555.73 -6571.89 14332.6 -71 700 2331 8504.99 -5693.37 9900.67 -72 710 2330 11864.7 4771.18 13957.8 -73 720 2329 6551.17 10802.8 12582.2 -74 730 2328 8785.16 15908.2 9949.57 -75 740 2327 23356.6 19419 11363.2 -76 750 2326 26702.9 14985.3 15636.9 -77 760 2325 25838.7 14975.7 17098.7 -78 770 2324 16687.1 16469.4 5879.76 -79 780 2323 15017.3 20786.4 5595.56 -80 790 2322 3376.15 12426.9 4756.15 -81 800 2321 -2531.29 11430.9 3044.55 -82 810 2320 1126.38 7960.41 -6235.58 -83 820 2319 2515.3 5443.15 -7227.18 -84 830 2318 7330.78 -744.256 -2676.51 -85 840 2317 4290.74 6632.37 -952.258 -86 850 2316 2902.8 13206.1 8889.18 -87 860 2315 -4038.99 7975.09 12614.8 -88 870 2314 -10306.3 -4141.89 8066.27 -89 880 2313 -13826.8 -5503.85 3258.67 -90 890 2312 -16366.9 -4126.82 8782.92 -91 900 2311 -19422.9 -6422.47 16243 -92 910 2310 -9915.57 5180.08 15894.3 -93 920 2309 -6630.8 13076.3 15913.9 -94 930 2308 -8048.59 25926.1 16585.2 -95 940 2307 -10145.5 27214.6 14226.6 -96 950 2306 -2552.54 16162.7 6841.25 -97 960 2305 5452.19 3921.38 -1996.39 -98 970 2304 10375.3 -1270.94 -1311.38 -99 980 2303 1310.18 7592.23 689.429 -100 990 2302 2903.69 16462.9 6148.9 -101 1000 2301 4517.81 27845.3 4694.89 -102 1010 2300 6857.11 21820.6 6089.45 -103 1020 2299 12185.9 12968.3 7048.57 -104 1030 2298 13240.6 4818.54 -4469.88 -105 1040 2297 17017.6 -3567.93 -2329.24 -106 1050 2296 24109.4 -412.335 -789.351 -107 1060 2295 11281.2 -2022.29 9287.42 -108 1070 2294 1755.46 -10265.3 14562.2 -109 1080 2293 -1793.71 -4222.84 22545.4 -110 1090 2292 3133.62 3885.59 23666.5 -111 1100 2291 16401 3147.42 15765.3 -112 1110 2290 14764.3 -2890.21 1923.37 -113 1120 2289 582.048 -841.231 -8681.2 -114 1130 2288 -5522.25 4600.06 -7118.55 -115 1140 2287 -3385.25 -305.782 -5882.18 -116 1150 2286 1770.95 -4507.77 -5784.97 -117 1160 2285 -5161.8 -1377.26 -3775.57 -118 1170 2284 -7902.17 714.463 6504.37 -119 1180 2283 -15387 5379.46 10863.6 -120 1190 2282 -5513 9863.92 6753.41 -121 1200 2281 -436.714 15698.9 2246.89 -122 1210 2280 -4856.84 21035.3 9856.98 -123 1220 2279 -8084.18 18124.4 13733.7 -124 1230 2278 -343.295 15169.1 11776.4 -125 1240 2277 946.633 12980.5 8177.14 -126 1250 2276 8365.49 13737 -6284.47 -127 1260 2275 19435.4 15925.4 -13658.5 -128 1270 2274 16731.9 13046.7 -12224.5 -129 1280 2273 14639.5 14443.4 -17966.8 -130 1290 2272 4972.44 -2139.61 -11763.6 -131 1300 2271 -2840.46 -8998.04 -7399.23 -132 1310 2270 -7692.63 -15441.9 -17072.7 -133 1320 2269 -2815.09 -13627.8 -15747.1 -134 1330 2268 6645.93 -6789.72 -10631.7 -135 1340 2267 9708.69 8868.6 -5769.19 -136 1350 2266 1135.61 18311.2 -2184.39 -137 1360 2265 -9715.37 14700.9 -86.6807 -138 1370 2264 -15511.6 15554.8 -5196.7 -139 1380 2263 -8378.74 16691.5 -2985.92 -140 1390 2262 -10316.8 19686.2 5210.95 -141 1400 2261 -10912.7 14722.6 10665.2 -142 1410 2260 -7418.36 23687.3 9616.65 -143 1420 2259 622.32 25416.5 9349.46 -144 1430 2258 7135.41 18304.5 9693.68 -145 1440 2257 -137.965 16847.9 3986.99 -146 1450 2256 1041.66 14666.7 -5631.93 -147 1460 2255 4863.24 4704.57 -12863.9 -148 1470 2254 9576.26 3627.79 -12541.7 -149 1480 2253 12407.9 2142.79 -10088.5 -150 1490 2252 15157.9 13145.1 -12033.7 -151 1500 2251 7396.73 9844.61 -9176 -152 1510 2250 4248.99 -698.926 -3655.33 -153 1520 2249 4690.86 234.021 -76.524 -154 1530 2248 4747.86 -2568.35 3377.75 -155 1540 2247 14452.3 -6584.73 -100.895 -156 1550 2246 10833.8 -7566.97 5761.13 -157 1560 2245 6534.27 -16297.5 12400.5 -158 1570 2244 7756.64 -24567.3 14591.9 -159 1580 2243 5931.65 -26529.5 15344.4 -160 1590 2242 9314.23 -28156.7 9216.67 -161 1600 2241 5282.92 -37619.3 5722.53 -162 1610 2240 1028.62 -38754 1858.24 -163 1620 2239 3026.66 -30046.2 3180.25 -164 1630 2238 6157.9 -24131 8850.1 -165 1640 2237 2936.49 -25634.9 9361.65 -166 1650 2236 -4072.45 -28573.2 7605.71 -167 1660 2235 -4725.95 -17019.7 8562.13 -168 1670 2234 -2476.17 -16276.7 13223.3 -169 1680 2233 -3890.78 -10550.7 17121.2 -170 1690 2232 -2619.25 -253.157 12247 -171 1700 2231 471.218 -2714.36 8174.94 -172 1710 2230 -2256.81 110.521 16590 -173 1720 2229 754.007 4712.66 11301.5 -174 1730 2228 -5138.98 10631.5 8612.2 -175 1740 2227 2511.86 11565.2 6602.94 -176 1750 2226 5903.5 12683.7 11768.9 -177 1760 2225 10795.7 25311.8 15224.9 -178 1770 2224 11755.7 25188.1 10609 -179 1780 2223 18509.3 17964.6 6422.18 -180 1790 2222 21513.3 10392.4 3332.6 -181 1800 2221 25330.9 3655.01 232.871 -182 1810 2220 22240.3 2733.93 427.616 -183 1820 2219 16838.3 3026.79 -4770.63 -184 1830 2218 3307.73 -1335.35 -12231.9 -185 1840 2217 76.301 -5825.48 -20373 -186 1850 2216 -1594.05 -9446.68 -20889.8 -187 1860 2215 4720.4 -14004.4 -23279.5 -188 1870 2214 14637.4 -16493.5 -23416 -189 1880 2213 13545.5 -13921.1 -32442.1 -190 1890 2212 7167.91 -10004.8 -27006.9 -191 1900 2211 1201.91 -13527.6 -14045.3 -192 1910 2210 2455.27 -2453.43 -10611.6 -193 1920 2209 10164.9 9563.24 -10725.4 -194 1930 2208 11731.9 18161.3 -9264.4 -195 1940 2207 12430.7 28456.6 -7329.09 -196 1950 2206 22154.3 31848 -11392.8 -197 1960 2205 11452.6 19207.8 -18086.8 -198 1970 2204 6190.98 4858.25 -16127.7 -199 1980 2203 4710.2 9392.99 -13431.8 -200 1990 2202 5214.97 6263.04 -15389.1 -26000 200 -1 0 2601 392538 358973 412448 -2 10 2600 232396 204674 258628 -3 20 2599 122982 109384 148773 -4 30 2598 82158.1 75244.2 107920 -5 40 2597 65382.9 59399.4 81495.5 -6 50 2596 49656.8 42887.5 62730.6 -7 60 2595 32475.4 28200.8 47673.7 -8 70 2594 16522.4 25789.3 42506.4 -9 80 2593 11683.4 18047.2 28711.8 -10 90 2592 -1075.04 7841.77 15652.6 -11 100 2591 -8783.75 6412.25 7594.71 -12 110 2590 -3442.61 -343.302 805.06 -13 120 2589 -3079.1 -12175.4 -3613.27 -14 130 2588 1213.4 -9028.2 -6646.82 -15 140 2587 -1044.74 -8711.55 -5582.47 -16 150 2586 -4886.5 -15615.1 -12549 -17 160 2585 2071.88 -18321.8 -12401.3 -18 170 2584 12398.2 -19363.4 -17643.5 -19 180 2583 12551.4 -17130.5 -19653 -20 190 2582 14136.7 -11839.2 -10549.4 -21 200 2581 11858.4 -7098.14 -4844.05 -22 210 2580 13899.5 -5610.23 -4823.11 -23 220 2579 11287.6 -4577.88 1336.4 -24 230 2578 17268.8 -10626 -3733.53 -25 240 2577 10478.2 -7071.5 -11260.8 -26 250 2576 -1970.2 1808.63 -15380.4 -27 260 2575 -4256.97 -112.011 -10362.4 -28 270 2574 -293.029 3544.35 -1961.58 -29 280 2573 4588.7 10189.6 11790.2 -30 290 2572 6241.09 10714.4 12943.8 -31 300 2571 3520.17 -6528.11 9928.93 -32 310 2570 224.72 -10148.3 7633.84 -33 320 2569 -4828.78 -7988.59 18209.6 -34 330 2568 -7550.42 -12138.9 22155 -35 340 2567 -7692.32 -12052 28795.4 -36 350 2566 -5599.74 -10428.7 28048.8 -37 360 2565 -12593.8 -8692.78 20666.2 -38 370 2564 -19225.6 -10746.2 11244 -39 380 2563 -9777.77 -18480 3772.84 -40 390 2562 -11021.4 -12246.3 4177.36 -41 400 2561 -11773.1 -6165.57 2514.83 -42 410 2560 -11974.6 354.74 7925.61 -43 420 2559 -10072.8 7100.73 18874.6 -44 430 2558 -8291.1 8784.08 16335.4 -45 440 2557 1044.82 2354.51 6626.04 -46 450 2556 5601.05 6728.55 -2434.09 -47 460 2555 15571.8 17916.8 -622.027 -48 470 2554 16651.4 17156.3 -8414.43 -49 480 2553 11407.9 17389.5 -11167.3 -50 490 2552 12949.7 15652.6 -13443.5 -51 500 2551 18192.9 17196.8 -4142.14 -52 510 2550 23382.5 17620.2 1363.89 -53 520 2549 34106.7 22928.5 -3574.42 -54 530 2548 26527.3 31225.5 -4928.52 -55 540 2547 19557.8 26629.3 5705.13 -56 550 2546 12355 16709.6 16411 -57 560 2545 -595.585 20283.6 12900.7 -58 570 2544 10441 20265.3 2962.74 -59 580 2543 8290.71 16505.3 5460.63 -60 590 2542 3283.82 8462 25.2599 -61 600 2541 -8777.5 -2432.98 -3511.77 -62 610 2540 -11858.3 -5993.07 9563.85 -63 620 2539 -6386.99 -9177.45 25094.6 -64 630 2538 -376.952 -7619.38 30712.3 -65 640 2537 2173.52 -5704.7 22841.6 -66 650 2536 7855.19 -7184.62 20919.6 -67 660 2535 -945.914 -4843.33 24542.4 -68 670 2534 -620.787 256.99 18934.6 -69 680 2533 6679.41 -4928.14 14999.1 -70 690 2532 6463.66 -9677.2 14764.2 -71 700 2531 10353.7 -9670.56 11134 -72 710 2530 9348.05 601.489 12764.5 -73 720 2529 3655.05 3963.19 11868.5 -74 730 2528 4315.03 8102.58 9972.7 -75 740 2527 16647.4 13913.4 6942.59 -76 750 2526 19067.5 11629.4 9169.56 -77 760 2525 18903.1 11163 14345.4 -78 770 2524 11066.4 14876.1 7758.69 -79 780 2523 11428.8 17660.4 7376.37 -80 790 2522 -29.3968 9653.57 4261.72 -81 800 2521 -5350.3 8247.06 3132.68 -82 810 2520 -1247.26 4578.58 -8545.79 -83 820 2519 2022.53 3895.03 -8947.81 -84 830 2518 9821.95 -1105.1 -102.878 -85 840 2517 8165.14 8567.8 2729.7 -86 850 2516 7943.77 15034 10018.2 -87 860 2515 3888.58 10826.4 9976.32 -88 870 2514 -1416.46 -779.87 1523.78 -89 880 2513 -6216.51 -714.022 -4452.26 -90 890 2512 -9959.48 1383.58 1239.7 -91 900 2511 -13455.8 -2053.5 10981.4 -92 910 2510 -5799.88 6011.93 12860.8 -93 920 2509 -6540.98 11319 14244.4 -94 930 2508 -8396.03 24237 12181.4 -95 940 2507 -8052.83 24940.5 6800.53 -96 950 2506 -586.29 14594.6 1355.83 -97 960 2505 9178.56 4962.72 -6795.34 -98 970 2504 11476.2 1660 -3949.24 -99 980 2503 2045.03 8293.82 1358.09 -100 990 2502 3333.49 17165.3 5987.43 -101 1000 2501 3326.33 26501.9 6175.75 -102 1010 2500 3660.31 22457.2 6838.15 -103 1020 2499 8992.41 13034.9 8080.28 -104 1030 2498 13574.5 4027.55 -2856.13 -105 1040 2497 20210.4 -4293.4 -1100.71 -106 1050 2496 27426.6 -1442.86 4.66431 -107 1060 2495 15926.4 373.922 5272.73 -108 1070 2494 7749.63 -8072.28 9583.45 -109 1080 2493 4086.33 -2353.91 19317.8 -110 1090 2492 8021.59 4573.69 20788.6 -111 1100 2491 17369.6 3923.06 13953.8 -112 1110 2490 14913.6 -2209.4 2388.18 -113 1120 2489 4091.67 592.338 -6117.54 -114 1130 2488 480.964 6111.9 -6388 -115 1140 2487 4990.32 1563.65 -4599.48 -116 1150 2486 8142.71 -4121.01 -3952.57 -117 1160 2485 -1025.24 -2112 -2873.84 -118 1170 2484 -4159.84 -76.0756 6538.97 -119 1180 2483 -12641.1 5135.55 13743.4 -120 1190 2482 -4390.93 9411.19 11326.6 -121 1200 2481 504.086 15658.5 7690.48 -122 1210 2480 -4191.61 17342.8 12630.9 -123 1220 2479 -5222.74 12226.8 15551.4 -124 1230 2478 1175.61 9509.68 13698.5 -125 1240 2477 1913.83 7512.28 11091.2 -126 1250 2476 8868.11 8286.16 -1937.75 -127 1260 2475 18170.9 10587.4 -9242.32 -128 1270 2474 15327.6 7186.12 -6955.05 -129 1280 2473 13359.8 9481.82 -13582.8 -130 1290 2472 3327.95 -3868.33 -10441.9 -131 1300 2471 -4392.92 -9386.15 -5010.54 -132 1310 2470 -7084.95 -16301.5 -15851.5 -133 1320 2469 -646.911 -16019.5 -14025.2 -134 1330 2468 8032.6 -10075.9 -8610.6 -135 1340 2467 9585.17 5406.39 -3007.73 -136 1350 2466 1732.81 15270.9 871.474 -137 1360 2465 -8433.26 11180.6 3150.8 -138 1370 2464 -13882.2 13310.9 -2777.24 -139 1380 2463 -7404.02 17711.4 -3582.41 -140 1390 2462 -7743.15 20709.3 4452.64 -141 1400 2461 -8388.3 14342.1 12541.1 -142 1410 2460 -5885.92 23170.7 11899.7 -143 1420 2459 3804.2 26953.7 12264.5 -144 1430 2458 11555.1 21497 11724.2 -145 1440 2457 4724.65 19858.9 4752.73 -146 1450 2456 5339.25 17077.9 -7591.07 -147 1460 2455 8422.38 4883.06 -14122.8 -148 1470 2454 9830.56 3697.59 -13923.6 -149 1480 2453 12591.5 1146.16 -10628.8 -150 1490 2452 15043.8 12388.2 -10539.7 -151 1500 2451 6586.22 8363.01 -7714.51 -152 1510 2450 3806.89 -2062.85 -4391.53 -153 1520 2449 4488.14 -1556.47 1300.22 -154 1530 2448 6930.68 -4567.84 5237.28 -155 1540 2447 17558.5 -7147.07 1540.39 -156 1550 2446 14739.5 -7454.12 6513.16 -157 1560 2445 9873.76 -16638.9 13083 -158 1570 2444 9282.37 -23248.7 13071 -159 1580 2443 8503.33 -27090.7 11514.9 -160 1590 2442 12850.1 -30349.6 4014.4 -161 1600 2441 8303.26 -38096.8 260.061 -162 1610 2440 1137.14 -38682.3 -3884.98 -163 1620 2439 -1218.46 -31117 -1969.68 -164 1630 2438 3659.81 -25248.5 3704.9 -165 1640 2437 1800.78 -26765.8 4732.56 -166 1650 2436 -5564.86 -27482.8 4044.86 -167 1660 2435 -2838.21 -15510.7 7467.95 -168 1670 2434 -231.235 -14533.4 11602.9 -169 1680 2433 1020.58 -9734.42 16944.8 -170 1690 2432 1940.45 -2601.54 14941.6 -171 1700 2431 2697.55 -3714.1 9999.51 -172 1710 2430 1603.94 -15.6341 13688.2 -173 1720 2429 6593.33 5921.47 8664.53 -174 1730 2428 2483.94 11237.9 5511.88 -175 1740 2427 9713.35 12143.4 4717.56 -176 1750 2426 8750.55 12610.5 11608.5 -177 1760 2425 9432.64 23734.4 17187.7 -178 1770 2424 10653.2 22865.2 13309.4 -179 1780 2423 15483 16649.3 9565.26 -180 1790 2422 16661.5 8058.46 5306.57 -181 1800 2421 19685.1 1474.75 2105.62 -182 1810 2420 15639.6 382.645 3198.62 -183 1820 2419 13365 132.355 547.043 -184 1830 2418 1400.82 -3820.65 -5872.07 -185 1840 2417 -1100.91 -7110.62 -13938.4 -186 1850 2416 239.802 -8624.88 -15398.5 -187 1860 2415 5494.56 -11973.2 -17742.2 -188 1870 2414 14505.6 -15647.1 -17330.8 -189 1880 2413 11072.2 -15458.8 -25493.7 -190 1890 2412 5688.91 -11490.7 -23412.1 -191 1900 2411 924.375 -15382 -12744.1 -192 1910 2410 1122.79 -4562.76 -8600.37 -193 1920 2409 9241.55 6387.27 -9972.01 -194 1930 2408 10394.9 13897.8 -8682.46 -195 1940 2407 12610.5 26063.8 -2355.73 -196 1950 2406 21050.1 30729.4 -5318.43 -197 1960 2405 9131.92 20908.6 -13401 -198 1970 2404 3467.71 8242.3 -13489.8 -199 1980 2403 3366.07 12128 -9141.11 -200 1990 2402 6830.63 7744.54 -10579 -28000 200 -1 0 2801 393406 358409 406165 -2 10 2800 233459 203977 252400 -3 20 2799 123156 108531 142795 -4 30 2798 82674.7 73339.3 103182 -5 40 2797 67210.2 58181.4 81385.7 -6 50 2796 50282.4 40203.7 65255.7 -7 60 2795 32357.6 26282.7 49435.2 -8 70 2794 16044.8 25902.8 42145.5 -9 80 2793 11709.7 18079 28436.6 -10 90 2792 308.088 8367.83 16248 -11 100 2791 -7464.47 6266.61 9011.12 -12 110 2790 -2313.72 334.119 -0.599007 -13 120 2789 279.342 -10954.6 -5887.69 -14 130 2788 6021.82 -6344.72 -7888.68 -15 140 2787 5046.53 -5537.56 -3525.22 -16 150 2786 -545.034 -11611.9 -8876.94 -17 160 2785 5552.09 -14151.4 -9235.47 -18 170 2784 15598 -15206.6 -15061.9 -19 180 2783 18050.4 -15003.9 -16784.5 -20 190 2782 18052.3 -12141.6 -8961.4 -21 200 2781 14230.9 -6992.81 -3792.68 -22 210 2780 16534.9 -5847.86 -3944.73 -23 220 2779 13940.7 -4337.7 2364.76 -24 230 2778 16457.1 -9124.15 -1836.36 -25 240 2777 6055.63 -5391.12 -8011.77 -26 250 2776 -4078.57 602.316 -12489.9 -27 260 2775 -6027.09 -1167.31 -10221.4 -28 270 2774 -4518.49 3633.75 -2091.44 -29 280 2773 -1444.23 9716 13837 -30 290 2772 724.239 11354.1 14284.7 -31 300 2771 -789.586 -3698.69 9006.09 -32 310 2770 -6340.11 -7856.54 7153.22 -33 320 2769 -12728.9 -7226.63 17982.2 -34 330 2768 -16504.2 -13084.8 22231.5 -35 340 2767 -13668.1 -12996 26863.5 -36 350 2766 -8746.09 -13066.1 26423.9 -37 360 2765 -12802.3 -10798.9 20151.7 -38 370 2764 -18258 -12715.8 10612.3 -39 380 2763 -10568.1 -18878 3406.78 -40 390 2762 -8530.89 -14009.9 2252.1 -41 400 2761 -7827.06 -9127.97 586.681 -42 410 2760 -9553.7 -1417.64 6056.52 -43 420 2759 -11323.7 6946.47 16988.2 -44 430 2758 -9834.71 9540.02 13660.1 -45 440 2757 -411.339 4257.38 4585.32 -46 450 2756 -587.284 8978.92 -3482.29 -47 460 2755 6420.93 19074.7 -3017.5 -48 470 2754 7822.45 18333 -10677.6 -49 480 2753 5661.1 16594.7 -13082.2 -50 490 2752 8405.37 14472.4 -13952.2 -51 500 2751 13682.4 14981.1 -4882.02 -52 510 2750 18741.6 14832 -1773.1 -53 520 2749 29981.7 20122.7 -6657.95 -54 530 2748 22914.8 27852.5 -7477.8 -55 540 2747 15808 23288 3294.64 -56 550 2746 9436.96 14578.7 12842.6 -57 560 2745 -2434.01 18919.4 9285.66 -58 570 2744 10173.2 19074 511.192 -59 580 2743 8917.43 16226.8 4202.54 -60 590 2742 2233.12 9570.44 -506.166 -61 600 2741 -8818.28 -517.041 -3270.22 -62 610 2740 -12032.7 -4097.54 7382.41 -63 620 2739 -6547.95 -5492.61 19938.4 -64 630 2738 -1326.55 -4732.82 25963.5 -65 640 2737 2060.89 -4863.09 21047.9 -66 650 2736 9115.11 -8243.15 22154.2 -67 660 2735 1570.1 -5788.09 25310.3 -68 670 2734 -449.169 1541.41 20591.2 -69 680 2733 3972.12 -1738.74 17048.6 -70 690 2732 5141.15 -7915.56 16054.2 -71 700 2731 10180.4 -8664.25 11675.5 -72 710 2730 8526.91 1194.92 13320.3 -73 720 2729 2399.99 2536.55 14708 -74 730 2728 3198.66 4937.7 15235 -75 740 2727 13790.3 11730.3 11058.1 -76 750 2726 16897.6 9673.26 12133.4 -77 760 2725 16860.7 9742.29 14907.2 -78 770 2724 8701.73 13667.4 9524.07 -79 780 2723 10053 17475.9 10016.8 -80 790 2722 1593.33 11634.2 6205.12 -81 800 2721 -1501.13 8882.56 3695.11 -82 810 2720 -446.585 2680.22 -7562.02 -83 820 2719 897.343 -528.818 -8493.52 -84 830 2718 9605.62 -2922.08 -432.125 -85 840 2717 7625.12 7898.62 -98.1 -86 850 2716 6765.05 13551.6 6654.71 -87 860 2715 1567.52 7920.42 7575.14 -88 870 2714 -2896.82 -2253.9 2141.91 -89 880 2713 -6963.03 -470.418 -2893.24 -90 890 2712 -11178.2 1756.73 2567.36 -91 900 2711 -13483.7 -2472.14 9907.93 -92 910 2710 -6543.47 5266.06 9717.04 -93 920 2709 -7034.5 10463.1 11325.7 -94 930 2708 -8602.4 21700.9 12348 -95 940 2707 -8081.16 22770.3 9566.3 -96 950 2706 -2503.71 13936.1 5675.56 -97 960 2705 4066.99 3659.23 -2248.47 -98 970 2704 5868.61 1476.88 -926.516 -99 980 2703 -305.707 7837.89 2346.7 -100 990 2702 1945.34 14478 3552.13 -101 1000 2701 1090.08 21212.1 5443.97 -102 1010 2700 3680.68 18253.1 8111.82 -103 1020 2699 9570.32 8167.49 10282.9 -104 1030 2698 12943.9 -1670.02 -1808.7 -105 1040 2697 21567.2 -7726.46 -2046.92 -106 1050 2696 29498.7 -4038.05 641.748 -107 1060 2695 20392.4 -1980.57 6665.91 -108 1070 2694 11517.4 -10336.3 9890.38 -109 1080 2693 8726.24 -4369.56 19440.1 -110 1090 2692 13420.6 1083.88 21126.4 -111 1100 2691 20140.4 -575.326 13684.2 -112 1110 2690 16072 -5333.15 1940.34 -113 1120 2689 6475 -709.417 -6147.66 -114 1130 2688 3573.67 4161.46 -8368.95 -115 1140 2687 7949.68 -1656.57 -7449.84 -116 1150 2686 10078.3 -5396 -6591.58 -117 1160 2685 2182.54 -4447.14 -4286.14 -118 1170 2684 -331.491 -1851.37 4255.21 -119 1180 2683 -8670.02 3490.73 9955.44 -120 1190 2682 -1938.68 9307.98 6865.42 -121 1200 2681 2161.94 14373.7 2153.36 -122 1210 2680 -4015.42 16398.8 4679.19 -123 1220 2679 -5038.36 11358.9 10797.8 -124 1230 2678 2593.37 9747.79 10531.1 -125 1240 2677 6107.49 7145.86 8551.51 -126 1250 2676 12092.4 5517.79 -2156.32 -127 1260 2675 23331.7 9405.13 -8132.85 -128 1270 2674 22653.5 4422.92 -7028.92 -129 1280 2673 20627.2 5530.01 -13840.2 -130 1290 2672 10688.4 -6790.45 -10239.1 -131 1300 2671 3864.69 -8876.95 -3930.1 -132 1310 2670 -285.627 -14131.7 -13801.3 -133 1320 2669 2997.06 -15345.1 -13436.5 -134 1330 2668 10286.1 -9801.23 -8130.87 -135 1340 2667 11165 4257.4 -1247.06 -136 1350 2666 2370.29 14140 -448.862 -137 1360 2665 -10372.4 11602.7 -918.838 -138 1370 2664 -19657 12959 -6099.49 -139 1380 2663 -13584.2 15907.2 -5175.48 -140 1390 2662 -14182.7 19328.3 1414.8 -141 1400 2661 -14103.5 13623.6 9350.88 -142 1410 2660 -11778 21529.9 9230.76 -143 1420 2659 1192.74 24938.1 8420.51 -144 1430 2658 11840.4 19306.6 9248.39 -145 1440 2657 6354.76 17764.4 5683.75 -146 1450 2656 7718 13883.2 -4872.41 -147 1460 2655 10430.4 2496.7 -12121.7 -148 1470 2654 12423.4 2389.49 -12923.1 -149 1480 2653 15352.9 -920.227 -10803.5 -150 1490 2652 16442 7809.68 -14856.2 -151 1500 2651 6948.43 3727.57 -10287.9 -152 1510 2650 134.689 -5791.83 -7671.1 -153 1520 2649 1686.1 -5506.07 -173.838 -154 1530 2648 4886.37 -7550.91 4452.61 -155 1540 2647 12919.9 -9093.61 815.715 -156 1550 2646 8101.5 -8850.32 2481.61 -157 1560 2645 4640.13 -19250.8 5875.32 -158 1570 2644 3390.52 -24687.4 3986.31 -159 1580 2643 1658.77 -28861.2 5792.16 -160 1590 2642 5156.88 -31054.2 217.622 -161 1600 2641 368.433 -37239.4 -1234.84 -162 1610 2640 -5941.36 -38198.5 -5935.71 -163 1620 2639 -6163.96 -30148.1 -3470.06 -164 1630 2638 1660.16 -24149.8 2378.92 -165 1640 2637 1005.59 -24704.8 2416.35 -166 1650 2636 -5637.24 -25596.7 2752.67 -167 1660 2635 -2364.24 -14476.4 7453.73 -168 1670 2634 821.893 -14592.4 11655 -169 1680 2633 3117.82 -9360.48 16216.6 -170 1690 2632 4552.43 -5322.48 13598.4 -171 1700 2631 5308.85 -7907.16 10699.4 -172 1710 2630 3443.32 -3530.94 13482.9 -173 1720 2629 6656.62 5955.03 9381.58 -174 1730 2628 719.99 10965.4 5482.04 -175 1740 2627 5987.09 10898.9 5412.33 -176 1750 2626 3873.03 12682 10704.1 -177 1760 2625 855.536 25813.2 13448 -178 1770 2624 1228.82 25117.7 8578.99 -179 1780 2623 8285.99 17718.6 6000.78 -180 1790 2622 10593.3 8760.02 4208.73 -181 1800 2621 11514 1014.46 2154.43 -182 1810 2620 8798.56 832.426 695.837 -183 1820 2619 9030.36 502.911 -3734.34 -184 1830 2618 842.522 -1949.16 -8929.21 -185 1840 2617 1415.26 -5980.17 -13433.9 -186 1850 2616 880.171 -7575.04 -10981 -187 1860 2615 6317.02 -9886.45 -13147.5 -188 1870 2614 16740.8 -14090.8 -15765.3 -189 1880 2613 14023.6 -13478.9 -23793.2 -190 1890 2612 6707.84 -10989 -20581.9 -191 1900 2611 -687.833 -13058.8 -9877.05 -192 1910 2610 214.447 -1365.53 -6560.73 -193 1920 2609 9965.05 7731.14 -8127.13 -194 1930 2608 10775.2 12423.2 -8799.24 -195 1940 2607 11946 23666.1 -2819.04 -196 1950 2606 17672.2 27550.3 -2640.91 -197 1960 2605 8326.71 18079.2 -9082.08 -198 1970 2604 6485.15 5375.57 -8765.92 -199 1980 2603 6379.96 11603 -5250.88 -200 1990 2602 7564.38 8039.43 -6497.82 -30000 200 -1 0 3001 390140 364149 403669 -2 10 3000 229017 207101 248380 -3 20 2999 119042 112516 137914 -4 30 2998 80116.2 75149.6 95842.3 -5 40 2997 65642.3 56727.3 74108.7 -6 50 2996 46404.6 36247.2 57670.8 -7 60 2995 27558.2 20911.9 41079.3 -8 70 2994 12790.8 20408.9 34312.5 -9 80 2993 10561.3 12524.4 21064.5 -10 90 2992 1260.87 3510.21 10823.4 -11 100 2991 -5985.97 2592.81 5791.56 -12 110 2990 -1302.73 -2863.77 -659.507 -13 120 2989 382.697 -12611.7 -4273.3 -14 130 2988 6471.13 -7943.84 -4992.47 -15 140 2987 5194.57 -5859.65 -1870.72 -16 150 2986 -1328.92 -12195.7 -9806.93 -17 160 2985 4510.17 -12968.3 -9276.51 -18 170 2984 18381.1 -14279.3 -13242.1 -19 180 2983 21198.3 -14607.2 -12596.4 -20 190 2982 20416.2 -13000.9 -7314.47 -21 200 2981 15038.7 -5986.13 -4881.09 -22 210 2980 18021.1 -3768.52 -4694.58 -23 220 2979 16841.6 -2932.55 2648.94 -24 230 2978 18309.8 -9425.45 -1510.26 -25 240 2977 5290.76 -7963.98 -7970.63 -26 250 2976 -5398.2 -1027.37 -14063.2 -27 260 2975 -7999.43 -5058.17 -11577.6 -28 270 2974 -7993.65 -49.4259 -4349.09 -29 280 2973 -4938.93 8397.39 10069.2 -30 290 2972 -3423.54 9137.95 12835.8 -31 300 2971 -3134.59 -4073.71 9528.13 -32 310 2970 -6373.88 -9117.01 8148.32 -33 320 2969 -13032.2 -8249.03 16318.2 -34 330 2968 -16039.1 -14998.9 19557.2 -35 340 2967 -12975.9 -15376 24399.6 -36 350 2966 -7910.43 -14624.3 27295 -37 360 2965 -9848.42 -12847.1 21841.2 -38 370 2964 -14436.2 -12432.9 10860.5 -39 380 2963 -8325.59 -18051.7 1436.99 -40 390 2962 -6561.42 -13463.7 -364.926 -41 400 2961 -5112.4 -6705.31 -840.665 -42 410 2960 -5788.18 1498.44 4341.5 -43 420 2959 -9290.76 10278.2 16053.2 -44 430 2958 -8791.78 14190.7 11934.6 -45 440 2957 1422.73 8558.86 3903.27 -46 450 2956 -365.207 13058 -2320.17 -47 460 2955 2559.79 21833.2 -1708.23 -48 470 2954 3280.47 21021.4 -8182.68 -49 480 2953 2740.05 16893.1 -9570.33 -50 490 2952 4101.28 12869.8 -10685.3 -51 500 2951 10133.9 11793.3 -4896.93 -52 510 2950 16326.7 10667.4 -4663.97 -53 520 2949 28256.1 13021.8 -10700.4 -54 530 2948 22188.2 20919.9 -10301.3 -55 540 2947 16641.6 17657.8 424.551 -56 550 2946 8776.41 10220.9 9437.57 -57 560 2945 -3572.56 15368.1 6158.1 -58 570 2944 7600.24 16096.1 -450.478 -59 580 2943 8064.79 14815.5 4086.93 -60 590 2942 2852.44 9391.78 1611.88 -61 600 2941 -8150.62 -51.8346 -1230.48 -62 610 2940 -9927.47 -3336.95 6324.87 -63 620 2939 -5890.63 -3617.28 16019.2 -64 630 2938 -2037.29 -3946.97 22338.3 -65 640 2937 -855.125 -5538.65 18755.5 -66 650 2936 5862.99 -6690.75 19750.1 -67 660 2935 -2153 -6806.62 22199.6 -68 670 2934 -3868.27 1451.9 16211.5 -69 680 2933 1528.58 272.072 14376.9 -70 690 2932 3287.19 -5783.78 14732.6 -71 700 2931 7824.04 -3732.42 12833 -72 710 2930 5632.53 4364.65 16048.8 -73 720 2929 81.4824 5512.88 15358.8 -74 730 2928 1199.38 5032.61 15163 -75 740 2927 11400.7 9686.61 9016.35 -76 750 2926 17636.3 6807.86 10553.2 -77 760 2925 18903.3 6147.33 12207 -78 770 2924 8856.88 9259.5 8155.44 -79 780 2923 8329.33 15688.6 9287.64 -80 790 2922 567.705 11959 4531.72 -81 800 2921 552.044 8585.31 1251.46 -82 810 2920 1644.21 6003.91 -7272.7 -83 820 2919 350.707 3826.27 -6526.91 -84 830 2918 5994.47 2217.23 1163.34 -85 840 2917 6696.52 12615.7 3003.42 -86 850 2916 5504.99 18509 9071.18 -87 860 2915 702.398 12344.4 7078.16 -88 870 2914 -4119.75 1248.59 1397.79 -89 880 2913 -6284.09 2590.83 -4442.02 -90 890 2912 -9626.49 1644.47 932.33 -91 900 2911 -12127.1 -1982.98 7584.51 -92 910 2910 -6772.56 3288.13 6200.92 -93 920 2909 -6368.75 7545.88 9789.6 -94 930 2908 -6936.2 16392.6 12049.3 -95 940 2907 -8142.65 14636.4 10646.4 -96 950 2906 -4812.07 7229.14 8376.49 -97 960 2905 2292.37 -1890.12 -210.42 -98 970 2904 5092.1 -2494.7 -1657.26 -99 980 2903 1355.47 4754.87 -858.862 -100 990 2902 2925.56 11421.7 1869.33 -101 1000 2901 1213.58 17984.6 5400.18 -102 1010 2900 4023.33 15016.3 7098.47 -103 1020 2899 10213.7 6711.25 8233.74 -104 1030 2898 12537.3 -698.935 -2423.03 -105 1040 2897 19167.7 -6315.04 -1663.34 -106 1050 2896 26533.4 -3369.19 326.322 -107 1060 2895 18375.9 -794.355 6014.57 -108 1070 2894 8772.09 -7822.77 9235.37 -109 1080 2893 3801.46 -1388.2 20089.1 -110 1090 2892 10452.2 1198.84 19976.5 -111 1100 2891 18184.2 416.09 12060.7 -112 1110 2890 15287.7 -3967.71 -127.809 -113 1120 2889 5906.55 -491.321 -6306.78 -114 1130 2888 1688.89 4482.03 -6312.84 -115 1140 2887 5268.25 -1584.1 -4935.41 -116 1150 2886 7570.79 -4761.33 -4838.57 -117 1160 2885 1504.17 -3899.09 -2544.49 -118 1170 2884 1367.19 -1935.06 5542.58 -119 1180 2883 -7092.69 3255.54 13361 -120 1190 2882 -1041.07 7078.04 11125.9 -121 1200 2881 2837.28 10156.9 5884.57 -122 1210 2880 -2741.81 12053.3 6328.88 -123 1220 2879 -5179.01 8112.59 10721 -124 1230 2878 2238.69 5884.56 9735.3 -125 1240 2877 4580.17 2281.96 8838.92 -126 1250 2876 9493.31 2655.78 -620.387 -127 1260 2875 19056.7 7932.46 -5141.43 -128 1270 2874 17508.3 4846.26 -6573.5 -129 1280 2873 16324.5 8361.93 -10767.8 -130 1290 2872 8477.45 -4628.72 -6242.42 -131 1300 2871 2645.91 -6136.17 529.253 -132 1310 2870 -3445.96 -11235.2 -10636.5 -133 1320 2869 424.231 -14356.6 -11751.7 -134 1330 2868 6206.82 -9108.44 -7852.96 -135 1340 2867 7464.62 3724.86 -401.381 -136 1350 2866 852.724 12682 -363.487 -137 1360 2865 -10032.4 6864.39 -1524.52 -138 1370 2864 -17665.8 7268.49 -6156.18 -139 1380 2863 -12452.2 10940.5 -4688.31 -140 1390 2862 -12607.3 15377.1 -49.8197 -141 1400 2861 -11083.1 10940.4 7080.76 -142 1410 2860 -10135 17121.2 8212.39 -143 1420 2859 1349.57 18355.3 8562.16 -144 1430 2858 9083.11 12574.4 10945.3 -145 1440 2857 2810.16 13922.8 7293.99 -146 1450 2856 3499.93 10978 -4969.32 -147 1460 2855 5705.97 1092.94 -12988 -148 1470 2854 6867.94 -118.02 -14707.3 -149 1480 2853 8049.3 -673.214 -11862.6 -150 1490 2852 8952.79 9983.83 -14117.4 -151 1500 2851 914.027 6433.85 -7077.43 -152 1510 2850 -3733.17 -2104.05 -2960.33 -153 1520 2849 -2274.81 -841.71 5450.66 -154 1530 2848 1669.74 -1504.39 8938.93 -155 1540 2847 11233.7 -2289.74 5967.52 -156 1550 2846 7527.64 -1794.28 8384.49 -157 1560 2845 4417.65 -14056.5 10117.8 -158 1570 2844 3774.71 -20733.8 5920.6 -159 1580 2843 4171.47 -27242.3 6063.29 -160 1590 2842 6726.82 -28622.5 -169.408 -161 1600 2841 2439.76 -33381.6 -1017.72 -162 1610 2840 -5202.24 -34459.9 -7650.98 -163 1620 2839 -7637.34 -26009.6 -7529.93 -164 1630 2838 -1805.13 -21628.6 -1688.12 -165 1640 2837 -4428.64 -23377.3 -1973.96 -166 1650 2836 -9920.41 -23680.5 -629.212 -167 1660 2835 -7581.54 -12816.7 5664.7 -168 1670 2834 -5035.93 -12028.9 10622.5 -169 1680 2833 -2634.29 -6297.01 15886 -170 1690 2832 1178.61 -66.1016 11513.6 -171 1700 2831 2041.35 -2760.89 8926.79 -172 1710 2830 -239.978 2053.48 12395.4 -173 1720 2829 2854.13 8274.37 10233.2 -174 1730 2828 801.654 11004.9 8209.73 -175 1740 2827 7571.11 7915.3 8328.56 -176 1750 2826 5032.79 10371.3 9329.48 -177 1760 2825 1935.77 23343 9584.14 -178 1770 2824 4644.04 21924.6 4879.54 -179 1780 2823 10899.1 15543.3 4188.53 -180 1790 2822 10831.9 6294.32 1751.56 -181 1800 2821 11624.3 -329.802 -2729.2 -182 1810 2820 9283.13 656.402 -6454.57 -183 1820 2819 9641.57 1153.7 -9754.09 -184 1830 2818 591.58 -1496.89 -12399.8 -185 1840 2817 -1479.2 -5896.57 -16765.1 -186 1850 2816 -3758.82 -6248.93 -12485.8 -187 1860 2815 1108.47 -10361.2 -14413.4 -188 1870 2814 9981.64 -14694.4 -13976.8 -189 1880 2813 8699.89 -16900.3 -20077 -190 1890 2812 1026.17 -11360.5 -17485.5 -191 1900 2811 -5773.19 -12252.7 -8747.98 -192 1910 2810 -2248.44 -2036.66 -5463.76 -193 1920 2809 9820.31 7227.34 -5866.06 -194 1930 2808 8688.9 14340.9 -6527.7 -195 1940 2807 11760 23484.3 -3255.32 -196 1950 2806 20704.2 26762.9 -4985.55 -197 1960 2805 13264.2 19396.7 -10727.6 -198 1970 2804 9856.57 6868.24 -9688.28 -199 1980 2803 9451.06 10551 -7284.86 -200 1990 2802 10964.8 5829.97 -8069.62 -32000 200 -1 0 3201 385889 367731 403756 -2 10 3200 226060 209867 248506 -3 20 3199 115902 113667 137748 -4 30 3198 77124.2 73514.6 96845.7 -5 40 3197 64196 54632.8 77262.4 -6 50 3196 45529.2 35902.8 62300.8 -7 60 3195 25348.1 22035.6 45646.5 -8 70 3194 9356.11 21172.9 36793.4 -9 80 3193 8092.3 15142.2 22594.7 -10 90 3192 -813.259 6775.73 12399.2 -11 100 3191 -8083.62 6594.28 8098.2 -12 110 3190 -4262.17 255.259 3019.07 -13 120 3189 -1874.83 -10075.8 119.877 -14 130 3188 6607.95 -6808.07 -1352.92 -15 140 3187 5495.88 -3654.74 1446.7 -16 150 3186 -944.512 -10184.4 -7129.26 -17 160 3185 2918.07 -11083.3 -6413.98 -18 170 3184 16905.5 -12687.1 -9252.08 -19 180 3183 19646.1 -14522.4 -8774.37 -20 190 3182 18251.1 -11780.9 -3660.27 -21 200 3181 11326.7 -3820.23 -460.852 -22 210 3180 13187.9 -1671.35 361.478 -23 220 3179 11541.3 -2294.28 5734.45 -24 230 3178 13786.4 -11462.4 1659.81 -25 240 3177 2804.49 -9500.63 -3939.47 -26 250 3176 -5686.33 -1191.86 -10557.8 -27 260 3175 -6907.01 -2663.11 -8514.7 -28 270 3174 -6375.09 3481.3 -1051.74 -29 280 3173 -3608.7 11531.2 13134.4 -30 290 3172 -2690.45 11230.1 15710.9 -31 300 3171 -1139.22 -982.583 13249.1 -32 310 3170 -2891.03 -8176.05 13862.3 -33 320 3169 -7952.78 -7460.98 21783.3 -34 330 3168 -12143.1 -14262.6 25350.8 -35 340 3167 -10755.6 -13229.1 27586.6 -36 350 3166 -6399.44 -11616.3 27979.3 -37 360 3165 -9345.81 -9666.01 22951.7 -38 370 3164 -13973.1 -10394.1 11751 -39 380 3163 -8628.79 -17838.8 3078.18 -40 390 3162 -7167.6 -15823 816.894 -41 400 3161 -4753.6 -9189.16 142.36 -42 410 3160 -3592.87 -546.274 4274.34 -43 420 3159 -6954.01 8968.57 15005.3 -44 430 3158 -6657.25 13028.8 11861.2 -45 440 3157 3529.5 7202.59 6264.2 -46 450 3156 2793.88 11869.6 1023.1 -47 460 3155 4089.69 21414 628.527 -48 470 3154 3897.19 21703.6 -5827.49 -49 480 3153 3746.47 17009.2 -6605.18 -50 490 3152 4425.06 13109.1 -7335.82 -51 500 3151 8840.71 9978.37 -652.777 -52 510 3150 13880.1 9284.72 411.988 -53 520 3149 24218.1 13501.5 -4698.84 -54 530 3148 16914 23026.8 -4745.53 -55 540 3147 12166.7 22192.2 4243.76 -56 550 3146 3623.2 15680.2 12404.4 -57 560 3145 -7178.64 18982.7 9874.62 -58 570 3144 3929.87 20194.1 4072.88 -59 580 3143 6555.92 16452.2 7210.24 -60 590 3142 1725.86 10445.9 4738.97 -61 600 3141 -7544.15 1314.75 372.005 -62 610 3140 -9138.1 -1431.35 8458.5 -63 620 3139 -4752.21 -296.17 19946.5 -64 630 3138 -1762.5 1267.55 27452.1 -65 640 3137 -820.914 -95.2929 24900.5 -66 650 3136 4146.41 -2882.89 25815.5 -67 660 3135 -2625.9 -4145.39 25743.7 -68 670 3134 -3700.11 2901.85 18564 -69 680 3133 570.971 1753.56 16030.4 -70 690 3132 3263.35 -3607.68 16613.9 -71 700 3131 8371.91 -2226.28 13209.6 -72 710 3130 7101.13 5210.66 16167.8 -73 720 3129 1691.48 5482.85 15686.7 -74 730 3128 4179.68 6081.25 16482 -75 740 3127 13080.3 10417.1 10268.7 -76 750 3126 20301.9 6937.26 12568.9 -77 760 3125 21369.5 4216.46 15638.6 -78 770 3124 12868.3 7833.99 13485.3 -79 780 3123 11172.2 13051.2 14374.6 -80 790 3122 3622.41 9603.99 8445.09 -81 800 3121 1576.16 5140.94 4568.39 -82 810 3120 1490.36 3214.23 -3631.2 -83 820 3119 -1233.63 1707.14 -2786.74 -84 830 3118 4732.9 1631.61 4703.77 -85 840 3117 6235.1 11441 6445.34 -86 850 3116 4926.53 17005 11295 -87 860 3115 351.308 9425.78 9898.4 -88 870 3114 -5076.48 -119.876 4685.31 -89 880 3113 -6185.45 2167.14 -1410.61 -90 890 3112 -8545.48 2857.97 4395.89 -91 900 3111 -11721.3 -2038.5 11249.7 -92 910 3110 -7890.42 2271.29 8558.54 -93 920 3109 -7246.52 5484.51 11502.8 -94 930 3108 -8097.65 13377.3 12147 -95 940 3107 -8875.36 13997.4 11409.7 -96 950 3106 -6966.29 7098.6 10740.8 -97 960 3105 -586.224 -1084.07 3085.02 -98 970 3104 1643.28 -694.847 2227.69 -99 980 3103 -2008.84 8927.13 1415.22 -100 990 3102 107.621 13884.8 3387.9 -101 1000 3101 -1382.27 18154.9 7070.37 -102 1010 3100 2451.07 14896.3 8466.18 -103 1020 3099 9271.1 7465.37 6720.82 -104 1030 3098 12232.1 -581.439 -3447.77 -105 1040 3097 18270.9 -7001.39 -1243.89 -106 1050 3096 26327.7 -4489.49 996.75 -107 1060 3095 19157.2 -2022.77 5113.12 -108 1070 3094 9438.02 -8683.78 8552.09 -109 1080 3093 4775.17 -2314.75 20657.8 -110 1090 3092 11541.5 1649.8 21635.9 -111 1100 3091 17898 -913.908 13818.1 -112 1110 3090 15498.1 -3174.86 1780.09 -113 1120 3089 7702.78 -40.6467 -3462.05 -114 1130 3088 2723.59 6354.47 -3135.55 -115 1140 3087 6489.97 104.15 -2952.45 -116 1150 3086 9379.98 -1754.35 -3814.29 -117 1160 3085 4319.61 -628.644 -2006.89 -118 1170 3084 2255.12 359.066 5949.52 -119 1180 3083 -5880.44 3857.83 12770 -120 1190 3082 1799.67 6811.47 9623.98 -121 1200 3081 6863.25 6452.38 5166.17 -122 1210 3080 948.845 8342.92 7564.9 -123 1220 3079 -2280.17 6921.13 10136.2 -124 1230 3078 2841.5 8203.38 7511.66 -125 1240 3077 4282.01 5391.55 6389.87 -126 1250 3076 7256.53 6253.4 -1383.9 -127 1260 3075 13977.8 10865.4 -4855.25 -128 1270 3074 14367.9 7918.75 -6121.31 -129 1280 3073 12269.6 10091.4 -8167.21 -130 1290 3072 5494.51 -2815.61 -2995.11 -131 1300 3071 722.917 -3256.46 3525.29 -132 1310 3070 -3770.89 -6745.41 -8139.52 -133 1320 3069 -890.523 -7623.05 -9280.51 -134 1330 3068 4287.6 -1327.7 -6029.87 -135 1340 3067 4453.43 9590.32 2477.24 -136 1350 3066 -1726.09 15779.4 3023.99 -137 1360 3065 -11340.4 7838.85 540.674 -138 1370 3064 -14327.3 7660.07 -5387.32 -139 1380 3063 -8811.17 10658.8 -5782.84 -140 1390 3062 -10663.2 15362 -482.99 -141 1400 3061 -9174.78 9962.12 7552.59 -142 1410 3060 -9412.31 15658.5 8441.62 -143 1420 3059 1121.15 16136.9 8444.24 -144 1430 3058 7680.35 12319.1 9502.59 -145 1440 3057 2015.52 12138.1 6124.66 -146 1450 3056 2958.53 8966.4 -4694.9 -147 1460 3055 5784.25 -1687.26 -9896.39 -148 1470 3054 6883.57 -2087 -12030 -149 1480 3053 7795.14 -3129.5 -9995.08 -150 1490 3052 8394.28 7484.21 -12938.7 -151 1500 3051 2344.58 3462.22 -7033.67 -152 1510 3050 -1694.08 -2661.49 -2999.79 -153 1520 3049 -1273.91 116.071 6908.25 -154 1530 3048 1640.86 -156.862 11908.8 -155 1540 3047 10723.7 -2383.33 8743.48 -156 1550 3046 6979.98 -3258.63 6769.39 -157 1560 3045 3184.98 -17215.4 7187.72 -158 1570 3044 2913.05 -23913.4 5792.95 -159 1580 3043 1164.19 -28158.7 7192.48 -160 1590 3042 4273.15 -28432.9 1181.55 -161 1600 3041 1914.29 -30298.7 113.456 -162 1610 3040 -5177.59 -30963.4 -7318.36 -163 1620 3039 -8012.05 -23670 -7201.48 -164 1630 3038 -2311.33 -19885.5 -1477.5 -165 1640 3037 -4373.65 -24384.1 -861.655 -166 1650 3036 -11388.4 -26378 2560.95 -167 1660 3035 -12676.4 -17903.4 6327.86 -168 1670 3034 -10877.6 -18296.8 9578.48 -169 1680 3033 -5887.02 -9624.47 14368.1 -170 1690 3032 -791.124 -2211.86 10451.9 -171 1700 3031 -1059.28 -3669.32 10299.5 -172 1710 3030 -4275.16 69.7005 13284.9 -173 1720 3029 217.85 7228.31 12165.1 -174 1730 3028 -265.65 9762.86 9049.88 -175 1740 3027 7234.06 4826 9609.92 -176 1750 3026 3363.58 4931.16 10437.2 -177 1760 3025 -951.426 18313.8 8024.34 -178 1770 3024 1099.23 19477.2 1230.29 -179 1780 3023 9428.7 13826.8 -397.015 -180 1790 3022 10071.9 7485.73 -2644.42 -181 1800 3021 10003.3 3018.12 -6823.53 -182 1810 3020 8337.19 4533.03 -9440.81 -183 1820 3019 9519.04 4500.2 -11041.8 -184 1830 3018 504.654 -24.2321 -11009.4 -185 1840 3017 -2944.94 -5533.72 -13475.8 -186 1850 3016 -3608.24 -6541.03 -10083.1 -187 1860 3015 1749.3 -9588.91 -10399.2 -188 1870 3014 9231.7 -13655.6 -10178.5 -189 1880 3013 7826.64 -13543.9 -16377.7 -190 1890 3012 1218.91 -7857.41 -14150.8 -191 1900 3011 -5519.67 -8141.43 -6906.15 -192 1910 3010 -1058.95 -341.686 -4391.86 -193 1920 3009 10542.9 9344.26 -4162.95 -194 1930 3008 9557.13 15212.4 -3073.01 -195 1940 3007 11718.1 24973.5 406.253 -196 1950 3006 19059.1 26729.3 -2521.01 -197 1960 3005 12869.4 18437 -7872.81 -198 1970 3004 9773.89 5170.62 -8838.13 -199 1980 3003 8961.86 9641.62 -6400.47 -200 1990 3002 10033.8 2062.58 -7115.21 -34000 200 -1 0 3401 381745 364757 400519 -2 10 3400 221482 208003 244871 -3 20 3399 113968 111431 133574 -4 30 3398 74436.8 71014.2 92067.3 -5 40 3397 60276.6 51396.4 72076.6 -6 50 3396 43197.4 32905.7 59055.2 -7 60 3395 23484.8 19425 45060.6 -8 70 3394 9304.61 17931.9 35650.3 -9 80 3393 8926.51 12056.9 20786.2 -10 90 3392 150.811 4763.86 9737.45 -11 100 3391 -6948.93 4700.11 7480.79 -12 110 3390 -1615.21 803.904 2889.2 -13 120 3389 1072.97 -9547.04 -206.917 -14 130 3388 7383.34 -7221.01 -243.283 -15 140 3387 6169.87 -4538.77 2790.79 -16 150 3386 626.033 -10521.9 -5049.29 -17 160 3385 4382.87 -11619.7 -4155.94 -18 170 3384 18030.7 -11392.4 -7611.73 -19 180 3383 18806.1 -12456.8 -7222.07 -20 190 3382 16558.3 -9105.32 -1958.53 -21 200 3381 9924.55 -489.946 2032.3 -22 210 3380 11965.1 1016.34 2432.71 -23 220 3379 12156.8 -1143.71 5940.06 -24 230 3378 16184.4 -11544.6 1175.15 -25 240 3377 6697.03 -11300.1 -3706.61 -26 250 3376 -1647.35 -4615.63 -9654.65 -27 260 3375 -5833.21 -4140.83 -7451.88 -28 270 3374 -5944.78 1510.36 -1138.46 -29 280 3373 -4594.4 9209.9 12428.9 -30 290 3372 -2113.41 9697.36 15309.3 -31 300 3371 -1015.17 500.499 12931.3 -32 310 3370 -2253.93 -4659.71 14646.7 -33 320 3369 -7620.29 -4432.89 18042.7 -34 330 3368 -11415.9 -12179.2 18896.8 -35 340 3367 -10187.3 -11541 21346.4 -36 350 3366 -6042.17 -9620.23 23517.6 -37 360 3365 -8276.81 -8233.99 19775.2 -38 370 3364 -13331.5 -8121.67 10004.7 -39 380 3363 -10687.5 -14870.1 1741.28 -40 390 3362 -8403.92 -12789.5 826.6 -41 400 3361 -5695.08 -6477.99 -660.158 -42 410 3360 -3982.91 2106.44 5005.63 -43 420 3359 -5846.23 9135.31 17409.5 -44 430 3358 -7698.44 11188.7 11935.9 -45 440 3357 1645.63 4881.53 5851.85 -46 450 3356 1833.86 11208.7 1989.12 -47 460 3355 4185.84 21788.4 981.209 -48 470 3354 5672.18 23379.8 -4543.17 -49 480 3353 4284.83 18781.7 -6465.44 -50 490 3352 2506.63 12258.5 -10528.5 -51 500 3351 6500.49 7727.7 -4734.07 -52 510 3350 10952.8 8262.62 -2579.7 -53 520 3349 21702.4 14408.9 -6496.94 -54 530 3348 16092.2 22501.8 -7203.89 -55 540 3347 12603.3 20806 321.389 -56 550 3346 2532.31 12876.5 7915.52 -57 560 3345 -7297.09 14585.8 4138.85 -58 570 3344 3849.07 16314.7 1479.04 -59 580 3343 8338.21 13292.2 6740.99 -60 590 3342 5583.24 8066.24 4948.69 -61 600 3341 -4144.1 831.603 345.19 -62 610 3340 -5836.35 -1932.35 6330.33 -63 620 3339 -3084.98 716.305 17563 -64 630 3338 -2630.58 3759.41 25303.3 -65 640 3337 -2568.73 1669.45 23699.9 -66 650 3336 2065.1 -700.885 25742.7 -67 660 3335 -2487.28 -2639.67 26181.2 -68 670 3334 -4448.17 4053.39 17283.5 -69 680 3333 -51.4708 3602.28 14028 -70 690 3332 3563.59 -2592.21 15411 -71 700 3331 8384.3 -4700.95 14655.4 -72 710 3330 8519.07 1833.29 15599.9 -73 720 3329 3048.35 2425.99 14062.2 -74 730 3328 4972.64 2643.42 13309.3 -75 740 3327 11812.1 7632.08 4947.31 -76 750 3326 17371.2 3662.63 7810.92 -77 760 3325 20358.5 998.285 13338.5 -78 770 3324 13816.1 5730.77 11613.4 -79 780 3323 13241.5 11191.9 12445.8 -80 790 3322 6418.26 9041.01 4060.18 -81 800 3321 4368.77 6205.61 -1201.13 -82 810 3320 3848.26 3420.82 -7563.85 -83 820 3319 1105.99 3390.77 -5594.35 -84 830 3318 6969.7 4956.2 4341.85 -85 840 3317 8996.56 14109.5 6599.34 -86 850 3316 6316.84 17248.3 10252.8 -87 860 3315 215.945 9450.66 10955.5 -88 870 3314 -4865.63 -1266.96 5175.22 -89 880 3313 -6253.99 986.494 -1890.67 -90 890 3312 -8319.63 1336.05 5428.93 -91 900 3311 -10674 -6319.13 12481.4 -92 910 3310 -7334.37 -3275.21 7616.53 -93 920 3309 -6578 1188.77 9990.74 -94 930 3308 -6200.53 10946.2 10413.4 -95 940 3307 -8911.38 14439.6 9645.14 -96 950 3306 -5224.96 8366.88 9783.04 -97 960 3305 1681.53 -2189.78 4730.76 -98 970 3304 2376.89 -3100.31 4837.19 -99 980 3303 -2734.58 7679.6 2351.32 -100 990 3302 -1308.85 14788 3729.23 -101 1000 3301 -1523.42 21099.5 7162.58 -102 1010 3300 4417.88 16660 9139.24 -103 1020 3299 10624.4 6985.47 8218.57 -104 1030 3298 13818.1 -930.632 -2615.03 -105 1040 3297 21866.3 -7381.34 -2608.35 -106 1050 3296 29829.6 -3666.02 208.848 -107 1060 3295 21860.5 -199.307 4291.62 -108 1070 3294 11902.6 -7578.32 8585.44 -109 1080 3293 7290.16 -2316.25 19182.5 -110 1090 3292 12856.7 952.734 20279.6 -111 1100 3291 17816.2 -1945.21 13054.8 -112 1110 3290 14973.5 -4404.2 1623.87 -113 1120 3289 8107.94 -2128.01 -1589.94 -114 1130 3288 3148.08 3619.03 -634.868 -115 1140 3287 5689.32 412.554 -1187.47 -116 1150 3286 6259.35 425.765 -3247.16 -117 1160 3285 1480.84 310.141 -2082.83 -118 1170 3284 -422.629 -539.488 5726.44 -119 1180 3283 -7218.94 1822.98 9455.29 -120 1190 3282 1027.4 6379.74 4987.47 -121 1200 3281 6368.92 7593.95 1017.18 -122 1210 3280 788.886 8707.39 3503.24 -123 1220 3279 -3139.3 5299.71 6678.57 -124 1230 3278 775.54 4688.31 6954.24 -125 1240 3277 1857.48 2488.34 5395.7 -126 1250 3276 5816.48 5270.94 -2890.82 -127 1260 3275 12964.2 10673.1 -7390.91 -128 1270 3274 13752.9 8099.06 -7531.9 -129 1280 3273 13526.9 9080.5 -7353.95 -130 1290 3272 6516.13 -3795.52 -3252.79 -131 1300 3271 1143.58 -4525.3 1389.71 -132 1310 3270 -3735.45 -6336.36 -9908.75 -133 1320 3269 194.223 -6697.1 -12229.6 -134 1330 3268 4082.87 -2116.14 -8260.52 -135 1340 3267 2414.18 7420.53 830.619 -136 1350 3266 -2338.65 15140.7 1187.01 -137 1360 3265 -9655.8 8351.18 -1066.73 -138 1370 3264 -10027.1 7117.21 -8370.15 -139 1380 3263 -5925.98 8053.61 -8638.93 -140 1390 3262 -9054.57 11737 -4365.48 -141 1400 3261 -8431.8 7241.68 3234.07 -142 1410 3260 -9716.08 12406.4 4906.28 -143 1420 3259 -120.716 12499.9 3671.41 -144 1430 3258 6022.09 8732.45 2873.81 -145 1440 3257 718.86 8846.86 -1262.4 -146 1450 3256 2193.33 7225.12 -12897.8 -147 1460 3255 4049.72 -122.225 -17522.2 -148 1470 3254 4389.4 -802.005 -16269.6 -149 1480 3253 5595.46 -2946.94 -11890.7 -150 1490 3252 6412.92 5738.29 -14868.8 -151 1500 3251 1943.98 1066.48 -10338.5 -152 1510 3250 -913.349 -4122.9 -7208.02 -153 1520 3249 -683.523 -1171.97 2686.99 -154 1530 3248 3455.72 -883.842 8597.98 -155 1540 3247 11886 -2299.96 7791.95 -156 1550 3246 6703.22 -2545.31 7232.94 -157 1560 3245 2892.4 -17908.3 7648.5 -158 1570 3244 2927.88 -23583.5 5096.81 -159 1580 3243 447.246 -27932 5061.23 -160 1590 3242 1447.16 -29139.7 -21.2794 -161 1600 3241 -2480.11 -28915.4 -103.673 -162 1610 3240 -7030.81 -28457 -5887.36 -163 1620 3239 -6966.15 -20876 -5133.73 -164 1630 3238 -1342.76 -17647.4 -2493.75 -165 1640 3237 -3740.21 -24551.5 -1936.58 -166 1650 3236 -10509.8 -27473.5 2583.18 -167 1660 3235 -12646 -18188.7 5218.6 -168 1670 3234 -10912.9 -17194.2 9614.42 -169 1680 3233 -6519.53 -8192.05 12142.6 -170 1690 3232 -1838.34 -1050.4 8783.07 -171 1700 3231 -1912.6 -2961.55 9513.95 -172 1710 3230 -6599.36 195.262 12172.2 -173 1720 3229 -1122.6 7143.83 8268.01 -174 1730 3228 1416.38 8273.66 4893.42 -175 1740 3227 9068.51 2606.83 5291.32 -176 1750 3226 3866.61 -385.957 7433.31 -177 1760 3225 -2390.3 10419.4 6282.05 -178 1770 3224 923.131 12660.5 -1529.32 -179 1780 3223 9790.76 9721.28 -2963.84 -180 1790 3222 10394.3 6293.34 -2265.57 -181 1800 3221 10225.7 2856.91 -5942.24 -182 1810 3220 9669.28 5069.09 -8043.33 -183 1820 3219 11724.3 6406.79 -9670.14 -184 1830 3218 3820.51 3500.99 -9500.14 -185 1840 3217 -607.243 -2301 -13666.4 -186 1850 3216 -1792.71 -5934.78 -11215.4 -187 1860 3215 2708.33 -12179.4 -9079.13 -188 1870 3214 10455.7 -16434.9 -9003.38 -189 1880 3213 8693.13 -16288.9 -16815.3 -190 1890 3212 847.163 -8922.33 -15477.1 -191 1900 3211 -5814.21 -7449.87 -9153.91 -192 1910 3210 -2332.56 -635.525 -7103.69 -193 1920 3209 7548.26 8758.34 -4966.16 -194 1930 3208 5322.99 14246.7 -1730.52 -195 1940 3207 8572.42 22639.3 1846.22 -196 1950 3206 17552.8 23177.9 -2941.71 -197 1960 3205 13704.2 15001.3 -9057.3 -198 1970 3204 11156.7 649.754 -10187.1 -199 1980 3203 10870.4 5801.07 -6244.29 -200 1990 3202 11586.4 1080.83 -5924.55 -36000 200 -1 0 3601 382305 364246 402025 -2 10 3600 220759 207293 246355 -3 20 3599 110913 110475 135654 -4 30 3598 70277.5 71630.1 93746.1 -5 40 3597 57365.9 52561.7 72189.1 -6 50 3596 41826.8 32489.7 58821.8 -7 60 3595 22860.3 17080 47457.7 -8 70 3594 8721.86 16752.1 38500.2 -9 80 3593 8271.23 12698.1 23995.7 -10 90 3592 -420.931 4886.72 14395.4 -11 100 3591 -8294.58 4500.66 10714.3 -12 110 3590 -4447.57 1495.17 3560.85 -13 120 3589 -3514.34 -6915.17 257.105 -14 130 3588 3113.55 -3200.15 -77.0857 -15 140 3587 3911.88 -2013.53 3150.37 -16 150 3586 271.436 -9047.21 -2356.08 -17 160 3585 4456.61 -10987.3 205.518 -18 170 3584 17371.9 -12852.6 -3388.04 -19 180 3583 18696.3 -14234.3 -2694.96 -20 190 3582 17903.3 -9619.01 885.257 -21 200 3581 10843.6 -675.714 2950.22 -22 210 3580 12107.8 327.135 2942.09 -23 220 3579 12183.1 -1674.51 7881.76 -24 230 3578 15018.5 -10578 3331.23 -25 240 3577 4691.07 -10043.9 -999.519 -26 250 3576 -2995.23 -5745.82 -5654.13 -27 260 3575 -4269.84 -5910.28 -5133.78 -28 270 3574 -3223.32 1141 603.162 -29 280 3573 -466.878 7800.7 15829.8 -30 290 3572 -156.021 6534.31 16490.9 -31 300 3571 -1488.55 -2086.62 14205.9 -32 310 3570 -3777.41 -5275.85 16838.9 -33 320 3569 -7887.18 -4473.62 19996.4 -34 330 3568 -10740.3 -12805.7 20054.2 -35 340 3567 -10681.8 -10001.7 24723.1 -36 350 3566 -6573.16 -7677.35 27300.8 -37 360 3565 -6362.29 -10102.8 22233.6 -38 370 3564 -11105.5 -10998.8 12203.7 -39 380 3563 -10405 -17184.8 4304.05 -40 390 3562 -10650.4 -13469.5 793.986 -41 400 3561 -8563.13 -6989.56 665.708 -42 410 3560 -5048.75 711.292 5916.75 -43 420 3559 -5146.97 8282.27 17179.4 -44 430 3558 -6122.79 11092.6 12633.1 -45 440 3557 3252.23 6001.4 7945.5 -46 450 3556 4143.5 12116.4 3236.37 -47 460 3555 6313.48 22553 2024.73 -48 470 3554 9638.02 25054.6 -2965.91 -49 480 3553 5039.35 20103.9 -7452.43 -50 490 3552 203.5 10896.1 -11863.2 -51 500 3551 4725.58 5286.42 -4304.09 -52 510 3550 11652 4911.63 -2710.63 -53 520 3549 24077 9075.25 -6758.5 -54 530 3548 19044.2 17148.7 -6448.62 -55 540 3547 13718.6 16966.2 -1134.43 -56 550 3546 4923.99 10286.6 4568.47 -57 560 3545 -4520.13 11334.6 2810.39 -58 570 3544 3083.38 13171.4 516.01 -59 580 3543 5505.01 11102.7 4476.26 -60 590 3542 2455.31 6602.82 3398.71 -61 600 3541 -5429.51 -2164.39 -663.178 -62 610 3540 -6195.97 -5134.57 4668.63 -63 620 3539 -3265.65 -1168.69 16545.9 -64 630 3538 -3202.19 2026.25 24046.4 -65 640 3537 -1833.28 -32.0259 20512.4 -66 650 3536 2808.6 -1984.53 22711.5 -67 660 3535 -3581.38 -1993.98 23882.6 -68 670 3534 -7312.78 4198.69 13443.4 -69 680 3533 -2364.14 3640.61 10758.2 -70 690 3532 3164.69 -2465.85 13415.3 -71 700 3531 8659.33 -4593.24 13100.3 -72 710 3530 8888.78 1224.44 12935.5 -73 720 3529 5307.3 2222.97 12419.2 -74 730 3528 10701.4 1776.26 10685 -75 740 3527 16381.7 6061.47 2034.59 -76 750 3526 19137.7 3995.5 6320.62 -77 760 3525 19897.6 1284.54 10859.5 -78 770 3524 13034.4 5926.52 8458.32 -79 780 3523 13644.6 11312.7 10843 -80 790 3522 6971.29 10013.9 2666.84 -81 800 3521 6062.59 7574.85 -2143.78 -82 810 3520 5168.42 5066.39 -7347.2 -83 820 3519 1145.37 5067.82 -6094.25 -84 830 3518 6362.03 5979.56 511.53 -85 840 3517 8353.35 13896.3 2599.43 -86 850 3516 4972.51 18601.5 6633.47 -87 860 3515 -2998.08 10993.5 6905.56 -88 870 3514 -8355.12 653.384 2880.97 -89 880 3513 -5923.22 4263.85 -3744.25 -90 890 3512 -3213.42 4450.53 735.463 -91 900 3511 -6404.18 -3162.94 8475.72 -92 910 3510 -4168.89 -1001.48 5411.22 -93 920 3509 -5793.06 3453.16 6253.78 -94 930 3508 -6334.27 13417.4 6463.71 -95 940 3507 -7727.53 16673.2 6367.36 -96 950 3506 -5155.17 11134.7 7304.04 -97 960 3505 2424.95 2635.2 4212.15 -98 970 3504 3697.11 1289.16 6948.78 -99 980 3503 -1123.16 10339.6 4802.29 -100 990 3502 361.588 16998.7 2904.5 -101 1000 3501 906.861 22568.1 6031.75 -102 1010 3500 5869.65 17396.5 6704.09 -103 1020 3499 11796.1 6575.95 4213.46 -104 1030 3498 12741.8 -1471.88 -5873.67 -105 1040 3497 18938.5 -7443.54 -6705.44 -106 1050 3496 28220.1 -4178.36 -5083.92 -107 1060 3495 22481 -1770.58 727.583 -108 1070 3494 14227.3 -8443.61 5916.32 -109 1080 3493 9202.58 -2990.01 16169.8 -110 1090 3492 12859.3 1034.89 15895.8 -111 1100 3491 17334.5 -1908.79 8160.75 -112 1110 3490 15584.3 -4235.19 -3039.17 -113 1120 3489 9145.01 -626.848 -5116.81 -114 1130 3488 2115.01 4446.59 -1897.54 -115 1140 3487 3634.26 -37.8935 -1607.56 -116 1150 3486 5223.32 -258.692 -2358.15 -117 1160 3485 3138.75 -1015.13 234.461 -118 1170 3484 254.257 -2462 6043.92 -119 1180 3483 -7159 -559.131 8643 -120 1190 3482 318.351 3724.43 3447.57 -121 1200 3481 6044.88 6873.2 -189.599 -122 1210 3480 1232.25 7821.72 2292.76 -123 1220 3479 -3599.27 4561.26 5766.47 -124 1230 3478 464.673 5098.11 4761.36 -125 1240 3477 2991.9 3398.31 1719.78 -126 1250 3476 9146.39 4930.52 -6026.97 -127 1260 3475 16620.4 7832.95 -8772.34 -128 1270 3474 15239 6648.77 -8516.23 -129 1280 3473 13950.4 9090.76 -8375.24 -130 1290 3472 4761.71 -2509.72 -4919.68 -131 1300 3471 -475.228 -4380.81 -1907.4 -132 1310 3470 -5122.13 -5712.06 -11293.2 -133 1320 3469 -656.775 -6181.29 -10925 -134 1330 3468 3289.29 -2164.15 -6641.67 -135 1340 3467 2572.08 7116.1 2161.81 -136 1350 3466 -721.84 16110.8 2521.58 -137 1360 3465 -7671.28 9667.54 351.674 -138 1370 3464 -9271.74 7223.8 -6579.3 -139 1380 3463 -5237.45 6562.28 -6978.94 -140 1390 3462 -9686.75 10611.9 -3548.5 -141 1400 3461 -8537.97 6685.15 3519.05 -142 1410 3460 -6460.12 8941.38 4885.98 -143 1420 3459 3785.68 8940.32 3941.92 -144 1430 3458 8190.8 6510.92 4591.18 -145 1440 3457 2791.66 8285.23 774.165 -146 1450 3456 3480.39 5519.25 -11120.8 -147 1460 3455 4053.79 -2696.01 -17723.4 -148 1470 3454 4766.46 -1385.78 -16637.2 -149 1480 3453 5674.02 -2838.69 -12042.4 -150 1490 3452 6625.03 2530.01 -15361.6 -151 1500 3451 130.052 -3405.58 -10067.1 -152 1510 3450 -4009.51 -7829.78 -6606.01 -153 1520 3449 -1981.44 -2840.74 2891.15 -154 1530 3448 4286.72 -2792.74 9086.14 -155 1540 3447 13035.7 -4375.94 8151.17 -156 1550 3446 7469.81 -3752.03 8114.34 -157 1560 3445 2721.56 -17965.8 6955.26 -158 1570 3444 4014.88 -23413.6 3985.43 -159 1580 3443 2372.29 -26048.7 4718.72 -160 1590 3442 2816.95 -24757.2 41.323 -161 1600 3441 -2183.42 -24476.1 767.575 -162 1610 3440 -5799.62 -25728.1 -4852.84 -163 1620 3439 -4398.95 -19792 -4917.63 -164 1630 3438 1893.11 -16086.4 -1373.28 -165 1640 3437 -925.974 -22705.8 -1654.48 -166 1650 3436 -9072.47 -25490.6 1376.68 -167 1660 3435 -11213.5 -15120.2 3446.56 -168 1670 3434 -11502 -12710.8 8805.23 -169 1680 3433 -7623.99 -4727.09 13531.5 -170 1690 3432 -3483.15 214.062 10088.5 -171 1700 3431 -2075.59 -1567.44 8813.01 -172 1710 3430 -5549.75 1718.87 10583.5 -173 1720 3429 187.121 7202.45 6305.72 -174 1730 3428 4391.31 5682.45 4655.54 -175 1740 3427 10387.1 2871.81 6159.73 -176 1750 3426 4073.47 1075.31 7554.27 -177 1760 3425 -2851.94 9488.67 5199.55 -178 1770 3424 1766.01 10688 -2900.08 -179 1780 3423 10942.6 9506.07 -2795.86 -180 1790 3422 10704.1 8717.43 -590.612 -181 1800 3421 9959.21 3802.77 -3844.29 -182 1810 3420 9842.95 5234.5 -6043.01 -183 1820 3419 11391.8 7686.72 -7441.83 -184 1830 3418 1425.29 4906.03 -6494.1 -185 1840 3417 -2314.68 -1891.55 -11304.9 -186 1850 3416 -1094.4 -6385.56 -9237.74 -187 1860 3415 3318.23 -11225.5 -6991.57 -188 1870 3414 11396.8 -14894.7 -7864.95 -189 1880 3413 11315.8 -16242.5 -16697 -190 1890 3412 4870.89 -10803.5 -16538.8 -191 1900 3411 -2229.89 -10137.6 -11294.9 -192 1910 3410 -2608.94 -2040.68 -9828.03 -193 1920 3409 6200.97 7734.43 -7804.39 -194 1930 3408 3818.52 13748 -2992.46 -195 1940 3407 8475.73 22571.1 1083.83 -196 1950 3406 16922.4 22815.1 -2912.94 -197 1960 3405 14218.6 13223.3 -7983.75 -198 1970 3404 11331.2 -304.237 -8504.56 -199 1980 3403 10487.9 6004.86 -5114.3 -200 1990 3402 11148 1767.11 -5614.1 -38000 200 -1 0 3801 383858 362032 402897 -2 10 3800 221917 204720 245961 -3 20 3799 113671 108478 133839 -4 30 3798 73143.8 71126 92848.7 -5 40 3797 58862.5 53579.9 73181.3 -6 50 3796 43936.2 33113.7 58614.2 -7 60 3795 25825.8 17887.6 45708.4 -8 70 3794 11233 16324.3 37089.3 -9 80 3793 11161.1 11794 23623.7 -10 90 3792 1924.93 5807.87 14696 -11 100 3791 -6700.79 6908.95 10622.3 -12 110 3790 -3865.08 3809.8 3674.45 -13 120 3789 -2885.39 -5198.46 2199.91 -14 130 3788 2653.17 -1155.11 3051.5 -15 140 3787 3589.32 -92.4003 6442.35 -16 150 3786 -1620.29 -7466.94 62.374 -17 160 3785 1322.85 -9447.69 627.363 -18 170 3784 12556.7 -10243.4 -2744.06 -19 180 3783 13190.8 -11480.9 -2046.32 -20 190 3782 12274.7 -6587.92 -337.35 -21 200 3781 5700.51 1586.52 -356.813 -22 210 3780 6851.74 1542.07 1255.89 -23 220 3779 7497.19 -518.552 6032.59 -24 230 3778 11253.9 -8127.57 2669.66 -25 240 3777 2952.84 -8645.45 -1427.4 -26 250 3776 -3202.75 -5685.64 -3253.9 -27 260 3775 -5245.66 -8013.09 -1679.81 -28 270 3774 -3404.54 -1197.01 3241.9 -29 280 3773 -97.3696 6579.16 17931.2 -30 290 3772 -117.471 5782.36 19191.9 -31 300 3771 -1935.69 -2315.37 17541.1 -32 310 3770 -2671.71 -4880.3 18126.7 -33 320 3769 -6313.73 -2437.34 20124.6 -34 330 3768 -9308.79 -9286.16 22297.5 -35 340 3767 -8743.44 -5630.37 25769.3 -36 350 3766 -3413.94 -4351.09 27057.8 -37 360 3765 -1740.82 -8242.72 21236 -38 370 3764 -4766.38 -10162.3 11614.6 -39 380 3763 -5622.73 -16281.9 4427.63 -40 390 3762 -6785.85 -12976.2 1166.29 -41 400 3761 -3583.08 -5398.08 1042.58 -42 410 3760 -366.899 -71.6651 6845.83 -43 420 3759 -646.16 6380.72 18837.2 -44 430 3758 -2680.26 10357 13348.6 -45 440 3757 4169.13 6164.13 8285.23 -46 450 3756 5920.08 11771 4081.19 -47 460 3755 7562.58 21195.6 2786.67 -48 470 3754 10294.5 23944.2 -3560.56 -49 480 3753 5453.02 19956.4 -8602.25 -50 490 3752 292.861 10857.5 -13965.1 -51 500 3751 4374.69 4869.59 -8487.4 -52 510 3750 8947.73 4388.53 -7713.88 -53 520 3749 20206.2 8127.91 -11224.6 -54 530 3748 14059.4 17083.9 -10736.6 -55 540 3747 7773 16266 -4042.7 -56 550 3746 -8.96073 9516.2 2877.7 -57 560 3745 -7869.16 10833.9 2490.53 -58 570 3744 -2110.54 13687.7 -398.787 -59 580 3743 -927.598 11847.1 3675.2 -60 590 3742 -3666.32 6118.81 3530.71 -61 600 3741 -10482.6 -3167.12 592.686 -62 610 3740 -8576.67 -5560.55 5316.05 -63 620 3739 -5492.9 -2225.06 14934 -64 630 3738 -5560.51 -862.647 23300.5 -65 640 3737 -3956.84 -2239.8 18272 -66 650 3736 -516.826 -3463.02 18586.5 -67 660 3735 -6692.01 -3419.97 18981.9 -68 670 3734 -10531.5 1089.22 10952.9 -69 680 3733 -4772.1 1895.16 8209 -70 690 3732 2140.87 -3702.73 9066.32 -71 700 3731 8899.84 -5127.77 8969.92 -72 710 3730 9640.15 -1676.15 11953.4 -73 720 3729 6632.39 -24.1557 13094.2 -74 730 3728 12185.7 -1180.72 10473.3 -75 740 3727 18672.2 3231.28 578.833 -76 750 3726 20735.1 1803.66 3969.07 -77 760 3725 19619.1 -2403.21 7225.48 -78 770 3724 12033.7 2111.21 4864.16 -79 780 3723 12481.8 8046.6 6889.96 -80 790 3722 4656.96 7242.93 -360.785 -81 800 3721 4677.91 4644.88 -6354.26 -82 810 3720 4306.08 2541.48 -11731.1 -83 820 3719 -1214.84 1642.45 -10701.1 -84 830 3718 2940.96 2219.47 -6537.95 -85 840 3717 5538.42 9245.39 -4866.58 -86 850 3716 1836.68 13799 410.843 -87 860 3715 -3008.39 5499.83 3437.02 -88 870 3714 -6036.73 -3623.73 1064.32 -89 880 3713 -3169.4 719.36 -3456.21 -90 890 3712 -545.478 714.457 3416.11 -91 900 3711 -5723.1 -7001.59 9874.7 -92 910 3710 -5488.2 -3741 6205.66 -93 920 3709 -6717.21 1375.69 5640.13 -94 930 3708 -6921.14 12142.8 5627.11 -95 940 3707 -9442.07 15377.6 5417.45 -96 950 3706 -7494.14 9026.95 5618.42 -97 960 3705 -1411.43 -522.415 3034.32 -98 970 3704 457.571 -1328.66 5480.84 -99 980 3703 -1927.62 8461.78 2342.56 -100 990 3702 -1855.81 13387.2 -846.315 -101 1000 3701 -2505.62 17637.5 3414.31 -102 1010 3700 4331.08 14810.8 6625.68 -103 1020 3699 9723.43 5171.03 5167.06 -104 1030 3698 11480.6 -2955.36 -5201.68 -105 1040 3697 17650.1 -7717.95 -6500.43 -106 1050 3696 25460.6 -3851.04 -4829.76 -107 1060 3695 21824.7 -2390.69 -31.2917 -108 1070 3694 14464.9 -8818.62 3936.9 -109 1080 3693 9375.16 -3430.87 12651.3 -110 1090 3692 13545.9 127.296 11547.3 -111 1100 3691 16432.6 -2610.98 3347.89 -112 1110 3690 17275.5 -4375.31 -7907.02 -113 1120 3689 12842.9 -637.376 -9440.41 -114 1130 3688 5521.59 3753.43 -6433.33 -115 1140 3687 6432.22 -98.7716 -4444.68 -116 1150 3686 7817.27 1305.48 -3475.15 -117 1160 3685 6103.96 887.012 -1950.44 -118 1170 3684 4435.79 25.7134 4673.35 -119 1180 3683 -4021.18 1563.42 7201.09 -120 1190 3682 1342.38 4871.55 2559.89 -121 1200 3681 7423.31 7524.85 -515.765 -122 1210 3680 3947.31 8913.54 1101.2 -123 1220 3679 -525.01 3758.44 3336.56 -124 1230 3678 2036.89 3652.28 2921.73 -125 1240 3677 3229.59 2373.37 1710.49 -126 1250 3676 8724.82 5318.68 -6437.23 -127 1260 3675 17014.7 8105.89 -9350.08 -128 1270 3674 15303.1 7331.74 -8280.12 -129 1280 3673 14045.8 11021.7 -8950.06 -130 1290 3672 3570.9 -727.8 -5413.04 -131 1300 3671 -1787.34 -2806.57 -1450.12 -132 1310 3670 -5391.44 -4302.27 -9253.12 -133 1320 3669 -677.382 -4922.83 -9609.54 -134 1330 3668 4147.54 -166.24 -5022.85 -135 1340 3667 4383.62 8506.2 3454.85 -136 1350 3666 149.22 15691.6 3848.61 -137 1360 3665 -6866.41 9611.81 1576.99 -138 1370 3664 -11306.5 8341.05 -5683.47 -139 1380 3663 -8240.2 8818.87 -6137.12 -140 1390 3662 -11149.5 11332.3 -2837.64 -141 1400 3661 -9357.8 7258.02 2624.35 -142 1410 3660 -5946.89 9383.47 1775.63 -143 1420 3659 4153.41 9309.11 212.673 -144 1430 3658 9309.99 6817.8 1805.13 -145 1440 3657 3544.34 7901.41 -1540.45 -146 1450 3656 2882.39 6292.3 -10656.2 -147 1460 3655 2873.65 -1904.05 -15233.1 -148 1470 3654 3901.07 -743.411 -13423.5 -149 1480 3653 6550.74 -3239.01 -10005.6 -150 1490 3652 10014.9 3336.73 -12553.4 -151 1500 3651 2929.68 -1053.03 -7668.46 -152 1510 3650 -3651.95 -4133.18 -5718.2 -153 1520 3649 -1796.18 727.983 3924.82 -154 1530 3648 3689.79 246.322 9330.69 -155 1540 3647 11143.1 -1860.73 9558.51 -156 1550 3646 5385.24 -333.428 9751.95 -157 1560 3645 387.065 -14559.3 8752.75 -158 1570 3644 2465.92 -21026.1 6352.68 -159 1580 3643 1877.33 -25434.7 6591.55 -160 1590 3642 3447.98 -24382.7 1883.23 -161 1600 3641 -2413.46 -22438.9 3087.65 -162 1610 3640 -5497.37 -23645.6 -444.777 -163 1620 3639 -2384.18 -17560.1 -971.744 -164 1630 3638 3896.29 -13728.5 2492.63 -165 1640 3637 754.668 -20012.7 4154.68 -166 1650 3636 -7580.49 -20959.9 5700 -167 1660 3635 -11722.3 -11234.2 5885.33 -168 1670 3634 -11465.1 -9744.32 10464.1 -169 1680 3633 -6806.82 -2185.37 15088.1 -170 1690 3632 -3061.02 2748.61 12253 -171 1700 3631 -2694.37 369.929 12503.4 -172 1710 3630 -7595.63 3201.51 11689.8 -173 1720 3629 -2206.13 8133.65 5105.75 -174 1730 3628 1212.3 7960.72 2877.98 -175 1740 3627 6422.29 4974.63 3437.1 -176 1750 3626 935.573 2140.08 4316.55 -177 1760 3625 -3707.43 10260.2 2478.89 -178 1770 3624 1007.83 11115.6 -2218.98 -179 1780 3623 10794.1 8689.31 -399.748 -180 1790 3622 9195.39 7339.72 2341.8 -181 1800 3621 7105.65 3285.78 -981.727 -182 1810 3620 9233.74 3548.25 -4159.59 -183 1820 3619 12447.3 4333.67 -5341.48 -184 1830 3618 2623.6 2489.33 -3418.7 -185 1840 3617 -1762.16 -2382.89 -8379.84 -186 1850 3616 -1761.18 -5015.74 -4404.92 -187 1860 3615 3551.87 -8890.04 -2114.84 -188 1870 3614 11052.7 -10983.6 -2911.03 -189 1880 3613 11079.5 -14281.8 -10510.1 -190 1890 3612 4907.05 -9238.82 -10193.3 -191 1900 3611 -114.682 -9652.18 -5741.74 -192 1910 3610 -758.085 -2468.77 -3926.56 -193 1920 3609 6797.58 5280.56 -160.392 -194 1930 3608 3254.71 11499.1 4715.86 -195 1940 3607 7694.28 19614 7884.95 -196 1950 3606 16942.1 21100 3461.06 -197 1960 3605 14604.8 12139 -1952.25 -198 1970 3604 11951.5 -253.715 -4402.93 -199 1980 3603 7766.85 5715.41 -2817.68 -200 1990 3602 7262.8 2454.35 -3854.32 -40000 200 -1 0 4001 388066 362971 398512 -2 10 4000 226248 205178 241218 -3 20 3999 118621 109816 128107 -4 30 3998 79831.6 74325.9 86499.2 -5 40 3997 63819.2 56568.8 67769.8 -6 50 3996 47901.4 35104.2 54490.9 -7 60 3995 29120.9 21090.7 42290.6 -8 70 3994 14197.1 20362.5 35488 -9 80 3993 12421.8 14651 22855.1 -10 90 3992 2218.38 7833.68 13511 -11 100 3991 -5301.01 10177.5 9036.06 -12 110 3990 -3378.57 7351.8 3334.68 -13 120 3989 -2818.06 -2967.9 3202.44 -14 130 3988 4210.13 3426.44 4847.72 -15 140 3987 4492.7 4045.1 6543.63 -16 150 3986 -2404.27 -3991.5 148.547 -17 160 3985 -818.17 -5827.33 667.718 -18 170 3984 10046.4 -5908.93 -3896.25 -19 180 3983 10543.6 -7616.15 -3582.46 -20 190 3982 9132.86 -3121.75 -2370.51 -21 200 3981 3080.82 4814.3 -1042.52 -22 210 3980 4455.22 2734.21 983.323 -23 220 3979 5064.58 -514.844 6215.31 -24 230 3978 8882.63 -5742.39 4854.89 -25 240 3977 1530.61 -5432.19 1820.66 -26 250 3976 -3388.4 -4035.22 -1929.02 -27 260 3975 -4453.57 -5676.36 -3103.91 -28 270 3974 -2242.19 1373.06 438.251 -29 280 3973 540.987 8459.03 14603.9 -30 290 3972 445.006 7619.2 17023.6 -31 300 3971 -1214.83 706.67 16987.2 -32 310 3970 -1951.98 -2145.44 18635.1 -33 320 3969 -5472.37 -146.827 19815.8 -34 330 3968 -7923.32 -6504.63 21597.4 -35 340 3967 -6386.35 -3663.18 25642.7 -36 350 3966 112.379 -3278.08 26750.1 -37 360 3965 2200.55 -6942.66 21902 -38 370 3964 802.708 -9140.84 13589.5 -39 380 3963 -580.841 -14783.7 6127.63 -40 390 3962 -2125.97 -11534.1 1609.77 -41 400 3961 816.459 -4701.28 -1342.45 -42 410 3960 1699.16 345.19 4636.75 -43 420 3959 1269.88 5282.33 17986.1 -44 430 3958 68.5025 10141.7 14961.2 -45 440 3957 5935.49 5505.14 10277.4 -46 450 3956 6820.67 9960.17 4965.35 -47 460 3955 6940.42 19327.1 3621.13 -48 470 3954 9762.77 22473.4 -2270.79 -49 480 3953 7112.94 17915.4 -6818.59 -50 490 3952 1884.25 8616.13 -10527.6 -51 500 3951 7446.5 1879.68 -6658.07 -52 510 3950 11729.1 608.574 -7300.99 -53 520 3949 20208.5 5078.56 -10447.1 -54 530 3948 13056.6 14653.9 -9554.98 -55 540 3947 5009.01 14557.9 -2374.68 -56 550 3946 -2255.3 7875.59 2917.81 -57 560 3945 -9444.88 9858.64 1075.03 -58 570 3944 -5378.69 13849.8 -1097.27 -59 580 3943 -5275.22 12545 3718.02 -60 590 3942 -7587.93 7203.24 4157.79 -61 600 3941 -12821 -2360.64 106.466 -62 610 3940 -9783.14 -6286.84 4291.25 -63 620 3939 -6878.55 -3384.28 14663.3 -64 630 3938 -6730.08 -990.36 21185.5 -65 640 3937 -4494.29 -2198.51 15624.8 -66 650 3936 -1129.35 -4196.42 17163.6 -67 660 3935 -8143.44 -4081.95 18885.4 -68 670 3934 -12971.3 -158.308 10969.6 -69 680 3933 -7572.21 -41.0391 8424.26 -70 690 3932 -598.894 -6726.13 8734.5 -71 700 3931 5268.7 -8008.92 8954.89 -72 710 3930 4775.68 -4413.28 11427.1 -73 720 3929 2218.52 -3262.29 13151.4 -74 730 3928 8836.96 -4234.03 11972.7 -75 740 3927 15296.8 1218.97 1162.24 -76 750 3926 18523.3 -139.94 2325.29 -77 760 3925 18218.5 -3433.44 4034.52 -78 770 3924 12715.9 2009.77 3098.02 -79 780 3923 14040.9 6840.99 6527.72 -80 790 3922 4937.89 6393.34 -690.489 -81 800 3921 5045.39 3200.43 -6176.36 -82 810 3920 4406.2 953.099 -11083.9 -83 820 3919 -1778.29 720.845 -9682.43 -84 830 3918 2965.4 1990.01 -6662.23 -85 840 3917 4603.32 8350.68 -5807.26 -86 850 3916 1634.71 12083 -57.3565 -87 860 3915 -2618.02 3493.03 3984.59 -88 870 3914 -4443.4 -3869.75 706.727 -89 880 3913 502.958 122.037 -4873.86 -90 890 3912 1480.09 -1335.05 71.1003 -91 900 3911 -3479.11 -9239.29 7355.82 -92 910 3910 -2696.08 -5733.86 4641.42 -93 920 3909 -4844.06 246.252 4409.93 -94 930 3908 -5798.58 11346.7 4083.18 -95 940 3907 -8897.07 14372.7 2449.52 -96 950 3906 -7583.88 7774.13 3716.18 -97 960 3905 -2437.29 -1096.64 3561.55 -98 970 3904 -1470.48 -2453.12 7193.94 -99 980 3903 -3935.1 8551.16 3582.64 -100 990 3902 -3822.41 11467.2 -1441.3 -101 1000 3901 -4162.18 15313.1 2084.11 -102 1010 3900 2884.15 13080 5491.91 -103 1020 3899 7460.53 5225.41 4137.48 -104 1030 3898 8675.42 -2910.54 -5332.19 -105 1040 3897 14720.7 -8877.54 -5684.68 -106 1050 3896 22516.4 -6207.59 -3625.92 -107 1060 3895 18901.5 -4195.3 188.416 -108 1070 3894 12185.6 -10298.3 3454.11 -109 1080 3893 7494.45 -6101.99 12244.7 -110 1090 3892 11059.8 -2865.23 11364.6 -111 1100 3891 13220.5 -5169.62 3415.73 -112 1110 3890 13660.1 -5393.51 -6385.38 -113 1120 3889 10943.2 -1110.34 -8714.1 -114 1130 3888 3585.88 2756.43 -6753.81 -115 1140 3887 4181.93 -1774.9 -5518.58 -116 1150 3886 7055.73 -739.233 -3987.5 -117 1160 3885 5893.17 511.658 -814.467 -118 1170 3884 3417.65 803.503 5849.96 -119 1180 3883 -5038.98 949.066 6319.24 -120 1190 3882 -917.499 2248.87 990.39 -121 1200 3881 4745.29 5065.43 -890.331 -122 1210 3880 1253.52 8445.49 1016.04 -123 1220 3879 -2802.47 3804.08 2032.38 -124 1230 3878 613.02 2550.12 1019.6 -125 1240 3877 2367.1 220.842 1263.06 -126 1250 3876 8326.14 3877.62 -5490.42 -127 1260 3875 17200.9 5243.15 -9494.26 -128 1270 3874 14757.2 4884.84 -10750.6 -129 1280 3873 12309.4 6960.36 -10845.4 -130 1290 3872 1644.78 -4808.33 -5829.05 -131 1300 3871 -2867.2 -6349.06 -887.797 -132 1310 3870 -7005.99 -7274.02 -8865.96 -133 1320 3869 -2532.83 -7923.04 -10129 -134 1330 3868 2306.87 -3722.78 -6123.45 -135 1340 3867 1889.55 6571.91 2131.22 -136 1350 3866 -2747.18 13888.9 3226.96 -137 1360 3865 -8917.51 8472.13 -2.84534 -138 1370 3864 -12331.4 6266.21 -7685.05 -139 1380 3863 -8156.09 7080.33 -7198.36 -140 1390 3862 -10111.2 9953.69 -2158.49 -141 1400 3861 -8123.88 6681.85 4495.22 -142 1410 3860 -4809.77 9686.08 3782.59 -143 1420 3859 3883.2 9601.62 1391.32 -144 1430 3858 9018.69 6016.94 807.226 -145 1440 3857 2851.9 6916.5 -3079.2 -146 1450 3856 453.455 6486.91 -11235.1 -147 1460 3855 -49.7167 -2578.22 -15227.5 -148 1470 3854 160.618 -3263.7 -12807.1 -149 1480 3853 1991.04 -6243.04 -10047.1 -150 1490 3852 5849.18 2339.77 -12344.7 -151 1500 3851 -228.481 -1519.27 -8158.17 -152 1510 3850 -7309.82 -3297.19 -7140.5 -153 1520 3849 -5504.95 970.156 1192.22 -154 1530 3848 966.613 1902.8 8530.5 -155 1540 3847 8219.17 -954.264 11209.3 -156 1550 3846 4192.3 -20.1064 11640.5 -157 1560 3845 1137.32 -12759.1 9370.9 -158 1570 3844 4569.44 -18384.2 5761.98 -159 1580 3843 4233.37 -22634.4 7375.04 -160 1590 3842 3807.7 -21812.6 3638.88 -161 1600 3841 -432.943 -20632.1 3490.98 -162 1610 3840 -3766.56 -22007.2 -1271.35 -163 1620 3839 -1881.67 -16333.6 -1380.23 -164 1630 3838 6525.53 -13455.9 3480.72 -165 1640 3837 3960.59 -18592.8 4050.19 -166 1650 3836 -5075.41 -19195.7 2614.07 -167 1660 3835 -9589.55 -10748.6 3153.94 -168 1670 3834 -10059.7 -9534.67 8322.6 -169 1680 3833 -6225.7 -900.138 13590.4 -170 1690 3832 -3411.55 3909.88 11046.7 -171 1700 3831 -2851.21 2600.15 12098.1 -172 1710 3830 -6924.16 4221.95 11712.2 -173 1720 3829 -2997.46 7476.78 4437.78 -174 1730 3828 269.391 6468.67 1062.94 -175 1740 3827 6410.52 5784.28 1674.12 -176 1750 3826 2260.89 3190.12 2041.18 -177 1760 3825 -1485.83 10264 779.865 -178 1770 3824 3651.53 11649.3 -2576.98 -179 1780 3823 11952.7 10276.9 347.433 -180 1790 3822 7836.82 8197.6 3315.04 -181 1800 3821 6051.67 4320.11 -8.87572 -182 1810 3820 8410.12 6810.54 -3196.42 -183 1820 3819 10085.8 6149.34 -4829.19 -184 1830 3818 1832.43 1915.91 -2573.3 -185 1840 3817 -3140.41 -2561.33 -5886.21 -186 1850 3816 -4091.48 -4990.55 -3087.62 -187 1860 3815 539.358 -9472.4 -2424.02 -188 1870 3814 6172.67 -10318 -2828.3 -189 1880 3813 5680.41 -12976.8 -10310.1 -190 1890 3812 673.629 -8364.17 -9816.35 -191 1900 3811 -5270.52 -8904.17 -5780.5 -192 1910 3810 -5901.56 -27.2461 -3156.34 -193 1920 3809 718.01 7414.23 199.747 -194 1930 3808 -3274.74 12677.3 4878.24 -195 1940 3807 1819.64 20755.2 7388.35 -196 1950 3806 12318.4 22160.9 2439.38 -197 1960 3805 10747.8 12735.1 -2505.6 -198 1970 3804 8746.2 3229.1 -3838.18 -199 1980 3803 4862.7 9732.95 -851.776 -200 1990 3802 5533.39 4977.86 -1751.38 -42000 200 -1 0 4201 386498 362178 397047 -2 10 4200 225917 205649 241427 -3 20 4199 118897 109548 128800 -4 30 4198 79879.2 73029.6 85717.5 -5 40 4197 63332.9 55591.3 65443.7 -6 50 4196 48059.3 35039.5 51864.9 -7 60 4195 29013.1 22445.1 39956.8 -8 70 4194 14080.6 21316.4 34519.1 -9 80 4193 12539.6 13596.7 23200.5 -10 90 4192 2962.01 6610.65 15212.3 -11 100 4191 -2356.6 8874.61 12373 -12 110 4190 113.221 6382.75 7287.67 -13 120 4189 1038.88 -3823.37 5912.1 -14 130 4188 8732.06 1875.11 5572.88 -15 140 4187 9963.4 2335.12 6714.6 -16 150 4186 2989.02 -5726.73 971.968 -17 160 4185 4821.79 -9063.38 2344.05 -18 170 4184 15238 -9291.6 -2601.64 -19 180 4183 13864 -11265.1 -2925.37 -20 190 4182 11184.8 -6705.74 -2528.47 -21 200 4181 4740.09 2067.55 -2172.09 -22 210 4180 4444.92 2242.29 -754.806 -23 220 4179 5861.94 -532.692 3987.11 -24 230 4178 9925.32 -6588.94 3428.51 -25 240 4177 2262.08 -5771.38 799.82 -26 250 4176 -1644.72 -3018.22 -2152.3 -27 260 4175 -2306.1 -3488.7 -3050.77 -28 270 4174 100.982 4042.31 384.57 -29 280 4173 2162.55 11032.8 13801.2 -30 290 4172 1811.86 8840.45 14875.3 -31 300 4171 918.19 573.934 15412.5 -32 310 4170 178.716 -3136.2 16608.8 -33 320 4169 -3620.53 -1419.8 17001.8 -34 330 4168 -4733.14 -6468.24 17915.7 -35 340 4167 -3907.06 -3262.15 20923.9 -36 350 4166 1054.58 -2444.09 22377.7 -37 360 4165 3246.67 -6414.16 17655.6 -38 370 4164 1094.77 -8802.24 9858.95 -39 380 4163 -498.727 -14840.2 3564.68 -40 390 4162 -1858.27 -11045.9 -461.582 -41 400 4161 -147.3 -3571.95 -2576.22 -42 410 4160 -438.677 -310.124 4285.58 -43 420 4159 -766.481 3687.13 18679.9 -44 430 4158 -2491.04 6775.61 15474.3 -45 440 4157 3318.84 2688.26 10843.9 -46 450 4156 3728.73 5782.45 4533.21 -47 460 4155 4673.23 15160.3 2719.27 -48 470 4154 8152.57 17790.6 -2746.97 -49 480 4153 6489.05 14551 -7990.12 -50 490 4152 2892.5 6148.51 -11705.2 -51 500 4151 8416.27 233.992 -7143.77 -52 510 4150 11843 -479.21 -6958.95 -53 520 4149 18728.2 3852.04 -8816.69 -54 530 4148 11309.9 12919.3 -6680.65 -55 540 4147 2804.81 12572.1 834.09 -56 550 4146 -4867.45 6553.04 5722.69 -57 560 4145 -10164 7750.36 2845.26 -58 570 4144 -6297.25 11123.6 97.3854 -59 580 4143 -6537.12 10441.1 4341.88 -60 590 4142 -9019.33 7223.69 4541.07 -61 600 4141 -14506.7 -2028.42 1023.01 -62 610 4140 -10908.4 -5095.81 6347.82 -63 620 4139 -7190.73 -1972.44 17213.4 -64 630 4138 -6898.57 43.4841 24054.4 -65 640 4137 -4636.28 -1505.22 17590.3 -66 650 4136 -2028.67 -1951.41 17910.2 -67 660 4135 -9105.38 -1793.02 18614.1 -68 670 4134 -13841.6 -158.572 11298.3 -69 680 4133 -9117.2 -1644.21 9887.11 -70 690 4132 -3209.06 -8889.94 10163.7 -71 700 4131 2057.44 -9236.03 10476.4 -72 710 4130 1407.59 -5004.22 11696.4 -73 720 4129 -1242.83 -2983.82 12971.3 -74 730 4128 5541 -4734.69 11776 -75 740 4127 12119 -648.577 658.444 -76 750 4126 15094.8 -2223.71 1542.94 -77 760 4125 14888 -4519.02 3109.5 -78 770 4124 9166.37 1220.08 3114.21 -79 780 4123 10188.6 4343.07 7630.94 -80 790 4122 1855.06 3779.35 1291.18 -81 800 4121 1769.28 1747.76 -3538.94 -82 810 4120 1424.26 -313.897 -9729.32 -83 820 4119 -4469.5 -795.185 -9630.69 -84 830 4118 90.7128 446.799 -7715.48 -85 840 4117 2003.51 6693.55 -6467.39 -86 850 4116 -2089.08 9177.99 -495.97 -87 860 4115 -6544.97 1421.94 3673.93 -88 870 4114 -7083.06 -5171.98 814.294 -89 880 4113 -1033.12 -768.435 -4598.43 -90 890 4112 520.841 -2981.04 -896.473 -91 900 4111 -4725.44 -10291.8 5206.22 -92 910 4110 -3698.05 -6847.01 3486.74 -93 920 4109 -5638.35 -1035.31 3297.76 -94 930 4108 -5285.93 10215.5 3365.94 -95 940 4107 -6752.95 14395.6 2733.55 -96 950 4106 -5619.2 7752.77 4750.36 -97 960 4105 -713.556 -1476.77 5686.82 -98 970 4104 -318.393 -2658.85 9599.44 -99 980 4103 -3057.17 7727.28 5604.81 -100 990 4102 -3763.61 10090.9 -1211.81 -101 1000 4101 -5037.93 13641.2 349.934 -102 1010 4100 1901.45 12834 3115.16 -103 1020 4099 5753.52 6417.86 1710.31 -104 1030 4098 6978.46 -1375.07 -5944.27 -105 1040 4097 13605.4 -7847.29 -5467.35 -106 1050 4096 21971.2 -4441.27 -2975.7 -107 1060 4095 21033 -3559.45 620.578 -108 1070 4094 14798.6 -10459.4 5483.86 -109 1080 4093 9845.7 -6918.19 16327.1 -110 1090 4092 13370.1 -3568.73 16195.3 -111 1100 4091 15668.1 -6219.13 7290.36 -112 1110 4090 16266.2 -6946.05 -4375.95 -113 1120 4089 12490.5 -3447.01 -8321.08 -114 1130 4088 4742.43 -1371.93 -8404.43 -115 1140 4087 4592.52 -4586.87 -7243.2 -116 1150 4086 6213.76 -1826.1 -4651.74 -117 1160 4085 5173.37 84.1747 -898.211 -118 1170 4084 2455.26 457.179 6644.93 -119 1180 4083 -5100.58 -236.466 8668.73 -120 1190 4082 -322.247 213.074 4647.44 -121 1200 4081 6007.89 3878.12 2090.31 -122 1210 4080 4807.95 8563.26 3806.95 -123 1220 4079 570.083 4203.63 4682.14 -124 1230 4078 4174.18 3076.55 3178.56 -125 1240 4077 7093.73 938.111 3045.2 -126 1250 4076 12727.2 3974.09 -4041.81 -127 1260 4075 20889.7 5346.34 -8236.15 -128 1270 4074 18041.3 5436.81 -10543.1 -129 1280 4073 14644.5 8823.1 -11637.9 -130 1290 4072 3478.71 -1769.04 -6386.53 -131 1300 4071 -1379.99 -4035.57 -2316.32 -132 1310 4070 -4389.43 -5662.92 -10128.6 -133 1320 4069 -674.495 -6535.06 -10360.6 -134 1330 4068 3685.99 -2610.35 -4657.41 -135 1340 4067 2896.75 7679.55 3391.19 -136 1350 4066 -783.168 14947.4 3344.4 -137 1360 4065 -7031.14 9386.24 -1331.91 -138 1370 4064 -10517.1 6780.3 -9199 -139 1380 4063 -6159.82 7453.94 -8178.21 -140 1390 4062 -7754.27 9648.42 -3295.34 -141 1400 4061 -6157.04 6101.54 3790.29 -142 1410 4060 -2810.52 9005.24 3324.79 -143 1420 4059 5142.2 10636.4 -77.4744 -144 1430 4058 9575.63 7628.39 -1748.34 -145 1440 4057 4436.86 8430.93 -6568.2 -146 1450 4056 3364.29 8236.84 -12884.1 -147 1460 4055 1684.69 -365.539 -14589.1 -148 1470 4054 669.13 -890.445 -11882.8 -149 1480 4053 616.887 -4050.35 -10043.7 -150 1490 4052 3633.95 3775.4 -11915.6 -151 1500 4051 -2907.4 -478.608 -8053.46 -152 1510 4050 -10497.2 -2656.54 -7211.5 -153 1520 4049 -8844.48 -214.05 -193.824 -154 1530 4048 -4247.16 650.207 5781.31 -155 1540 4047 2851.62 -749.858 7410.25 -156 1550 4046 675.361 164.971 6815.17 -157 1560 4045 -1224.19 -10303 6119.57 -158 1570 4044 4362.74 -15274 4035.44 -159 1580 4043 5489.93 -20170.4 6191 -160 1590 4042 4771.47 -19772.3 3235.45 -161 1600 4041 -609.229 -18084.2 3352.34 -162 1610 4040 -5143.78 -18304.6 -636.544 -163 1620 4039 -3073.64 -13606.2 -386.837 -164 1630 4038 4144.39 -11123.2 3969.01 -165 1640 4037 -187.845 -14836.8 5082.01 -166 1650 4036 -10371.3 -15941.6 4234.62 -167 1660 4035 -15356.1 -9524.48 5765.72 -168 1670 4034 -15917.2 -8405.47 9042.9 -169 1680 4033 -10524.6 1982.53 13178.6 -170 1690 4032 -6396.1 6639.72 9687.5 -171 1700 4031 -5138.19 4267.91 10679.5 -172 1710 4030 -7320.96 5989.71 12102.2 -173 1720 4029 -1063.93 7583.34 5761.02 -174 1730 4028 2710.32 6082.44 2271.34 -175 1740 4027 9022.03 5527.25 1512.61 -176 1750 4026 5456.72 4501.13 1344.64 -177 1760 4025 -414.264 11255.1 1536.67 -178 1770 4024 3896.01 12331.1 -1478.57 -179 1780 4023 10664.7 10948.5 1165.09 -180 1790 4022 5546.5 8259.24 4542.3 -181 1800 4021 3445.17 4365.34 2247.69 -182 1810 4020 4789.38 7335.72 1035.26 -183 1820 4019 6622.95 7402.6 645.131 -184 1830 4018 -1087.42 2797.29 1298.81 -185 1840 4017 -6566.05 -1613.55 -3566.37 -186 1850 4016 -7648.55 -4101.15 -3441.34 -187 1860 4015 -4942.27 -8570.75 -4129.12 -188 1870 4014 530.442 -10153.2 -3632.82 -189 1880 4013 1979.95 -12031.1 -8637.17 -190 1890 4012 -2124.98 -7765.24 -6577.57 -191 1900 4011 -9824.07 -8697.21 -3469.4 -192 1910 4010 -10689.4 -19.4119 -1077.38 -193 1920 4009 -4201.65 7137.64 2166.04 -194 1930 4008 -8053.78 12680.7 5280.66 -195 1940 4007 -2893.34 19829.4 6865.49 -196 1950 4006 7124.38 20846 2555.84 -197 1960 4005 4867.81 11853 -2695.15 -198 1970 4004 2828.33 3869.3 -5218.2 -199 1980 4003 -1342.61 9603.26 -2980.97 -200 1990 4002 -347.428 5377.23 -3157.71 -44000 200 -1 0 4401 388686 363730 396505 -2 10 4400 228395 207041 240953 -3 20 4399 121370 108365 127795 -4 30 4398 81621.1 71176.8 84880.3 -5 40 4397 64318.8 54028 65382.3 -6 50 4396 48545.5 34245.6 52816.6 -7 60 4395 28515.9 22924.9 40530 -8 70 4394 12051.8 21168.8 34081.9 -9 80 4393 10489 14315.6 24211 -10 90 4392 2447.92 9107.26 16010.9 -11 100 4391 -1053.77 10999.8 13258.1 -12 110 4390 1925.54 7450.82 8668.31 -13 120 4389 2860.79 -3855.56 7693.7 -14 130 4388 10500.6 706.642 7099.17 -15 140 4387 13325.1 653.484 8824.52 -16 150 4386 8599.79 -7780.82 3755.07 -17 160 4385 8847.82 -10936.6 4731.14 -18 170 4384 18706.8 -11023.6 -1193.68 -19 180 4383 17491.3 -11872.5 -2605.69 -20 190 4382 14356.9 -6391.55 -2288.51 -21 200 4381 6651.13 1971.63 -1206.55 -22 210 4380 5404.3 828.089 -205.627 -23 220 4379 5800.03 -3064.41 3609.73 -24 230 4378 8612.39 -7688.47 2968.42 -25 240 4377 1437.65 -6384.7 899.474 -26 250 4376 -1373.49 -3135.43 -1752.87 -27 260 4375 -3060.14 -2711.6 -1832.76 -28 270 4374 -957.195 4586.42 2079.08 -29 280 4373 2046.95 12306.1 15428.5 -30 290 4372 2948.34 11712.1 17008.5 -31 300 4371 3473.58 4273.84 15683 -32 310 4370 2327.05 -177.209 15991.7 -33 320 4369 -715.591 1431.77 15527.1 -34 330 4368 -1412.28 -4311.33 14373.3 -35 340 4367 -1842.1 -1026.21 17351.7 -36 350 4366 3469.94 438.605 19489.5 -37 360 4365 6684.08 -4365.75 15134.2 -38 370 4364 4357.97 -7629.45 8437.4 -39 380 4363 2581.2 -12891.4 2516.19 -40 390 4362 2118.1 -8493.43 -1002.42 -41 400 4361 3781.74 -2289.5 -2869.63 -42 410 4360 2555.96 216.778 3197.05 -43 420 4359 1682.75 3070.51 16241.7 -44 430 4358 104.854 5235.74 14107.4 -45 440 4357 6419.73 1482.55 9466.16 -46 450 4356 6470.05 3931.31 3176.2 -47 460 4355 7768.97 13258.3 185.228 -48 470 4354 11980.2 16754.1 -5184.51 -49 480 4353 9654.3 13954.1 -9571.1 -50 490 4352 5131.16 6855.66 -13862.8 -51 500 4351 9513.73 1884.75 -10143.4 -52 510 4350 12180.4 586.666 -10186 -53 520 4349 18879.8 4812.47 -11464 -54 530 4348 10681.9 14025.8 -9081.23 -55 540 4347 2151.31 13380 -2256.97 -56 550 4346 -6921.43 7105.56 3104.67 -57 560 4345 -12136.1 7342.56 1456.83 -58 570 4344 -6986.23 11967.9 -434.978 -59 580 4343 -4863.36 14175.4 3552.95 -60 590 4342 -6409.49 10417.5 2720.33 -61 600 4341 -13353.9 502.842 -3498.63 -62 610 4340 -8567.27 -2857.11 419.964 -63 620 4339 -3861.8 -196.051 10199.3 -64 630 4338 -4298.21 995.284 18014 -65 640 4337 -3729.31 78.6727 14080.9 -66 650 4336 -2466.78 -88.0308 14610.3 -67 660 4335 -9585.26 -79.1444 15412.1 -68 670 4334 -13939.9 1940.85 8736.62 -69 680 4333 -9924.17 401.726 6819.77 -70 690 4332 -3598.5 -7448.53 8228.1 -71 700 4331 -350.652 -7840.74 9291.94 -72 710 4330 -663.402 -4263.88 9965.56 -73 720 4329 -1686.46 -3623.18 10757.7 -74 730 4328 6714.38 -6922.22 9882.51 -75 740 4327 13440.4 -3739.43 -2414 -76 750 4326 15752.3 -6205.6 -1667.21 -77 760 4325 18257.9 -8285.34 -1127.74 -78 770 4324 15219.8 -2047.98 -1736.74 -79 780 4323 16147.3 1763.51 2910.54 -80 790 4322 7804.83 2213.6 -1259.53 -81 800 4321 6868.03 831.527 -5569.07 -82 810 4320 4905.54 -724.547 -11628.1 -83 820 4319 -656.451 -1445.45 -11871.2 -84 830 4318 3366.17 -825.648 -8712.56 -85 840 4317 4012.62 3967.57 -6227.08 -86 850 4316 -2299.44 6368.79 -607.998 -87 860 4315 -6205.41 439.444 2455.26 -88 870 4314 -7543.77 -4405.51 385.199 -89 880 4313 -823.043 524.63 -5625.91 -90 890 4312 2257.49 -2150.02 -2843.11 -91 900 4311 -1922.33 -9150.06 3621.4 -92 910 4310 -493.611 -5631.19 2314.42 -93 920 4309 -2350.52 1071.13 1880.47 -94 930 4308 -2603.9 13364.4 3016.99 -95 940 4307 -3746.98 17365.3 3281.48 -96 950 4306 -3322.1 9999.06 6181.41 -97 960 4305 1090.78 2685.12 6181.32 -98 970 4304 669.595 3127.74 8970.74 -99 980 4303 -1977.68 10842.5 6809.56 -100 990 4302 -3812.79 11074.1 2132.08 -101 1000 4301 -6864.39 13662.2 3646.16 -102 1010 4300 -147.577 11588.2 5371.99 -103 1020 4299 3232.32 5834.81 2762.76 -104 1030 4298 4186.86 -586.612 -5182.27 -105 1040 4297 10713.7 -6121.14 -4862.09 -106 1050 4296 19457.1 -2918.46 -3347.23 -107 1060 4295 18912.5 -2236.81 -455.617 -108 1070 4294 12537.3 -10742.8 5213.48 -109 1080 4293 8865.72 -9357.69 16942.2 -110 1090 4292 13366.8 -7173.25 18157.8 -111 1100 4291 16387.9 -9202.31 10707.4 -112 1110 4290 16490.7 -8947.66 -1406.09 -113 1120 4289 12630.5 -5506.17 -6205.45 -114 1130 4288 5047.11 -4623.72 -6977.04 -115 1140 4287 5072.63 -7951.76 -5455.58 -116 1150 4286 6906.22 -3679.02 -2637.06 -117 1160 4285 6043.23 -165.004 -236.817 -118 1170 4284 2499.64 1156.64 6012.95 -119 1180 4283 -5549.22 -530.559 8406.19 -120 1190 4282 -596.463 -1931.88 3704.66 -121 1200 4281 7482.19 1841.99 1623.1 -122 1210 4280 6706.38 7945.48 3356.09 -123 1220 4279 1911.02 4423.17 5629.56 -124 1230 4278 5054.12 3777.8 5952.95 -125 1240 4277 7342.06 1253.62 5902.08 -126 1250 4276 13341.9 4042.93 -1039.97 -127 1260 4275 22829.8 6212.25 -5135.79 -128 1270 4274 20796.6 6807.37 -7868.49 -129 1280 4273 17852.7 9892.57 -8508.71 -130 1290 4272 7088.36 -639.322 -4692.79 -131 1300 4271 2238.44 -1801.28 -1760.1 -132 1310 4270 -613.586 -1883.23 -9513.5 -133 1320 4269 1305.26 -2826.09 -9648.59 -134 1330 4268 2391.37 -1615.64 -3959.59 -135 1340 4267 1018.9 6786.53 4738.93 -136 1350 4266 -1923.08 14187.4 4788.33 -137 1360 4265 -7305.26 9840.77 831.272 -138 1370 4264 -11110.6 7462.91 -6395.35 -139 1380 4263 -6928.73 7570.67 -3726.63 -140 1390 4262 -7978.77 7890.28 2004.25 -141 1400 4261 -5715.97 3870.77 7366.43 -142 1410 4260 -1851.3 6379.76 4372 -143 1420 4259 5771.16 7179.34 507.416 -144 1430 4258 9284.78 4572.25 -747.689 -145 1440 4257 3954.53 6366.28 -5420.11 -146 1450 4256 4585.66 7303.26 -11622.5 -147 1460 4255 2888.68 679.64 -13004.2 -148 1470 4254 1181.68 416.149 -10348 -149 1480 4253 -702.234 -4884.29 -8657.7 -150 1490 4252 2079 1891.09 -10204.3 -151 1500 4251 -3106.61 -1138.31 -5845.19 -152 1510 4250 -9953.73 -1838.94 -5242.22 -153 1520 4249 -8815.6 166.67 1540.84 -154 1530 4248 -4412.84 683.537 7088.89 -155 1540 4247 1411.28 -220.845 8088.9 -156 1550 4246 951.403 2324.73 6859.66 -157 1560 4245 1425.38 -6362.42 6461.37 -158 1570 4244 6276.92 -10010.2 4938.52 -159 1580 4243 6411.92 -14670.3 5325.1 -160 1590 4242 6256.93 -16277.5 597.071 -161 1600 4241 1547.96 -16347 1002.05 -162 1610 4240 -2644.33 -18034.9 -2181.87 -163 1620 4239 -844.926 -13277.2 371.43 -164 1630 4238 4810.76 -9992.1 5836.5 -165 1640 4237 -313.386 -12056 5967.63 -166 1650 4236 -10462.7 -13808.3 4389.7 -167 1660 4235 -15431.4 -8869.17 5310.07 -168 1670 4234 -14916.3 -8508.81 6935.67 -169 1680 4233 -9846.86 786.024 10227.9 -170 1690 4232 -6200.82 3747.35 5076.83 -171 1700 4231 -3616.16 982.133 5005.12 -172 1710 4230 -5651.61 3051.07 7314.91 -173 1720 4229 1257.63 4492.97 2234.69 -174 1730 4228 4892.86 3723.83 103.497 -175 1740 4227 9324.31 3984.88 -658.679 -176 1750 4226 6373.74 4394.98 -1552.39 -177 1760 4225 -152.14 11057.5 -1438.36 -178 1770 4224 2781.64 11225.6 -3719.63 -179 1780 4223 9080.76 8194.28 565.554 -180 1790 4222 3209.27 4707.31 4272.8 -181 1800 4221 824.364 468.916 2518.58 -182 1810 4220 1575.89 5450.52 954.594 -183 1820 4219 2482.1 7017.06 37.7741 -184 1830 4218 -4601.16 2900.56 320.046 -185 1840 4217 -9280.19 -379.131 -5144.13 -186 1850 4216 -8490.73 -1162.67 -6347.12 -187 1860 4215 -5874.16 -4840.01 -8321.28 -188 1870 4214 -807.553 -5666.22 -7215.87 -189 1880 4213 1558.99 -7923.38 -9438.23 -190 1890 4212 -1327.78 -4603.79 -6786.02 -191 1900 4211 -8498.44 -6004.2 -3535.59 -192 1910 4210 -10700.1 2250.96 -1062.45 -193 1920 4209 -4668.55 9596.51 1696.77 -194 1930 4208 -8464.81 15608.8 4583.05 -195 1940 4207 -3768.27 21855.8 6004.56 -196 1950 4206 5697.3 22678.2 2394.51 -197 1960 4205 2206.61 15202.9 -2238.65 -198 1970 4204 184.132 7945.78 -5041.58 -199 1980 4203 -2584.66 13241.7 -3729.17 -200 1990 4202 -835.864 8526.77 -4791.82 -46000 200 -1 0 4601 389720 367471 396006 -2 10 4600 228263 210376 240135 -3 20 4599 120351 110634 128054 -4 30 4598 79322.8 71817.3 84346.6 -5 40 4597 61284.5 53732.6 63573.4 -6 50 4596 44972.2 33929.7 51431.5 -7 60 4595 28007 22510.3 40093.7 -8 70 4594 13686.9 20964.4 33077.6 -9 80 4593 12910.6 14934.4 24304.8 -10 90 4592 5584.15 9901.73 17073.4 -11 100 4591 2277.09 11583 14783 -12 110 4590 1759.33 7510.93 11166.7 -13 120 4589 1794.41 -4289.78 10079.5 -14 130 4588 11839.4 358.704 9917.88 -15 140 4587 15074.2 1037.89 10694.5 -16 150 4586 10418.4 -6208.92 5951.14 -17 160 4585 10227.5 -10095.9 5891.74 -18 170 4584 19306.6 -10985.2 -470.897 -19 180 4583 16990.6 -12469.6 -2823.82 -20 190 4582 15237.9 -7078.27 -2596.05 -21 200 4581 8836.12 249.043 -2145.77 -22 210 4580 7368.41 -1075.72 -1453.38 -23 220 4579 6982.21 -5418.11 2531.81 -24 230 4578 10189.9 -10352.6 3986 -25 240 4577 1936.26 -9176.2 3314.09 -26 250 4576 -1894.18 -5884.47 1140.41 -27 260 4575 -2609.47 -4561.99 1621.54 -28 270 4574 699.304 1429.01 4116.84 -29 280 4573 3335.3 9696.65 15013.1 -30 290 4572 3314.1 10038.9 15888.8 -31 300 4571 4479.46 2486.61 13710.4 -32 310 4570 1710.6 -1693.77 12811.1 -33 320 4569 -1839.86 140.631 12116.4 -34 330 4568 -1746.64 -3667.43 10238.7 -35 340 4567 -1469.63 258.276 12964.6 -36 350 4566 3762.59 988.004 16955.3 -37 360 4565 7886.12 -2857.15 14347.1 -38 370 4564 5196.23 -4454.75 8626.9 -39 380 4563 2856.67 -8103.47 3976.69 -40 390 4562 98.846 -2917.84 256.049 -41 400 4561 2424.41 2650.02 -2118.22 -42 410 4560 2325.76 2613.71 2889.39 -43 420 4559 3060.13 3376.74 14896.4 -44 430 4558 3360.14 4188.14 12335.4 -45 440 4557 9065.1 523.823 6165.48 -46 450 4556 8603.17 3546.62 -41.5509 -47 460 4555 9572.19 11542.7 -1939.74 -48 470 4554 11791.1 16541.5 -7565.87 -49 480 4553 8168.74 14854.8 -10464.6 -50 490 4552 3565.14 7465.73 -14059.7 -51 500 4551 7188.24 750.799 -9614.29 -52 510 4550 9963.88 -1441.5 -9536.89 -53 520 4549 15594.9 2619.45 -11429.6 -54 530 4548 7791 13388.6 -9331.43 -55 540 4547 502.557 12700.6 -3407.03 -56 550 4546 -7495.93 6911.61 2134.08 -57 560 4545 -12035 6600.12 953.019 -58 570 4544 -5889.33 9502.24 -2416.18 -59 580 4543 -4310.28 10069.3 712.955 -60 590 4542 -6219.4 7101.58 38.8621 -61 600 4541 -14895.3 -1608.15 -4476.99 -62 610 4540 -11523.1 -5822.05 358.128 -63 620 4539 -7733.72 -3614.96 10459.6 -64 630 4538 -7719.92 -1204.59 17046.7 -65 640 4537 -5212.46 -991.004 12686.7 -66 650 4536 -2652.7 -275.75 13546.6 -67 660 4535 -9065.39 1049.88 15384.8 -68 670 4534 -13636.6 2419.35 8251.57 -69 680 4533 -9639.39 2037.52 5599.19 -70 690 4532 -5010.57 -6120.76 7479.43 -71 700 4531 -2894.56 -5620.28 8793.85 -72 710 4530 -2476.49 -2095.86 10107.4 -73 720 4529 -2306.65 -2301.99 9870.91 -74 730 4528 5974.08 -4438.5 7521.81 -75 740 4527 13114.3 -1187.77 -3932.7 -76 750 4526 14521.8 -4931.18 -2233.18 -77 760 4525 15258.6 -6687.82 -2323.07 -78 770 4524 12246 159.813 -2563.87 -79 780 4523 14519.6 4323.99 2232.55 -80 790 4522 8087.54 5250.81 -1646.01 -81 800 4521 7359.3 2818.02 -5624.62 -82 810 4520 5491.83 1605.75 -11169.2 -83 820 4519 -200.605 888.975 -12131.3 -84 830 4518 2566.62 1016 -8462.55 -85 840 4517 2301.01 4009.3 -5778.77 -86 850 4516 -5773.92 5808.36 558.338 -87 860 4515 -9329.33 -354.22 4922.78 -88 870 4514 -8541.48 -5137.47 2209.26 -89 880 4513 -57.2603 -1058.72 -3095.14 -90 890 4512 3964.73 -4622.83 -466.599 -91 900 4511 -392.792 -12768.3 4993.79 -92 910 4510 -986.47 -9827.19 3891.92 -93 920 4509 -2459.1 -1854.37 4205.78 -94 930 4508 -3111.82 11024.9 3665.89 -95 940 4507 -4921.77 16073.3 3823.26 -96 950 4506 -5106.35 8090.93 7145.52 -97 960 4505 -509.362 543.134 7941.87 -98 970 4504 -1125.76 608.087 10214.8 -99 980 4503 -4448.23 7796.16 9259.61 -100 990 4502 -6747.03 9057.97 4661.54 -101 1000 4501 -9270.74 13381.9 4769.56 -102 1010 4500 -2339.49 12362.7 6485.05 -103 1020 4499 3200.92 8412.21 2860.25 -104 1030 4498 4657.47 3452.99 -3949.47 -105 1040 4497 9690.32 -2579.41 -2918.43 -106 1050 4496 17724.1 -1642.86 -2123.19 -107 1060 4495 16748.7 -2072.94 1004.94 -108 1070 4494 10989.2 -9350.61 5489.48 -109 1080 4493 7727.03 -8000.63 15720.9 -110 1090 4492 12452.6 -5183.32 18488.5 -111 1100 4491 15153.7 -7441.86 11957.9 -112 1110 4490 15969.5 -6514.08 742.96 -113 1120 4489 12952.1 -2256.2 -3895.51 -114 1130 4488 4835.52 -1450.14 -7185.15 -115 1140 4487 4251.05 -6357.82 -6805.72 -116 1150 4486 7468.39 -2591.41 -4344.03 -117 1160 4485 6546.69 1707.03 -2689.46 -118 1170 4484 4126.02 3729.66 4890.63 -119 1180 4483 -3738.22 3925.33 8150.38 -120 1190 4482 27.5259 3865.02 3704.01 -121 1200 4481 7057.95 5956 2206.81 -122 1210 4480 6489.01 10391 4041.97 -123 1220 4479 3110.43 5119.01 6641.08 -124 1230 4478 5860.08 3223.39 6124.33 -125 1240 4477 8343.1 -1280.42 4635.91 -126 1250 4476 14068.1 175.724 -2954.63 -127 1260 4475 22185 2094.03 -6893.32 -128 1270 4474 18958.9 3058.5 -8735.57 -129 1280 4473 15501.7 6611.25 -9770.43 -130 1290 4472 5421.83 -3193.21 -7119.51 -131 1300 4471 1187.24 -3245.98 -4359.57 -132 1310 4470 -1674.18 -2420.53 -11899.7 -133 1320 4469 700.915 -1734.78 -13331.4 -134 1330 4468 2006.45 16.3724 -8405.85 -135 1340 4467 1132.51 7556.88 757.625 -136 1350 4466 -480.07 13579.5 2625.75 -137 1360 4465 -4955.01 9653.31 1168.68 -138 1370 4464 -8510.92 6819.23 -5340.37 -139 1380 4463 -5355.6 6209.93 -4726.51 -140 1390 4462 -8414.45 6712.71 -2241.79 -141 1400 4461 -7995.27 2112.04 1436.58 -142 1410 4460 -4964.29 6213.4 -1004.93 -143 1420 4459 1415.45 8570.05 -3285.67 -144 1430 4458 4027.12 5478.84 -4903.85 -145 1440 4457 -970.361 5428.35 -8073.85 -146 1450 4456 1932.21 5726.81 -13998.7 -147 1460 4455 351.241 -957.704 -13937 -148 1470 4454 -414.787 -276.517 -9759.76 -149 1480 4453 -984.187 -4270.49 -7483.48 -150 1490 4452 2537.87 2988.11 -9841.13 -151 1500 4451 -1843.45 850.449 -5769.22 -152 1510 4450 -6661.39 1266.15 -5856.63 -153 1520 4449 -6801.4 3642.93 -0.29683 -154 1530 4448 -4055.47 3420.38 4170.52 -155 1540 4447 1019.6 1789.63 4697.14 -156 1550 4446 1148.74 3435.03 3919.99 -157 1560 4445 1522.71 -4833.9 3714.46 -158 1570 4444 5680.72 -9327.02 2741.12 -159 1580 4443 5806.48 -14218.3 3701.01 -160 1590 4442 5492.32 -15085.5 -163.337 -161 1600 4441 2141.66 -13834.5 631.467 -162 1610 4440 -848.783 -16266.7 -2069.9 -163 1620 4439 288.458 -12574.4 -178.466 -164 1630 4438 4118.89 -11944.2 4221.72 -165 1640 4437 -478.869 -13906.2 3141.51 -166 1650 4436 -10033.8 -14381.2 2199.46 -167 1660 4435 -13695.6 -9824.31 2714.17 -168 1670 4434 -13305.1 -10200.6 3441.39 -169 1680 4433 -8318.36 -1104.03 5978.58 -170 1690 4432 -4490.65 2153.72 114.779 -171 1700 4431 -916.619 896.43 1506.36 -172 1710 4430 -3022.3 4221.01 4660.58 -173 1720 4429 932.405 6670.82 681.581 -174 1730 4428 2957.02 5903.08 770.125 -175 1740 4427 6195.92 5686.2 1335.49 -176 1750 4426 2859.54 4948.29 656.839 -177 1760 4425 -2475.65 9698.29 734.897 -178 1770 4424 1824.09 8190.3 -2581.37 -179 1780 4423 8104.09 3824.44 1153.94 -180 1790 4422 3061.68 -337.643 4879.66 -181 1800 4421 843.003 -3057.74 2830.18 -182 1810 4420 1805.54 3440.67 952.343 -183 1820 4419 1304.53 5237.32 -1294.95 -184 1830 4418 -4404.51 2317.26 -1706.9 -185 1840 4417 -8665.36 -326.672 -5585.96 -186 1850 4416 -7318.35 -684.52 -5859.65 -187 1860 4415 -5187.21 -4313.85 -7344.81 -188 1870 4414 -1103.24 -6285.66 -5328.39 -189 1880 4413 740.323 -8539.39 -6904.9 -190 1890 4412 -2504.55 -4468.37 -4104.66 -191 1900 4411 -10201.2 -5578.61 -468.353 -192 1910 4410 -12280.7 1359.66 641.567 -193 1920 4409 -5871.39 6719.14 3170.32 -194 1930 4408 -9111.53 11090.7 5718.38 -195 1940 4407 -2904.76 17473.2 7593.65 -196 1950 4406 6574.29 19184.1 3600.44 -197 1960 4405 4090.58 12925.7 -156.721 -198 1970 4404 2591.23 6750.01 -1692.32 -199 1980 4403 460.174 13208.5 -488.039 -200 1990 4402 2759.31 9852.25 -1547.49 -48000 200 -1 0 4801 390265 366466 391576 -2 10 4800 229225 209571 236363 -3 20 4799 121418 110528 124744 -4 30 4798 80576.2 72289.7 81149.1 -5 40 4797 62430 52985.4 59889.4 -6 50 4796 46087.8 33506.6 48880.4 -7 60 4795 28084.6 21099.7 38458.7 -8 70 4794 15144.1 18677.7 31924.9 -9 80 4793 14446.6 14193.2 23908.3 -10 90 4792 6146.58 9827.36 17202.5 -11 100 4791 1949.8 11338.5 15263.3 -12 110 4790 848.233 6766.21 11036.7 -13 120 4789 -75.2931 -5878.59 9504.67 -14 130 4788 7744.82 -878.165 9610.73 -15 140 4787 10134.2 -377.438 9942.18 -16 150 4786 6380.72 -8092.41 5972.2 -17 160 4785 7197.37 -11879.3 6406.53 -18 170 4784 16230.4 -13150.4 158.808 -19 180 4783 14689.6 -14196.2 -2353.87 -20 190 4782 13323.8 -8317.38 -2744.13 -21 200 4781 6777.2 -1191.56 -2568.43 -22 210 4780 6767.72 -555.865 -2273.55 -23 220 4779 7086.88 -3603.84 1977.87 -24 230 4778 10260.3 -7897.23 4201.03 -25 240 4777 1853.66 -5962.19 2496.21 -26 250 4776 -1589.35 -2295.37 -40.6752 -27 260 4775 -1198.3 -279.466 -551.559 -28 270 4774 1535.08 4913.31 2067.34 -29 280 4773 3515.08 11328.7 13817.5 -30 290 4772 3752.22 10549.7 14928.5 -31 300 4771 5517.9 2856.65 13292.1 -32 310 4770 3397.17 -1247.57 12224.2 -33 320 4769 344.176 803.409 10957.2 -34 330 4768 -26.1649 -3231.45 9972.35 -35 340 4767 -649.212 574.835 11839.9 -36 350 4766 3213.24 1969.87 14844.8 -37 360 4765 6267.09 -1746.78 13313.1 -38 370 4764 3809.62 -4864.83 9191.89 -39 380 4763 1939.76 -8490.7 5106.61 -40 390 4762 -114.666 -2477.59 1102.65 -41 400 4761 2445.17 2942.47 -1191.8 -42 410 4760 1994.75 1931.39 3106.68 -43 420 4759 2172.83 2705.12 13483.2 -44 430 4758 2429.63 5162.05 10849 -45 440 4757 7436.48 2091.98 5421.26 -46 450 4756 6075.94 4004.09 63.1458 -47 460 4755 7918.13 12192.7 -828.843 -48 470 4754 9963.24 17792.4 -5792.38 -49 480 4753 6822.84 17067.8 -8611.97 -50 490 4752 2659.31 10699.7 -12798.3 -51 500 4751 6102.34 4819.13 -7674.98 -52 510 4750 9373.91 1667.31 -6541.45 -53 520 4749 15506.8 5068.95 -8136.82 -54 530 4748 8985.36 15023.6 -6472.49 -55 540 4747 2677.43 13114.3 -2146.14 -56 550 4746 -4031.1 6911.8 2289.4 -57 560 4745 -8193.58 6090.21 1737.93 -58 570 4744 -2050.34 9254.66 -904.654 -59 580 4743 59.7859 10184.6 1141.59 -60 590 4742 -1131.75 5795.75 46.2473 -61 600 4741 -10090.8 -2453.03 -3680.32 -62 610 4740 -7476.91 -6560.48 1661.41 -63 620 4739 -2924.49 -4656.14 10743.1 -64 630 4738 -3089.64 -1418.64 17052.3 -65 640 4737 -729.907 -1215.47 12577.8 -66 650 4736 939.414 398.308 12337.2 -67 660 4735 -6498.29 3137.51 12097.4 -68 670 4734 -11235.2 3693.88 5867.01 -69 680 4733 -9009.34 1815.27 4779.23 -70 690 4732 -5411.01 -6001.05 8099.97 -71 700 4731 -4147.02 -4522.03 10736.7 -72 710 4730 -4630.31 192.761 11270.2 -73 720 4729 -3999.17 72.3067 9925.23 -74 730 4728 3645.03 -2462.59 7980.2 -75 740 4727 11477.2 681.651 -3159.41 -76 750 4726 13946.2 -2793.36 -1141.62 -77 760 4725 14696 -4366.35 -1619.57 -78 770 4724 11398.1 905.579 -2148.93 -79 780 4723 12597.6 4836.91 2127.77 -80 790 4722 6042.37 6419.42 -2149.68 -81 800 4721 5317.86 3606.82 -5248.57 -82 810 4720 3869.75 2236.28 -10827.8 -83 820 4719 -915.896 1627.2 -11736.9 -84 830 4718 2366.31 1208.46 -8511.74 -85 840 4717 2636.45 3964.97 -5968.47 -86 850 4716 -4218.11 6470.33 857.771 -87 860 4715 -7568.31 244.673 5699.76 -88 870 4714 -7811.04 -3710.33 2785.8 -89 880 4713 -169.144 82.3362 -1996.51 -90 890 4712 3124.6 -4068.31 617.876 -91 900 4711 -205.57 -12122.9 5542.99 -92 910 4710 -1279.07 -9664.09 3376.73 -93 920 4709 -4109.02 -558.465 2972.74 -94 930 4708 -4005.06 12490 3982.13 -95 940 4707 -4532.21 16556.2 4211.15 -96 950 4706 -3700.31 9834.66 6783.64 -97 960 4705 -288.59 3709.04 6775.69 -98 970 4704 -1377.95 3715.96 8280.4 -99 980 4703 -3424.14 10290.9 8886.46 -100 990 4702 -5613.52 10032.8 4599.75 -101 1000 4701 -8530.17 12657.1 3668.05 -102 1010 4700 -1997.13 11988.4 7012.28 -103 1020 4699 4249.91 6927.96 3396.04 -104 1030 4698 5856.04 1315.66 -2763.61 -105 1040 4697 9386.04 -2823.51 -2272.97 -106 1050 4696 17067 -2744.21 -2475.05 -107 1060 4695 16187.4 -1323.67 344.955 -108 1070 4694 11740.1 -8327.24 5256.09 -109 1080 4693 9636.42 -9048.63 15248.2 -110 1090 4692 13423.3 -6399.77 18271.6 -111 1100 4691 14887.6 -8328.34 12332.1 -112 1110 4690 16019.4 -7723.38 1654.04 -113 1120 4689 13152.4 -4426.77 -2750.31 -114 1130 4688 4943.46 -3786.44 -6070.92 -115 1140 4687 4460.66 -7361.45 -6855.39 -116 1150 4686 8257.83 -3839.92 -4555.09 -117 1160 4685 8547.18 304.535 -3322.09 -118 1170 4684 6528.08 3381.31 3774.03 -119 1180 4683 -991.215 4102.22 6561.35 -120 1190 4682 2653.28 5800.39 1489.12 -121 1200 4681 9443.14 8876.02 -91.5009 -122 1210 4680 8279.71 13670 3234.83 -123 1220 4679 4677.84 8770.52 6947.4 -124 1230 4678 7746.65 6401.52 6256.36 -125 1240 4677 10807.7 796.245 4565.94 -126 1250 4676 15802.9 1970.55 -2201.18 -127 1260 4675 22726.7 3490.98 -4764.17 -128 1270 4674 19689.1 4705.32 -6591.99 -129 1280 4673 16161.4 8112.45 -8213.16 -130 1290 4672 6277.92 -1037.32 -7756.25 -131 1300 4671 1973.23 -708.472 -5829.63 -132 1310 4670 -471.295 78.9877 -13335.8 -133 1320 4669 2091.31 1138.59 -14291.4 -134 1330 4668 2330.72 2158.91 -8416.84 -135 1340 4667 1902.65 7140.82 1485.12 -136 1350 4666 -481.178 12060.2 3126.37 -137 1360 4665 -5402.11 7534.34 1128.74 -138 1370 4664 -9204.48 3204.5 -5261.68 -139 1380 4663 -6777.44 3545.11 -5109.65 -140 1390 4662 -7793.1 3604.27 -2832.85 -141 1400 4661 -5643.5 508.946 1654.71 -142 1410 4660 -2878.45 4711.56 -1343.33 -143 1420 4659 4105.56 7609.9 -4755.46 -144 1430 4658 7167.12 5534.81 -6371.65 -145 1440 4657 2856.14 6425.84 -9011.07 -146 1450 4656 5384.75 7502.92 -14193.5 -147 1460 4655 1987.79 1243.84 -14380.7 -148 1470 4654 126.513 1823.06 -12185.1 -149 1480 4653 -204.346 -2622.36 -10449.6 -150 1490 4652 3239.17 3549.8 -11430.2 -151 1500 4651 -2177.37 907.237 -6264.12 -152 1510 4650 -7299.33 473.245 -4546.45 -153 1520 4649 -6680.38 2760.14 1128.61 -154 1530 4648 -3986.04 3852.41 5395.75 -155 1540 4647 456.159 2693.28 5080.3 -156 1550 4646 595.303 3531.2 3919.86 -157 1560 4645 614.147 -5461 3052.31 -158 1570 4644 4746.73 -10012 474.059 -159 1580 4643 4742.3 -14822.8 1547.46 -160 1590 4642 3837.75 -14992.7 -468.677 -161 1600 4641 198.307 -14434.8 922.911 -162 1610 4640 -2869.58 -17138.1 -669.464 -163 1620 4639 -186.27 -12828.6 1598.63 -164 1630 4638 4547.94 -11477.3 7396.06 -165 1640 4637 776.233 -12246.9 6329.13 -166 1650 4636 -8268.45 -13653.3 4435.89 -167 1660 4635 -11549.6 -9256.29 4184.43 -168 1670 4634 -12360.4 -8137.98 3073.9 -169 1680 4633 -9290.08 286.635 4801.3 -170 1690 4632 -5558.5 4338.41 -1700.35 -171 1700 4631 195.163 3497.71 -550.49 -172 1710 4630 -2002.33 4990.04 3250.25 -173 1720 4629 644.238 7086.75 112.818 -174 1730 4628 1280.46 5502.98 495.827 -175 1740 4627 4956.41 6092.25 2865.92 -176 1750 4626 1876.33 4806.05 1900.52 -177 1760 4625 -4018.45 7718.09 1915.92 -178 1770 4624 247.301 6773.38 -1444.58 -179 1780 4623 7393.98 3732.67 2219.88 -180 1790 4622 2309.6 -514.468 5648.7 -181 1800 4621 -239.078 -2042.36 2292.68 -182 1810 4620 -1513.72 3386.17 529.106 -183 1820 4619 -480.691 4822.6 -1988.8 -184 1830 4618 -4356.94 2969.39 -1793.57 -185 1840 4617 -9663.05 -371.626 -5538.22 -186 1850 4616 -7866.81 -965.231 -7910.01 -187 1860 4615 -4466.35 -5011.98 -10367.6 -188 1870 4614 -405.063 -8651.76 -8198.17 -189 1880 4613 752.383 -10955.7 -9203.18 -190 1890 4612 -2958.4 -6737.54 -5423.25 -191 1900 4611 -11178.3 -8042.46 -959.875 -192 1910 4610 -12550.6 -1590.49 979.241 -193 1920 4609 -6400.43 3213.1 2861.68 -194 1930 4608 -8128.85 8176.32 4423.84 -195 1940 4607 -2415.34 13886.9 6370.35 -196 1950 4606 5833.88 16199.4 1383.01 -197 1960 4605 3553.46 11476.5 -1645.62 -198 1970 4604 3418.66 5797.47 -1514.43 -199 1980 4603 1546.4 13290.2 -1139.35 -200 1990 4602 2653.01 10710.3 -1475.7 -50000 200 -1 0 5001 385760 371568 388949 -2 10 5000 225423 214160 234850 -3 20 4999 118101 115556 124612 -4 30 4998 78438.5 77994.6 82181.5 -5 40 4997 61084.4 57820.9 61232.3 -6 50 4996 44669.1 36895.6 49650.1 -7 60 4995 26747.9 24612.1 39520.7 -8 70 4994 14003.3 21990.9 33022.9 -9 80 4993 14072.9 17176 24175.2 -10 90 4992 6727.34 13341.8 17374.4 -11 100 4991 1708.3 14218.3 15873.9 -12 110 4990 -122.868 8647.55 12948.9 -13 120 4989 -1030.66 -4233.38 11276.2 -14 130 4988 7596.68 -1178.99 11314.6 -15 140 4987 9120.33 -2126.82 11736.4 -16 150 4986 4159.66 -9651.39 7488.46 -17 160 4985 5399.69 -12439.9 7451 -18 170 4984 15132.5 -14320.5 857.205 -19 180 4983 15154.7 -15544.2 -828.385 -20 190 4982 14500.4 -9571.4 -2091.54 -21 200 4981 6739.14 -1977.84 -1751.34 -22 210 4980 6505.77 -2602.72 -2525.29 -23 220 4979 7417.72 -7464.83 991.789 -24 230 4978 11444.9 -12198.2 2750.4 -25 240 4977 2557.73 -10791.4 1376.16 -26 250 4976 -2591.34 -6286.05 -285.608 -27 260 4975 -2029.75 -4027.31 -642.964 -28 270 4974 1541.45 1734.98 2129.31 -29 280 4973 2666.56 7942.85 13765.6 -30 290 4972 2186.8 7219.77 14739.9 -31 300 4971 4533.14 721.578 12325.3 -32 310 4970 4162.58 -2803.78 11700.6 -33 320 4969 1014.2 -1881.83 10638.3 -34 330 4968 -536.613 -6545.17 9591.25 -35 340 4967 -2900.42 -3781.68 12053.5 -36 350 4966 1506.22 -1760.1 14869.3 -37 360 4965 6113.54 -5404.42 13244.7 -38 370 4964 5126.53 -9376.53 9746.22 -39 380 4963 2255.96 -11985 6264.33 -40 390 4962 0.969478 -5311.98 1339.74 -41 400 4961 3486.12 239.708 -693.298 -42 410 4960 1908.99 -861.32 3417.03 -43 420 4959 1376.16 163.908 13563.5 -44 430 4958 602.567 1979.77 11457.3 -45 440 4957 6593.8 -882.484 6837.11 -46 450 4956 6780.07 1569.02 1645 -47 460 4955 8662.19 9920.37 468.882 -48 470 4954 9383.47 15755 -4079.59 -49 480 4953 6336.75 15855 -7044.48 -50 490 4952 3737.72 11385.2 -11004 -51 500 4951 7948.19 6964.65 -6544.84 -52 510 4950 9793.58 5416.92 -5779.48 -53 520 4949 14681.7 8449.67 -7223.73 -54 530 4948 8851.99 17323.1 -6101.49 -55 540 4947 2679.24 14560.9 -2582.72 -56 550 4946 -3155.93 8891.32 1684.49 -57 560 4945 -7287.41 7337.39 1306.81 -58 570 4944 -1269.76 9610.63 -2298.71 -59 580 4943 1503.69 10791.5 60.564 -60 590 4942 -40.8568 6371.19 -353.225 -61 600 4941 -10099.4 -170.109 -4022.43 -62 610 4940 -7433.12 -3466.49 74.33 -63 620 4939 -3256.7 -2347.29 9158.58 -64 630 4938 -2909.95 -7.78377 15400.6 -65 640 4937 -268.535 -628.731 10807.9 -66 650 4936 372.151 531.421 10387.8 -67 660 4935 -7053.92 2037.3 10490.8 -68 670 4934 -11067.7 3415.95 4944.77 -69 680 4933 -8329.16 1831.04 3522.06 -70 690 4932 -4452.47 -6404.83 7199.3 -71 700 4931 -3434.16 -5082.58 10336.1 -72 710 4930 -4316.71 741.932 10541.9 -73 720 4929 -5085.24 366.156 8261.67 -74 730 4928 2613.36 -2717.23 5393.33 -75 740 4927 9971.17 -429.512 -4944.37 -76 750 4926 12738.8 -4556.87 -3512.08 -77 760 4925 14061.4 -6556.78 -4225.91 -78 770 4924 11806.3 -1282.55 -4003.1 -79 780 4923 11502.3 2336.37 1294.96 -80 790 4922 4128.65 4181.05 -2246.25 -81 800 4921 3426.89 2790.71 -4627.28 -82 810 4920 1519.53 3077.22 -10325.4 -83 820 4919 -3009.88 3201.1 -11496 -84 830 4918 552.372 1991.67 -7341.98 -85 840 4917 1532.8 4395.98 -4109.4 -86 850 4916 -4560.5 6485.76 1927.36 -87 860 4915 -6614.4 1013.27 5654.85 -88 870 4914 -6755.5 -2344.12 3028.65 -89 880 4913 624.844 1855.92 -1628.14 -90 890 4912 4078.04 -2654.66 -27.514 -91 900 4911 1274.28 -10261.6 4699.07 -92 910 4910 -1052.31 -7700.44 2361.72 -93 920 4909 -4351.27 766.157 2149.47 -94 930 4908 -4434.36 13383.5 4052.98 -95 940 4907 -4065.97 17366.9 4585.73 -96 950 4906 -2930.43 10381.4 6425.01 -97 960 4905 323.334 4052.59 6410.89 -98 970 4904 -1200.1 3385.44 7973.39 -99 980 4903 -3584.64 10379 8668.92 -100 990 4902 -5829.19 11020.4 4632.22 -101 1000 4901 -7589.06 13219.7 2644.65 -102 1010 4900 -798.023 13315.8 4972.2 -103 1020 4899 4975.88 9865.12 872.204 -104 1030 4898 6511.05 4426.01 -5521.07 -105 1040 4897 9182.27 -854.627 -4533.44 -106 1050 4896 15740 -2845.8 -3619.62 -107 1060 4895 16154.6 -2040.81 -771.107 -108 1070 4894 13303.1 -8644.99 4513.37 -109 1080 4893 11693.9 -9675.82 14369.8 -110 1090 4892 14883.7 -7693.74 16857.7 -111 1100 4891 16338.5 -9199.87 10658.9 -112 1110 4890 16772.2 -7471.56 1339.9 -113 1120 4889 13458.5 -3775.43 -1649.87 -114 1130 4888 5134.82 -1532.84 -5017.73 -115 1140 4887 4420.69 -4666.95 -6532.58 -116 1150 4886 8277.74 -1367 -4369.51 -117 1160 4885 9444.87 2287.55 -3121.53 -118 1170 4884 8002.39 5763.7 4115.55 -119 1180 4883 -1263.68 7211.92 7043.15 -120 1190 4882 2731.12 7962.1 1514.17 -121 1200 4881 9538.52 10337.7 -795.068 -122 1210 4880 8261.89 14738.9 1862.44 -123 1220 4879 4652.65 9746.67 6392.84 -124 1230 4878 7624.69 6999.8 6521.52 -125 1240 4877 10412 1645.88 4545.68 -126 1250 4876 15402.2 1992.18 -1129.51 -127 1260 4875 21892.1 2711.05 -4148.06 -128 1270 4874 17753.3 2597.56 -6407.86 -129 1280 4873 13826 6128.98 -7806.31 -130 1290 4872 3151.16 -2664.6 -6433.33 -131 1300 4871 -1569.86 -3481.91 -4071.09 -132 1310 4870 -4014.04 -2900.65 -11822.3 -133 1320 4869 -262.343 -1859.12 -12663.3 -134 1330 4868 1959.81 -772.451 -6430.2 -135 1340 4867 1739.89 5118.62 3043.85 -136 1350 4866 -1884.06 9713.57 4404.63 -137 1360 4865 -7175.25 4342.87 2622.4 -138 1370 4864 -11666.3 -114.107 -3984.84 -139 1380 4863 -8832.17 1237.72 -3708.53 -140 1390 4862 -8839.6 815.429 -1063.03 -141 1400 4861 -5634.46 -2855.34 4247.3 -142 1410 4860 -2369.7 1123.08 213.863 -143 1420 4859 4638.51 6341.41 -3505.79 -144 1430 4858 7852.66 4526.39 -5322.06 -145 1440 4857 4126.46 7089.83 -9543.37 -146 1450 4856 6362.09 9130.89 -13895.5 -147 1460 4855 3436.6 2361.71 -14211.5 -148 1470 4854 2198.98 3134.35 -12640.1 -149 1480 4853 1616.96 -1003.18 -11433.2 -150 1490 4852 4010.32 4407.77 -12945.2 -151 1500 4851 -1232.59 1420.99 -7670.17 -152 1510 4850 -5616.63 1130.04 -5177.55 -153 1520 4849 -4033.95 3404.17 355.886 -154 1530 4848 -1788.53 5148.54 5532.29 -155 1540 4847 1102.81 4794.5 5842.36 -156 1550 4846 435.504 4573.37 4239.6 -157 1560 4845 600.996 -4653.69 3167.68 -158 1570 4844 5215.09 -9447.74 922.477 -159 1580 4843 4670.53 -13931.5 1588.24 -160 1590 4842 3863.15 -14798.4 -811.578 -161 1600 4841 366.785 -15376.7 420.897 -162 1610 4840 -2141.58 -17266.8 -1225.61 -163 1620 4839 499.953 -12398.3 954.937 -164 1630 4838 5294.07 -10535.2 7962.58 -165 1640 4837 1218.95 -10433.5 5612.92 -166 1650 4836 -6712.9 -12286.1 4426.44 -167 1660 4835 -10761.6 -8165.35 4408.63 -168 1670 4834 -12315.4 -7058.88 2808.27 -169 1680 4833 -9163.72 1386.98 5121.05 -170 1690 4832 -4752.97 5364.01 -1773.07 -171 1700 4831 2164.56 4295.72 -1587.02 -172 1710 4830 1126.92 5243.05 1681.7 -173 1720 4829 3514.85 6518.5 -583.825 -174 1730 4828 3859.32 4886.32 268.448 -175 1740 4827 7430.88 6984.24 2036.05 -176 1750 4826 3722.1 6403.51 1074.15 -177 1760 4825 -1976.15 7137.85 1715.31 -178 1770 4824 850.022 5812.59 -655.09 -179 1780 4823 8100.62 3297.48 3444.52 -180 1790 4822 3597.77 -1037 7099.72 -181 1800 4821 453.745 -3507.09 3162.83 -182 1810 4820 -854.235 454.97 1710.66 -183 1820 4819 -580.194 1642.36 -917.497 -184 1830 4818 -5221.6 -51.351 -1161.64 -185 1840 4817 -11257.9 -2296.85 -5837.94 -186 1850 4816 -10913.4 -2627.65 -9246.86 -187 1860 4815 -7910.49 -7026.06 -11458 -188 1870 4814 -4099.8 -10751.2 -9225.49 -189 1880 4813 -3211.42 -11898 -9984.28 -190 1890 4812 -6419.33 -6955.97 -6919.56 -191 1900 4811 -13690.1 -9096.88 -2725.65 -192 1910 4810 -14570.9 -3083.69 -10.7829 -193 1920 4809 -8226.92 1489.75 1916.87 -194 1930 4808 -9156.73 7025.86 3506.74 -195 1940 4807 -2291.91 14334.2 5159.58 -196 1950 4806 5333.37 15867.5 -304.981 -197 1960 4805 2548.71 11889.9 -3690.62 -198 1970 4804 3610.07 7696.49 -3450.85 -199 1980 4803 2316.41 14354.6 -2942.75 -200 1990 4802 2127.89 10563.9 -3522.08 -52000 200 -1 0 5201 384260 374885 386645 -2 10 5200 224803 217469 232553 -3 20 5199 119158 119091 122500 -4 30 5198 79276.4 81894.8 80110.1 -5 40 5197 62961.7 62062.3 59042.5 -6 50 5196 47202 40500.4 48991 -7 60 5195 30270.4 27294.3 38925.8 -8 70 5194 17643 25184.2 31577.1 -9 80 5193 16983.4 20971.6 22973.4 -10 90 5192 8133 16248.6 16524.9 -11 100 5191 1520 15863.6 13809.1 -12 110 5190 -257.867 9418.69 11755.8 -13 120 5189 -1111.56 -1900.75 10323.9 -14 130 5188 7710.17 943.67 10069.3 -15 140 5187 9952.52 -394.898 11610.5 -16 150 5186 4475.03 -6687.45 7831.18 -17 160 5185 5495.99 -8561.68 8383.39 -18 170 5184 14473.7 -9992.5 2828.11 -19 180 5183 15138.3 -13023.6 126.027 -20 190 5182 14064.9 -8534.48 -3045.62 -21 200 5181 5832.13 -2323.24 -3326.49 -22 210 5180 5888.81 -2755.1 -3637.85 -23 220 5179 7368.81 -7330.77 1195.43 -24 230 5178 12011.1 -12783.7 4862.15 -25 240 5177 3644.54 -12354.2 2321.79 -26 250 5176 -993.775 -7770.13 94.5187 -27 260 5175 -126.221 -5633.9 -1002.95 -28 270 5174 2865.66 -28.1327 913.792 -29 280 5173 3818.73 6290.31 12673.4 -30 290 5172 4216.65 5605.7 14055 -31 300 5171 7533.15 -799.609 11235.5 -32 310 5170 6286.24 -3737.94 10897.1 -33 320 5169 2718.95 -1975.86 9881.36 -34 330 5168 321.905 -7228.76 8835.58 -35 340 5167 -2499.28 -3200.58 12163.1 -36 350 5166 1937.58 -520.041 14637 -37 360 5165 6222.09 -4546.95 12574.1 -38 370 5164 4995.05 -9071.2 9690.15 -39 380 5163 2358.33 -10514 5920.2 -40 390 5162 -904.583 -3367.62 1395.21 -41 400 5161 1442.89 1833.07 305.288 -42 410 5160 -441.118 -120.077 4697.76 -43 420 5159 -707.834 1508.38 14120.6 -44 430 5158 -1263.73 4077.14 11379.5 -45 440 5157 5010.6 1426.26 6000.23 -46 450 5156 4945.24 2688.25 1008.65 -47 460 5155 6877.7 10705.6 1212 -48 470 5154 6235.53 16255 -4855.86 -49 480 5153 3668.82 15850.8 -7246.43 -50 490 5152 2147.18 10678.2 -10045.3 -51 500 5151 6517.28 6624.72 -5527.07 -52 510 5150 8558.32 6049.53 -4604.18 -53 520 5149 13167 9190.8 -7098.8 -54 530 5148 7629.92 17099.6 -6752.58 -55 540 5147 2607.73 13901.3 -3170.92 -56 550 5146 -3415.79 9115.57 2230.77 -57 560 5145 -6459.48 8626.23 2899.64 -58 570 5144 -932.611 11260 -42.0558 -59 580 5143 1169.98 10648.4 1798.17 -60 590 5142 251.142 7327.71 458.337 -61 600 5141 -9621.16 2208.97 -4056.28 -62 610 5140 -6506.44 -1846.8 -562.607 -63 620 5139 -1885.67 -2884 7852.89 -64 630 5138 -1206.87 -1294.41 13813.1 -65 640 5137 983.754 -1568.1 10309.3 -66 650 5136 1294.28 -1178.85 9751.06 -67 660 5135 -5821.81 210.649 9778.61 -68 670 5134 -8660.83 3272 4748.77 -69 680 5133 -5133.87 2060.75 2783.53 -70 690 5132 -2292.66 -6363.08 5847.74 -71 700 5131 -2297.63 -5502.56 9246.08 -72 710 5130 -4176.12 -283.946 9111.14 -73 720 5129 -4268.94 -399.701 8673.82 -74 730 5128 2679.91 -2101.26 7234.11 -75 740 5127 10235.7 499.198 -3287.16 -76 750 5126 14080.5 -3728.26 -2470.33 -77 760 5125 14138.8 -5552.86 -4666.51 -78 770 5124 12181.1 -178.279 -4756.08 -79 780 5123 10693.4 2725.56 1581.53 -80 790 5122 3909.79 3831.43 -671.159 -81 800 5121 3794.22 1955.48 -2947.63 -82 810 5120 2764.99 1315.03 -8402.84 -83 820 5119 -1176.98 1669.95 -10638.3 -84 830 5118 2343.6 1373.55 -7325.04 -85 840 5117 2585.68 3966.23 -3854.8 -86 850 5116 -3778.85 6461.4 1365.26 -87 860 5115 -4810.59 1698.67 4937.96 -88 870 5114 -4864.95 -1275.69 2445.42 -89 880 5113 1832.52 2298.1 -1808.38 -90 890 5112 5150.13 -1280.64 32.7465 -91 900 5111 2492.36 -8431.69 4839.54 -92 910 5110 1173.34 -5850.65 1930.9 -93 920 5109 -2968.61 2206.09 1886.59 -94 930 5108 -3161.14 13821.6 4709.45 -95 940 5107 -2836.96 16501.2 5402.04 -96 950 5106 -1435.26 10892.5 8696.27 -97 960 5105 895.454 4888.85 8869.84 -98 970 5104 -1222.2 3768.91 11488.8 -99 980 5103 -2911.51 10880.6 12278.1 -100 990 5102 -5468.72 13078.9 7002.13 -101 1000 5101 -7482.48 15821.9 3543.35 -102 1010 5100 -1332.97 15451.9 5743.34 -103 1020 5099 4689.96 10678.7 2223.09 -104 1030 5098 6426.72 5853.99 -4949.39 -105 1040 5097 8501.69 -39.001 -4071.66 -106 1050 5096 14991.3 -1818.5 -4413 -107 1060 5095 15090.8 -1045.98 -1912.77 -108 1070 5094 13331.6 -7051.36 3469.82 -109 1080 5093 10885.2 -7839.57 12940.7 -110 1090 5092 13894.7 -5891.46 15342.1 -111 1100 5091 15364.3 -8230.13 9111.05 -112 1110 5090 16184.7 -7214.89 -212.792 -113 1120 5089 14028.7 -2760.93 -2842.45 -114 1130 5088 5699.38 -460.815 -5367.35 -115 1140 5087 4471.64 -3963.32 -7303.76 -116 1150 5086 7774.22 -61.8422 -4232.69 -117 1160 5085 8869.76 4430.67 -2689.62 -118 1170 5084 7116.59 7595.09 2752.11 -119 1180 5083 -1496.12 8619.3 5158.06 -120 1190 5082 2331.01 9876.93 -643.423 -121 1200 5081 8869.24 12750 -2037.36 -122 1210 5080 8054.65 15906.2 2042.46 -123 1220 5079 3570.31 9955.12 6774.4 -124 1230 5078 5885.48 7183.36 7005.12 -125 1240 5077 8232.28 2003.55 4341.86 -126 1250 5076 13993 1967.91 -2460.64 -127 1260 5075 20225.5 2687.56 -5552.78 -128 1270 5074 14976.1 3747.02 -7619.58 -129 1280 5073 10476.4 8176.62 -8641.18 -130 1290 5072 1243.66 -872.595 -7565.18 -131 1300 5071 -2132.09 -748.115 -4549.64 -132 1310 5070 -3775.11 551.149 -11099.2 -133 1320 5069 -656.901 929.098 -12432.8 -134 1330 5068 1308.29 1156.33 -7412.34 -135 1340 5067 1036.61 6417.06 1886.46 -136 1350 5066 -1613.4 11038 4166.09 -137 1360 5065 -5823.96 5622.95 4011.79 -138 1370 5064 -10459.2 -679.437 -1463.51 -139 1380 5063 -7139.67 1.64968 -1697.04 -140 1390 5062 -6994.36 980.986 564.205 -141 1400 5061 -4308.19 -2668.13 4791.75 -142 1410 5060 -2250.55 921.575 256.185 -143 1420 5059 4698.82 5516.54 -3779.58 -144 1430 5058 8038.19 3997.9 -5489.39 -145 1440 5057 5457.87 6966.55 -9178.89 -146 1450 5056 6570.01 8566.6 -13076.7 -147 1460 5055 2660.8 2657.82 -13085.3 -148 1470 5054 2294.96 4669.67 -11439.8 -149 1480 5053 2141.78 1501.61 -9390.9 -150 1490 5052 4850.44 5680.34 -11708.7 -151 1500 5051 31.2759 2631.99 -7629.18 -152 1510 5050 -3976.95 3099.85 -5690.68 -153 1520 5049 -2835.1 3928.84 64.7446 -154 1530 5048 -1679.49 4021.12 6001.32 -155 1540 5047 1094.36 1959.32 6049.64 -156 1550 5046 1112.39 2025.23 4382.01 -157 1560 5045 2074.68 -6110.92 3200.5 -158 1570 5044 6305.1 -10935.1 1666.55 -159 1580 5043 5497.74 -13897.1 1652.41 -160 1590 5042 3889.11 -14560.6 -610.034 -161 1600 5041 655.969 -15913.2 715.111 -162 1610 5040 -1240.23 -18197 -684.306 -163 1620 5039 1274.5 -14571.2 1396.27 -164 1630 5038 5768.58 -13144.9 7890.6 -165 1640 5037 1889.29 -13596.2 5856.25 -166 1650 5036 -5698.65 -15534.5 3775.72 -167 1660 5035 -8770.2 -10319.2 4009.06 -168 1670 5034 -10707.5 -8684.76 2694.08 -169 1680 5033 -7737.4 -1139.33 5796.38 -170 1690 5032 -3958.28 2749.51 -885.978 -171 1700 5031 3697.54 1608.32 -2144.22 -172 1710 5030 2958.42 1605.92 2590.44 -173 1720 5029 4007.94 2321.86 1099.09 -174 1730 5028 4212.93 614.712 1674.08 -175 1740 5027 8428.85 3276.52 3250.05 -176 1750 5026 5025.22 2412.44 1333.72 -177 1760 5025 -1319.77 3746.24 1546.35 -178 1770 5024 766.314 2155.87 263.805 -179 1780 5023 7435.32 8.1797 4289.6 -180 1790 5022 3791.82 -4245.55 8023.61 -181 1800 5021 1211.3 -6502.44 4211.7 -182 1810 5020 -770.081 -2713.19 1936.94 -183 1820 5019 -606.242 -2014.7 331.838 -184 1830 5018 -6411.07 -3044.57 739.462 -185 1840 5017 -12426.4 -5251.57 -4194.14 -186 1850 5016 -12430.7 -5535.03 -8043.08 -187 1860 5015 -9098.32 -8529.8 -9734.03 -188 1870 5014 -4084.45 -11804.8 -6981.2 -189 1880 5013 -2214.39 -13412.6 -7981.68 -190 1890 5012 -4933.73 -9391.29 -4842.49 -191 1900 5011 -13102.4 -11176.7 -1220.31 -192 1910 5010 -15296.8 -4600.8 1733.28 -193 1920 5009 -8509.49 38.7087 3201.77 -194 1930 5008 -7584.78 5679.84 3948.75 -195 1940 5007 -490.7 12780.6 5840.71 -196 1950 5006 6684.3 14889.7 463.201 -197 1960 5005 3827.73 11177.1 -3159.88 -198 1970 5004 5263.04 7245.02 -3565.46 -199 1980 5003 2952.5 14425.4 -3911.82 -200 1990 5002 1501.14 12088.2 -5301.88 -54000 200 -1 0 5401 384991 376189 385858 -2 10 5400 226160 218109 231509 -3 20 5399 120634 119019 121463 -4 30 5398 80729.4 82332.2 80140.8 -5 40 5397 64777.8 62507.2 59660.7 -6 50 5396 49360.8 42481 49799.2 -7 60 5395 32474.3 28687.4 40243.2 -8 70 5394 19555.4 25885.7 32530.1 -9 80 5393 18071.4 20676.8 23589.8 -10 90 5392 9319.73 14710 18220.1 -11 100 5391 2369.98 12901 15036.2 -12 110 5390 -364.8 7419.31 11039.3 -13 120 5389 -965.65 -1946.84 9330.83 -14 130 5388 7283.04 -318.775 10181 -15 140 5387 8143.44 -2676.32 11068.1 -16 150 5386 2586.08 -9027.47 6983.61 -17 160 5385 3693.86 -10886.8 6955.18 -18 170 5384 12183.1 -10740.9 1745.12 -19 180 5383 12770.3 -11945.7 -1324.75 -20 190 5382 11560.9 -8706.84 -5100.97 -21 200 5381 3761.11 -4215.14 -5426.74 -22 210 5380 4701.68 -4987.45 -5045.25 -23 220 5379 7260.88 -10109.2 966.379 -24 230 5378 11327.8 -14793.1 4957.9 -25 240 5377 2698.24 -13941.3 2067.25 -26 250 5376 -1177.64 -9051.52 133.535 -27 260 5375 262.188 -7763.15 -123.142 -28 270 5374 2901.36 -3681.09 2089.48 -29 280 5373 3787.44 2490.76 12208.1 -30 290 5372 4832.37 1636.23 12130.9 -31 300 5371 8844.36 -3709.16 9608.63 -32 310 5370 7371.74 -7068.21 11143.4 -33 320 5369 3347.22 -5249.29 11064.4 -34 330 5368 -904.183 -8827.84 8801.94 -35 340 5367 -4885.37 -5062.67 10653.1 -36 350 5366 -478.194 -2128.92 13247.1 -37 360 5365 4061.74 -5581.36 12394.6 -38 370 5364 2271.87 -9128.75 9525.07 -39 380 5363 -21.7346 -10154.7 6505.27 -40 390 5362 -3290.81 -3913.99 2477.73 -41 400 5361 -2091.73 1996.67 1824.67 -42 410 5360 -4365.97 1623.74 6551.94 -43 420 5359 -5130.34 3965.72 14640.7 -44 430 5358 -5137.14 7311.86 11230.1 -45 440 5357 1252.54 4377.79 7843.2 -46 450 5356 777.585 5425.49 3904.44 -47 460 5355 1598.26 13086 3211.92 -48 470 5354 2032.32 17480.3 -2152.73 -49 480 5353 535.183 16095.5 -2966.12 -50 490 5352 -1095.68 11942.4 -5275.31 -51 500 5351 3170.54 8575.11 -1743.53 -52 510 5350 5889.28 7733.03 -2603.29 -53 520 5349 11060.2 10123.1 -4969.98 -54 530 5348 7137.8 17438.3 -4296.98 -55 540 5347 2833.17 13252.1 -662.584 -56 550 5346 -2824.79 8850.66 5301.05 -57 560 5345 -5619.54 8556.64 5012.48 -58 570 5344 70.1851 10307.4 2074.91 -59 580 5343 3154.85 10770.5 3948.4 -60 590 5342 2486.67 7241.92 1161.14 -61 600 5341 -6195.98 1270.64 -5533.49 -62 610 5340 -3189.08 -1780.81 -1719.63 -63 620 5339 807.595 -2792.25 7583.37 -64 630 5338 1041.69 -2048.58 14058.8 -65 640 5337 2361.91 -2715.67 10501.8 -66 650 5336 2037.25 -3129.03 9530.87 -67 660 5335 -3903.87 -1496.69 8500.84 -68 670 5334 -6210.8 1740.5 3736.35 -69 680 5333 -2943.36 430.123 3024.51 -70 690 5332 -212.214 -8736.35 5157.64 -71 700 5331 -607.378 -7293.53 9017.96 -72 710 5330 -2837.9 -1811.68 9254.48 -73 720 5329 -3614.61 -3647.66 9210.08 -74 730 5328 2842.7 -5651.17 7449.41 -75 740 5327 10133.9 -2350.29 -3641.66 -76 750 5326 13568.9 -5071.17 -2868.5 -77 760 5325 13340 -6762.56 -4142.88 -78 770 5324 11617 -2138.64 -3171.82 -79 780 5323 10744.9 1185.02 3775.97 -80 790 5322 4522.41 1642.94 1968.25 -81 800 5321 3257.82 -109.174 -69.229 -82 810 5320 2393.48 -580.063 -5863.1 -83 820 5319 -706.789 -630.552 -8855.33 -84 830 5318 2571.8 -32.9463 -6051.89 -85 840 5317 3067.11 3103.53 -3472.29 -86 850 5316 -3286.65 5953.95 2547.15 -87 860 5315 -3386.17 1853.51 6966.76 -88 870 5314 -3154.14 -749.847 3994.28 -89 880 5313 2998.7 3242.34 -767.085 -90 890 5312 6180.34 917.208 1737.42 -91 900 5311 4025.8 -6181.89 6518.19 -92 910 5310 2942.78 -4497.12 4260.89 -93 920 5309 -786.926 4652.21 3427.39 -94 930 5308 -927.802 16546.5 5998.51 -95 940 5307 -775.704 19431.5 6920.71 -96 950 5306 585.709 13661.2 10560.2 -97 960 5305 3157.35 7256.64 10079.1 -98 970 5304 1052.18 5148.74 12012 -99 980 5303 -436.041 11530.6 12316.3 -100 990 5302 -2886.12 14196.2 6294.01 -101 1000 5301 -5073.83 16834.6 2343.12 -102 1010 5300 457.866 15991.8 4008.95 -103 1020 5299 5801.52 10609.9 2106.54 -104 1030 5298 6611.5 5662.65 -3242.31 -105 1040 5297 7883.59 -150.584 -2012.38 -106 1050 5296 13992.1 -1508.98 -3523.48 -107 1060 5295 13380.3 -1343.15 -1747.44 -108 1070 5294 11268.3 -6806.63 3477.25 -109 1080 5293 8771.51 -5572.9 12076.6 -110 1090 5292 10978 -5259.89 14598.9 -111 1100 5291 12245.2 -9064.92 9115.17 -112 1110 5290 13384.7 -7285.93 646.489 -113 1120 5289 11287 -2782.72 -1870.54 -114 1130 5288 3803.39 -526.11 -5180.78 -115 1140 5287 2500.59 -5660.53 -7568.01 -116 1150 5286 5392.73 -4007.93 -4915.07 -117 1160 5285 6323.89 203.636 -2735.75 -118 1170 5284 4702.81 4278.31 3683.51 -119 1180 5283 -3437.44 4097.1 6398.8 -120 1190 5282 684.543 5403.1 734.997 -121 1200 5281 7145.73 9996.37 -844.74 -122 1210 5280 6680.97 12688.1 2014.29 -123 1220 5279 2359.86 6412.18 6519.27 -124 1230 5278 4208.55 4412.2 7221.37 -125 1240 5277 6072.99 567.605 5323.27 -126 1250 5276 12916.3 1633.82 -1316.61 -127 1260 5275 19607.7 3271.33 -4304.57 -128 1270 5274 14784 3724.81 -5570.7 -129 1280 5273 10130.1 7686.25 -6472.85 -130 1290 5272 721.972 -850.433 -5878.15 -131 1300 5271 -1970.25 -900.86 -4056.48 -132 1310 5270 -3699.62 748.456 -11026.7 -133 1320 5269 -1047.81 935.936 -13070.5 -134 1330 5268 318.164 863.956 -7551.81 -135 1340 5267 -26.6251 5775.63 2024.75 -136 1350 5266 -2447.32 10280 5847.02 -137 1360 5265 -7187 5125.61 6412.97 -138 1370 5264 -11240.8 -769.906 -810.652 -139 1380 5263 -8134.48 1020.23 -2133.04 -140 1390 5262 -8980.6 2426.82 -196.175 -141 1400 5261 -7069.28 -1913.93 4607.69 -142 1410 5260 -5748.16 1714.39 924.063 -143 1420 5259 -174.302 5784.88 -1791.24 -144 1430 5258 2609.45 3910.66 -3316.58 -145 1440 5257 114.977 6527.68 -7469.28 -146 1450 5256 1850.98 8601.03 -11541.6 -147 1460 5255 -1848.2 3268.16 -12093.9 -148 1470 5254 -2445.56 4644.68 -10669.9 -149 1480 5253 -2287.71 1213.31 -8499.47 -150 1490 5252 314.249 5159.82 -10520.9 -151 1500 5251 -4481.15 1714.18 -6244.17 -152 1510 5250 -7078.2 1923.09 -3782.82 -153 1520 5249 -4879.78 2835.26 2060.48 -154 1530 5248 -3025.21 1763.93 7697.86 -155 1540 5247 -377.421 -436.124 7732.85 -156 1550 5246 399.339 -1054.64 6141.71 -157 1560 5245 2394.21 -8974.82 4891.92 -158 1570 5244 6404.62 -14632.3 2335.63 -159 1580 5243 6006.36 -18239.4 2884.42 -160 1590 5242 4986.65 -18306.7 1853.57 -161 1600 5241 2353.76 -18777.8 3464.11 -162 1610 5240 765.507 -21182.6 1915.97 -163 1620 5239 2512.03 -18462 2829 -164 1630 5238 7240.7 -15717 8235.16 -165 1640 5237 3487.3 -14391.5 5872.94 -166 1650 5236 -3737.88 -17288.1 5390.99 -167 1660 5235 -7608.89 -12270.2 6454.6 -168 1670 5234 -9282.77 -9476.43 4834.02 -169 1680 5233 -5838.05 -1745.12 7858.29 -170 1690 5232 -1883.47 3097 330.281 -171 1700 5231 5039.6 2442.02 -1893.72 -172 1710 5230 2913.12 2234.87 2283.02 -173 1720 5229 3387.66 2823.96 1268.44 -174 1730 5228 3002.84 945.579 921.518 -175 1740 5227 7776.89 2789.8 2871.54 -176 1750 5226 3721.2 2722.56 1908.1 -177 1760 5225 -2205.34 4671.42 2907.18 -178 1770 5224 -590.361 2698.43 1839.05 -179 1780 5223 6782.89 -274.052 4286.04 -180 1790 5222 3523.44 -4344.89 6793.57 -181 1800 5221 803.75 -6576.83 3443.54 -182 1810 5220 -480.761 -2075.74 2443.92 -183 1820 5219 69.9986 -451.646 772.557 -184 1830 5218 -4959.97 -1765.06 1438.43 -185 1840 5217 -10868.6 -2941.22 -3410.73 -186 1850 5216 -10021.7 -3488.18 -8173.62 -187 1860 5215 -6468.8 -6659.16 -10550.4 -188 1870 5214 -1327.5 -9694.03 -8151.09 -189 1880 5213 563.812 -10806.3 -9207.04 -190 1890 5212 -2741.99 -7511.28 -5604.6 -191 1900 5211 -10418.4 -9473.93 -1336.2 -192 1910 5210 -11505 -3025.15 1771.38 -193 1920 5209 -4608.13 2368.38 3241.44 -194 1930 5208 -4637.54 7977.78 4120.25 -195 1940 5207 2349.32 15329.9 6120.11 -196 1950 5206 8603.19 16641.2 -250.534 -197 1960 5205 5003.96 11659.7 -4960.86 -198 1970 5204 5887.64 7592.5 -4483.1 -199 1980 5203 2506.94 14698.8 -2821.42 -200 1990 5202 1240.64 11898.1 -2806.1 -56000 200 -1 0 5601 387576 372945 386520 -2 10 5600 227751 216015 231030 -3 20 5599 121905 117487 120826 -4 30 5598 81013.9 80669.6 81234.6 -5 40 5597 64692.6 60403.9 60503.4 -6 50 5596 49081.8 40929.1 48591.9 -7 60 5595 33315.1 28106.2 37408 -8 70 5594 21211.1 25286.6 31314.8 -9 80 5593 18667 20185.2 22744.7 -10 90 5592 9081.28 14441.4 16016.5 -11 100 5591 1023.48 12607.8 12150.9 -12 110 5590 -1971.8 6989.59 8795.84 -13 120 5589 -3279.78 -2302.73 7281.54 -14 130 5588 5465.96 -995.432 8142.32 -15 140 5587 5236.69 -3321.57 9775.28 -16 150 5586 -538.785 -9100.26 5863.7 -17 160 5585 1347.01 -12054.2 6227.4 -18 170 5584 9330.57 -11874.9 1834.81 -19 180 5583 10850.3 -11684 -501.308 -20 190 5582 9534.75 -8518.83 -3586.39 -21 200 5581 2163.94 -3767.64 -3854.34 -22 210 5580 3359.89 -4026.37 -3677.35 -23 220 5579 6120.33 -9199.1 2363.85 -24 230 5578 10149.4 -13689 5574.91 -25 240 5577 1887.5 -13272.5 1115.3 -26 250 5576 -1908.45 -8588.89 -1488.36 -27 260 5575 725.252 -7040.46 -1389.78 -28 270 5574 3870.42 -2531.85 2092.4 -29 280 5573 4542.81 2775.51 11907 -30 290 5572 6388.23 1454.91 10906.7 -31 300 5571 9503.33 -4296.15 8007.1 -32 310 5570 9148.76 -7720.29 8950.97 -33 320 5569 4359.85 -5706.13 8849.79 -34 330 5568 675.426 -8407.08 7495.04 -35 340 5567 -4110.31 -5378.09 10686.6 -36 350 5566 248.61 -2802.13 14237 -37 360 5565 3359.3 -6163.06 14345.7 -38 370 5564 799.726 -10520.8 11652 -39 380 5563 -2495.06 -11954 9091.85 -40 390 5562 -4966.72 -5547.32 5330.2 -41 400 5561 -2220.91 1741.1 4397.23 -42 410 5560 -4550.44 2152.07 9008.19 -43 420 5559 -6258.35 5771.69 15789.7 -44 430 5558 -7765.53 9180.18 11314.9 -45 440 5557 -1298.51 5392.56 7702.81 -46 450 5556 -1769.21 6047.96 3454.33 -47 460 5555 -583.431 12722.3 2207.53 -48 470 5554 441.815 16858.4 -2692.08 -49 480 5553 -601.558 15406.9 -3230.62 -50 490 5552 -2190.29 11693.7 -5521.95 -51 500 5551 1560.31 8570.44 -2098.83 -52 510 5550 4643.36 6882.46 -2987.99 -53 520 5549 10992.7 8654.49 -5655.85 -54 530 5548 8089.47 16133 -5504.38 -55 540 5547 3999 13416.7 -1477.48 -56 550 5546 -1833.2 9738.57 4658.95 -57 560 5545 -5638.63 9014.12 4439.85 -58 570 5544 -358.793 9259.11 1198.58 -59 580 5543 2318.6 8486.34 2199.19 -60 590 5542 1966.86 4504.24 85.7965 -61 600 5541 -5040.45 -507.215 -6121.48 -62 610 5540 -2218.69 -2478.65 -2572.27 -63 620 5539 2794.56 -3465.84 7440.95 -64 630 5538 2152.03 -2440.42 14641.2 -65 640 5537 3284.98 -2928.75 10589.9 -66 650 5536 2174.37 -3106.48 8895.59 -67 660 5535 -3318.89 -1401.65 8458.34 -68 670 5534 -6567.33 2343.55 4393.72 -69 680 5533 -2958.12 1665.71 3389.12 -70 690 5532 -542.475 -7466.35 4687.99 -71 700 5531 -7.28399 -6292.1 8602.24 -72 710 5530 -1308.29 -1025.71 9216.39 -73 720 5529 -1529.37 -3079.14 7699.92 -74 730 5528 4984.81 -4537.04 6541.84 -75 740 5527 11380.5 -1173.45 -2937.16 -76 750 5526 15761.4 -3592.21 -2238.14 -77 760 5525 15839 -5079.26 -4161.53 -78 770 5524 13833.8 -1916.81 -3977.58 -79 780 5523 12539.1 862.067 3817.09 -80 790 5522 6441.81 1453.43 1946.65 -81 800 5521 5370.38 -372.155 -1472.05 -82 810 5520 4350.07 -937.79 -7249.82 -83 820 5519 134.131 324.405 -8987.63 -84 830 5518 2911.14 1692.56 -6707.7 -85 840 5517 3127.07 3665 -5303.73 -86 850 5516 -3326.46 6948.3 1775.95 -87 860 5515 -3238.24 2884.21 5652.4 -88 870 5514 -3859.63 -196.791 2508.96 -89 880 5513 1308.09 3608.51 -2082.58 -90 890 5512 4042.51 1729.12 785 -91 900 5511 1825.47 -5395.69 6436.14 -92 910 5510 1721.31 -4473.62 4562.43 -93 920 5509 -2173.01 4218.19 4291.5 -94 930 5508 -1299.5 15243 7208.28 -95 940 5507 -1620.26 18346.1 6634.24 -96 950 5506 335.051 12384.7 9527.41 -97 960 5505 2380.66 6275.23 9901.91 -98 970 5504 231.348 4500.05 11089.6 -99 980 5503 -3236.09 11053.2 11298.4 -100 990 5502 -4862.2 13212.9 6648.73 -101 1000 5501 -7157.33 15726.7 3719.26 -102 1010 5500 -452.193 14905.7 5804.3 -103 1020 5499 6167.4 8591.93 3023.74 -104 1030 5498 7500.39 4091.27 -3401.38 -105 1040 5497 8899.17 -925.185 -3352.83 -106 1050 5496 13691.7 -2346.54 -4992.83 -107 1060 5495 13299.1 -2025.1 -2326.23 -108 1070 5494 11131.5 -6754.8 1975.91 -109 1080 5493 8744.86 -4971.86 9346.6 -110 1090 5492 10641.4 -4112.48 13335.1 -111 1100 5491 10991 -7311.68 8416.77 -112 1110 5490 11463.1 -5071.19 -710.703 -113 1120 5489 9694.44 -1118.72 -2120.42 -114 1130 5488 2537.13 113.853 -4704.03 -115 1140 5487 1480.14 -5712.29 -7166.18 -116 1150 5486 5038.94 -3892.2 -5119.04 -117 1160 5485 5366.94 872.951 -3731.08 -118 1170 5484 4003.82 4745.07 2747.36 -119 1180 5483 -4814.61 4644 5701.88 -120 1190 5482 48.7122 6143.81 618.186 -121 1200 5481 7130.56 9507.99 -1428.62 -122 1210 5480 5910.93 11190.7 1170.27 -123 1220 5479 1933.92 4562.51 5096.53 -124 1230 5478 3813.76 2939.66 6241.62 -125 1240 5477 6611.66 -641.079 4458.59 -126 1250 5476 14358.8 1499.13 -2779.74 -127 1260 5475 21923.3 3421.42 -5567.82 -128 1270 5474 16707.3 2929.73 -5409.64 -129 1280 5473 12244.6 6644.46 -5813.82 -130 1290 5472 1659.56 -1335.16 -4637.75 -131 1300 5471 -582.679 -1508.15 -3212.26 -132 1310 5470 -2972.21 -551.102 -10544.9 -133 1320 5469 94.7136 -179.48 -12626.4 -134 1330 5468 2431.86 4.76114 -8031.44 -135 1340 5467 3192.9 6220.51 1680.49 -136 1350 5466 1134.56 11170.4 5759.91 -137 1360 5465 -3634.28 5458.67 6879.55 -138 1370 5464 -7878.11 -676.835 -200.466 -139 1380 5463 -5503.8 587.133 -2151.02 -140 1390 5462 -7524.32 1502.61 -763.973 -141 1400 5461 -5811.6 -2757.66 4062.11 -142 1410 5460 -3956.87 1549.74 848.251 -143 1420 5459 1262.83 5565.03 -2006.7 -144 1430 5458 4536.8 3551.19 -4214.29 -145 1440 5457 2178.27 5769.29 -8042.15 -146 1450 5456 2732.57 7427.98 -10856.2 -147 1460 5455 -648.931 2846.2 -10812.3 -148 1470 5454 -1060.17 4419.64 -10000.5 -149 1480 5453 -932.436 422.882 -7129.85 -150 1490 5452 1647.2 4281.18 -7429.81 -151 1500 5451 -2971.01 1797.65 -3231.48 -152 1510 5450 -4802.36 2071.25 -885.201 -153 1520 5449 -2170.32 4194.58 3833.76 -154 1530 5448 -1545.6 4847.36 8694.94 -155 1540 5447 237.99 2439.78 8551.67 -156 1550 5446 1091.29 1624.43 6266.87 -157 1560 5445 3829.34 -6775.04 4589.58 -158 1570 5444 7456.43 -14080.3 1919.69 -159 1580 5443 5499.26 -17711.3 2108.04 -160 1590 5442 3596.62 -16602.8 669.16 -161 1600 5441 -682.304 -16179.6 1689.71 -162 1610 5440 -3015.22 -18293.6 7.26373 -163 1620 5439 -826.264 -16178.7 395.683 -164 1630 5438 5022.25 -14897.1 7475.17 -165 1640 5437 1298.34 -14236.8 6699.55 -166 1650 5436 -5390.39 -16810.6 5166.47 -167 1660 5435 -9447.76 -12373.4 4956.78 -168 1670 5434 -11477.4 -9762.14 4212.5 -169 1680 5433 -7458.9 -2062.15 7574.26 -170 1690 5432 -2563.6 2265.12 12.5599 -171 1700 5431 3030.76 1528.83 -1595.38 -172 1710 5430 73.8492 1031.11 3173.51 -173 1720 5429 1305 1222.85 1853.98 -174 1730 5428 1081.66 -412.107 1227.36 -175 1740 5427 4200.91 1919.26 2815.62 -176 1750 5426 169.124 2206.8 1695.73 -177 1760 5425 -5559.19 3839.84 3409.25 -178 1770 5424 -3310.25 2116.93 3443.71 -179 1780 5423 4854.88 -569.122 5647.18 -180 1790 5422 2874.36 -3295.19 7022.68 -181 1800 5421 370.982 -5479.36 3650.97 -182 1810 5420 -655.677 -2074.96 2883.62 -183 1820 5419 384.047 -1430.84 1582.61 -184 1830 5418 -5003.17 -3796.35 1999.05 -185 1840 5417 -11435 -5539.46 -2634.84 -186 1850 5416 -11226.3 -6344.51 -7223.64 -187 1860 5415 -7708.71 -8611.01 -9217.26 -188 1870 5414 -1600.05 -10292 -6526.39 -189 1880 5413 996.076 -10842.2 -7878 -190 1890 5412 -3494.13 -8198.09 -4716.85 -191 1900 5411 -11779.4 -10032.7 55.4691 -192 1910 5410 -12967.4 -4577.03 4416.52 -193 1920 5409 -6183.08 843.971 5585.3 -194 1930 5408 -6502.27 6695.74 5788.14 -195 1940 5407 158.414 14327 6980.64 -196 1950 5406 6344.39 16188.7 1185.71 -197 1960 5405 3969.69 12009.4 -3737.22 -198 1970 5404 5007.88 8598.26 -3870.85 -199 1980 5403 2702.53 15488.9 -1768.21 -200 1990 5402 2190.84 12747.6 -1154.35 -58000 200 -1 0 5801 385892 374658 387127 -2 10 5800 227048 218740 231555 -3 20 5799 121687 120604 121375 -4 30 5798 81478.9 82856.4 81487.6 -5 40 5797 65012.3 61343.2 60239.1 -6 50 5796 47658.5 40883 47658.2 -7 60 5795 30504.4 27691.1 36072.5 -8 70 5794 18867.4 25082 29768.8 -9 80 5793 16296.9 21430 21472.9 -10 90 5792 6839.32 15911.6 14537 -11 100 5791 -148.257 14622.1 9302.69 -12 110 5790 -1938.99 8925.07 5936.48 -13 120 5789 -2935.76 -906.624 5728.94 -14 130 5788 5380.46 -224.883 7078.62 -15 140 5787 5061.03 -2714.01 9442.05 -16 150 5786 -206.982 -9250.88 6877.77 -17 160 5785 2275.38 -11771.3 7159.48 -18 170 5784 11025.1 -11407.9 3407.08 -19 180 5783 11970 -11419.4 2357.85 -20 190 5782 9182.14 -8048.88 -1102.83 -21 200 5781 483.269 -4007.17 -2004.64 -22 210 5780 1271.9 -4098.99 -2477.23 -23 220 5779 3940.83 -8373.39 2024.11 -24 230 5778 7481.89 -12062.8 4211.58 -25 240 5777 -786.478 -10677.4 -1091.43 -26 250 5776 -3704.19 -6407.78 -4146.71 -27 260 5775 -687.053 -5343.92 -3387.51 -28 270 5774 3024.33 -1142.47 219.267 -29 280 5773 5350.61 3154.8 8751.9 -30 290 5772 8155.67 1057.66 8047.94 -31 300 5771 10964.9 -4552.75 6361.87 -32 310 5770 10058.7 -8828.47 7276.35 -33 320 5769 5931.43 -6393.54 8529.57 -34 330 5768 2175.99 -8639.15 8488.52 -35 340 5767 -3561.66 -4962.65 11667.9 -36 350 5766 400.59 -2732.32 16428.9 -37 360 5765 4049.77 -5859.8 17318 -38 370 5764 892.783 -9827.79 14130.6 -39 380 5763 -4094.06 -11982.3 11508.7 -40 390 5762 -6751.57 -6724.55 6780.14 -41 400 5761 -3094.71 -25.0063 5100.83 -42 410 5760 -5386.26 60.16 8662.27 -43 420 5759 -7392.74 3811.97 14934.7 -44 430 5758 -8477.28 6665.37 10694.1 -45 440 5757 -1399.43 3715.89 8015.77 -46 450 5756 -2000.6 4088.15 3540.82 -47 460 5755 -1291.59 11151.5 912.102 -48 470 5754 -196.908 15972.1 -4012.99 -49 480 5753 -499.671 15286.3 -4428.63 -50 490 5752 -1975.17 11408.5 -7207.94 -51 500 5751 1181.64 8070.61 -3206.45 -52 510 5750 3456.46 6666.95 -2502.4 -53 520 5749 9877.55 8070.38 -4126.6 -54 530 5748 7705.76 14345.9 -3137.05 -55 540 5747 3353.16 11681.2 132.282 -56 550 5746 -2636.64 7296.89 5336.23 -57 560 5745 -7457.62 6106.71 5813.16 -58 570 5744 -2345.87 5793.02 1995.61 -59 580 5743 672.563 4664.11 2596.41 -60 590 5742 1032.63 759.743 1152.92 -61 600 5741 -5109.08 -3501.94 -4623.49 -62 610 5740 -2143.57 -4654.18 -2476.99 -63 620 5739 3110.35 -5128.35 6475.24 -64 630 5738 2174.59 -4145.64 12673.3 -65 640 5737 3579.12 -4198.52 7825 -66 650 5736 3111.62 -3930.53 8124.44 -67 660 5735 -2893.02 -2665.46 8453.74 -68 670 5734 -7943.73 905.292 4235.3 -69 680 5733 -4738.36 -635.559 3729.8 -70 690 5732 -2241.7 -9947.66 4972.01 -71 700 5731 -1715.28 -8088.45 8224.11 -72 710 5730 -2877.91 -1684.49 9654.74 -73 720 5729 -2236.07 -2259.66 8766.24 -74 730 5728 4202.84 -3255.43 7468.69 -75 740 5727 9729.64 281.909 -1668.06 -76 750 5726 13780.6 -1591.23 -2112.38 -77 760 5725 15487.8 -2502.18 -5362.75 -78 770 5724 14612.8 107.583 -5333.77 -79 780 5723 13153.4 2123.45 2616.12 -80 790 5722 7295.3 1924.05 143.638 -81 800 5721 6580.69 -511.658 -2843 -82 810 5720 6027.22 -279.629 -7832.7 -83 820 5719 2006.14 1273.3 -10372.9 -84 830 5718 4508.9 2354.32 -7700.12 -85 840 5717 3756.73 4674.83 -6135.4 -86 850 5716 -2689.96 8534.63 1155.45 -87 860 5715 -3071.93 4474.72 6594.03 -88 870 5714 -4643.24 880.682 4084.26 -89 880 5713 608.435 4696.98 -856.757 -90 890 5712 4330.16 3221.7 1951.78 -91 900 5711 3127.79 -4364.43 6374.37 -92 910 5710 3250.9 -3989.16 4432.37 -93 920 5709 -654.695 3551.16 4020.99 -94 930 5708 569.239 14599.6 5867.14 -95 940 5707 -812.452 18073.6 5026.8 -96 950 5706 364.995 13110.2 8156.48 -97 960 5705 1546.23 7708.04 8528.9 -98 970 5704 -702.46 6953.76 10734.5 -99 980 5703 -4254.66 13620.6 12304.1 -100 990 5702 -5925.11 15661.6 7555.3 -101 1000 5701 -8645.33 17597 4676.91 -102 1010 5700 -1471.63 16772.6 7402.23 -103 1020 5699 5538.9 10437.6 3395.9 -104 1030 5698 6920.25 5560.72 -2794.22 -105 1040 5697 8160.22 727.055 -1301.9 -106 1050 5696 13603.8 -1231.56 -2109.62 -107 1060 5695 13763.8 -1470 -407.015 -108 1070 5694 11928.9 -5912.02 3343.8 -109 1080 5693 10047.4 -3214.57 9865.85 -110 1090 5692 12660.5 -1682.5 12827 -111 1100 5691 12257 -4808.84 7726.62 -112 1110 5690 11417.8 -2596.39 -2079.16 -113 1120 5689 9663.04 1621.44 -4123.25 -114 1130 5688 2776.62 2571.21 -6807.54 -115 1140 5687 1763.05 -3106.25 -9809.65 -116 1150 5686 4093.41 -1757.44 -8554.77 -117 1160 5685 4066.32 2415.17 -6674.72 -118 1170 5684 3086.48 5691.24 365.839 -119 1180 5683 -5066.25 5739.52 4386.73 -120 1190 5682 416.167 6857.76 603.836 -121 1200 5681 7492.47 9993.6 -316.273 -122 1210 5680 6107.42 12965.8 1961.31 -123 1220 5679 2013.85 6661.48 5504.29 -124 1230 5678 3821.84 5067.19 7096.6 -125 1240 5677 7119.51 1135.03 5781.62 -126 1250 5676 15248.7 2601.43 -655.081 -127 1260 5675 22478.2 4624.15 -2909.36 -128 1270 5674 16425.7 4317.33 -1923.08 -129 1280 5673 11982.7 6318.03 -3110.56 -130 1290 5672 1050.54 -1475.67 -4500.56 -131 1300 5671 -1503.27 -2209.12 -4489.34 -132 1310 5670 -3284.87 -894.706 -12339.5 -133 1320 5669 487.286 200.009 -14897 -134 1330 5668 2573.91 497.238 -10802.4 -135 1340 5667 2735.41 5954.97 -313.89 -136 1350 5666 753.119 10423.3 4335.65 -137 1360 5665 -3015.9 4274.81 5597.56 -138 1370 5664 -6816.24 -826.932 -1005.82 -139 1380 5663 -4512.57 -15.7815 -2371.06 -140 1390 5662 -6963.1 801.682 840.695 -141 1400 5661 -5791.84 -3318.63 5794.71 -142 1410 5660 -3841.49 1051.74 2266.45 -143 1420 5659 1115.37 4736.32 469.108 -144 1430 5658 4319.07 2730.04 -1792.57 -145 1440 5657 1002.53 5087.09 -6179.53 -146 1450 5656 2137.87 7279.36 -9678.73 -147 1460 5655 -1506.68 3389.3 -9357.59 -148 1470 5654 -2671.7 5096.37 -9246.13 -149 1480 5653 -3393.2 2648.98 -7528.46 -150 1490 5652 -213.048 6922.95 -8837.74 -151 1500 5651 -3380.82 4083.68 -6261.33 -152 1510 5650 -4392.78 4058.06 -4686.5 -153 1520 5649 -1890.52 4991.26 136.442 -154 1530 5648 -558.948 4618.18 5878.24 -155 1540 5647 2720.91 1244.9 6144.11 -156 1550 5646 3539.82 129.53 5047.06 -157 1560 5645 5693.46 -7147.76 3493.63 -158 1570 5644 8160.03 -13736.8 1391.01 -159 1580 5643 5730.7 -16804.6 1660.23 -160 1590 5642 3295.88 -15016.4 -306.398 -161 1600 5641 -2236.11 -14762.7 1460.87 -162 1610 5640 -4453 -17599.9 419.825 -163 1620 5639 -1601.51 -16815.7 767.831 -164 1630 5638 4460.02 -15968.2 7419.47 -165 1640 5637 395.576 -15607.4 7842.33 -166 1650 5636 -5408.45 -18282.7 5663.64 -167 1660 5635 -8430.09 -13535.9 4157.22 -168 1670 5634 -10069.7 -10986.5 2467.77 -169 1680 5633 -5579.91 -3573.11 5088.14 -170 1690 5632 -656.519 1604.61 -1605 -171 1700 5631 3406.29 959.85 -2361.97 -172 1710 5630 869.864 1201.19 2453.02 -173 1720 5629 2913.25 1394.09 2066.82 -174 1730 5628 2518.62 -121.642 1423.05 -175 1740 5627 4831.96 2835.35 2646.3 -176 1750 5626 -563.519 3075.57 992.429 -177 1760 5625 -6637.03 3799.5 2155.15 -178 1770 5624 -5532.67 1864.58 1510.9 -179 1780 5623 2160.29 -1527.52 3998.81 -180 1790 5622 1296.21 -3870.59 6786.01 -181 1800 5621 -663.071 -5837.53 2689.82 -182 1810 5620 -715.694 -1414.8 792.416 -183 1820 5619 1434.16 -340.562 442.199 -184 1830 5618 -3501.6 -2378.88 833.395 -185 1840 5617 -9438.68 -4196.24 -5238.55 -186 1850 5616 -8520.78 -5229.9 -11250.8 -187 1860 5615 -5329.54 -6835.42 -12359 -188 1870 5614 -1397.44 -9560.17 -8073.02 -189 1880 5613 -647.06 -10553.1 -9326.43 -190 1890 5612 -6217.58 -7833.84 -6920 -191 1900 5611 -14034.8 -9470.79 -897.641 -192 1910 5610 -14946.4 -3692.18 4235.65 -193 1920 5609 -8555.17 1740.03 5412.49 -194 1930 5608 -9141.96 7586.75 4993.37 -195 1940 5607 -2096.9 14409.4 5793.13 -196 1950 5606 4408.11 15573.8 1097.04 -197 1960 5605 2801.8 11554 -3038.14 -198 1970 5604 3628.04 8184.15 -2831.8 -199 1980 5603 2180.91 15444.3 -120.006 -200 1990 5602 2088.49 14302.9 314.998 -60000 200 -1 0 6001 386906 374671 388121 -2 10 6000 228073 218357 232913 -3 20 5999 121461 120400 123496 -4 30 5998 80301.6 82357.4 82566.7 -5 40 5997 63464.1 60499.2 60585.7 -6 50 5996 45918.2 40011.3 47975.7 -7 60 5995 28793.6 27442.5 36894.9 -8 70 5994 18181.8 24947.2 30037.2 -9 80 5993 16404.3 20959.8 21963.1 -10 90 5992 6403.86 15797.9 15832 -11 100 5991 -875.522 15045.9 11161.8 -12 110 5990 -2204.65 9708.24 7265.58 -13 120 5989 -3707.8 136.912 5608.34 -14 130 5988 2099.82 179.56 6990.35 -15 140 5987 1574.91 -2726.03 9199.49 -16 150 5986 -2269.4 -7975.86 7337.14 -17 160 5985 617.421 -10217.5 8340.36 -18 170 5984 9862.26 -11178.8 4572.57 -19 180 5983 11448.6 -11211.9 3863.49 -20 190 5982 9512.64 -8011.91 -104.099 -21 200 5981 1739.28 -3851.18 -1463.19 -22 210 5980 1482.85 -3014.07 -2781.17 -23 220 5979 3945.25 -7510.28 260.394 -24 230 5978 7482.2 -11658.5 1949.58 -25 240 5977 -716.465 -11636.1 -2744.65 -26 250 5976 -4212.2 -6816.94 -5687.98 -27 260 5975 -1227.96 -5281.57 -4884.09 -28 270 5974 2560.23 -277.126 -863.149 -29 280 5973 5612.83 4944.6 7657.31 -30 290 5972 7926.76 2487.81 7263.76 -31 300 5971 9688.39 -3669.12 5184.28 -32 310 5970 8828.28 -7473.92 5830.95 -33 320 5969 5319.26 -5586.06 6482.31 -34 330 5968 3104.04 -8208.07 7221.96 -35 340 5967 -1832.13 -4128.01 11194.4 -36 350 5966 2291.67 -1886.03 15327.5 -37 360 5965 5661.91 -4126.75 15786.5 -38 370 5964 2710.65 -6947.31 12611.9 -39 380 5963 -1897.98 -9494.14 10030.5 -40 390 5962 -4965.11 -4654.89 5585.42 -41 400 5961 -2148.93 1824.42 3420.36 -42 410 5960 -5737 989.333 6011.68 -43 420 5959 -9004.97 3372.72 12424.6 -44 430 5958 -10417.8 6608.26 8729.67 -45 440 5957 -4172.11 4545.64 7006.4 -46 450 5956 -5058.34 4348.6 3504.53 -47 460 5955 -3914.72 11506.5 700.453 -48 470 5954 -2320.94 16588.6 -4004.98 -49 480 5953 -1457.65 14998.6 -4067.86 -50 490 5952 -2211.03 11250.3 -6346.53 -51 500 5951 506.86 8361.18 -2434.1 -52 510 5950 1993.12 6958.23 -744.022 -53 520 5949 9028.38 8956.56 -980.685 -54 530 5948 7989.15 15348.7 882.528 -55 540 5947 3470.21 12600.6 3239.06 -56 550 5946 -2257.27 7639.26 7975.66 -57 560 5945 -5908.16 6572.48 7247.38 -58 570 5944 -733.144 5906.6 3525.47 -59 580 5943 1703.74 4654.59 4419.33 -60 590 5942 1232.28 1300.39 2986.9 -61 600 5941 -4841.93 -3069.52 -2499.07 -62 610 5940 -2406.17 -5249.93 87.7569 -63 620 5939 1617.75 -5290.62 9469.94 -64 630 5938 947.61 -3648.4 16219.4 -65 640 5937 3792.06 -3192.92 11667.6 -66 650 5936 3835.83 -1604.02 11328.8 -67 660 5935 -2953.68 -543.781 10629.1 -68 670 5934 -8729.41 2559.74 6278.68 -69 680 5933 -5463.58 263.422 5911.28 -70 690 5932 -3530.2 -9879.77 7792.16 -71 700 5931 -2628.76 -9371.66 11741.8 -72 710 5930 -2821.76 -3918.15 14222 -73 720 5929 -1191.77 -3473.24 12671.9 -74 730 5928 6125.73 -3638.93 10362.5 -75 740 5927 11376.7 437.923 772.51 -76 750 5926 15416 -808.713 -698.854 -77 760 5925 16795.4 -2111.12 -4538 -78 770 5924 15289.5 -578.277 -4426.02 -79 780 5923 12403.3 411.28 2734.7 -80 790 5922 5405.72 -48.1067 1398.55 -81 800 5921 3791.37 -1416.4 -552.822 -82 810 5920 3053.05 -518.592 -5182.96 -83 820 5919 -16.9667 -83.6348 -7626.8 -84 830 5918 3472.07 1224.29 -5583.63 -85 840 5917 3462.37 4344.52 -4542.86 -86 850 5916 -1577.68 8144.94 1279.35 -87 860 5915 -2469.63 4104.11 6064.6 -88 870 5914 -4550.05 234.262 3649.25 -89 880 5913 161.442 3509.35 -1093.22 -90 890 5912 3001.76 912.453 1455.29 -91 900 5911 1006.16 -6437.2 6048.22 -92 910 5910 1713.73 -4815.41 3924.68 -93 920 5909 -1053.5 2858.4 3774.53 -94 930 5908 1359.87 14187.7 5299 -95 940 5907 123.462 17822.6 3672.35 -96 950 5906 438.221 13136.6 6130.03 -97 960 5905 1329.22 7658.45 5934.02 -98 970 5904 -1399.21 6114.49 8964.58 -99 980 5903 -6068.77 11860.3 11596.9 -100 990 5902 -7328.06 13523.6 7328.69 -101 1000 5901 -10437 15157.9 3963.12 -102 1010 5900 -3425.77 14938.6 6055.68 -103 1020 5899 3818.97 9630.78 2187.4 -104 1030 5898 6243.28 5812.63 -4889 -105 1040 5897 7260.92 1314.84 -3330.85 -106 1050 5896 12947.5 -824.115 -4194.32 -107 1060 5895 12940.9 -1369.5 -3110.36 -108 1070 5894 10931.4 -5706.29 1057.48 -109 1080 5893 8965.19 -4339.53 8299.06 -110 1090 5892 10497.2 -2503.83 10942 -111 1100 5891 10365 -5673.35 6573.14 -112 1110 5890 11102.5 -3858.28 -2484.96 -113 1120 5889 9738 863.744 -4419.13 -114 1130 5888 3744.2 2642.53 -6220.6 -115 1140 5887 2715.67 -2565.59 -8864.79 -116 1150 5886 3862.17 -1636.88 -7114.81 -117 1160 5885 3034.99 2557.01 -4877.01 -118 1170 5884 1633.01 6102.03 1833.42 -119 1180 5883 -5515.33 6362.5 5714.94 -120 1190 5882 1344.28 7644.51 1583.81 -121 1200 5881 8385.33 10994.2 -142.278 -122 1210 5880 7782.87 14538.4 919.597 -123 1220 5879 4979.37 8231.86 4698.35 -124 1230 5878 6635.56 5340.64 6391.78 -125 1240 5877 9044.46 782.545 5014.58 -126 1250 5876 16653.8 2714.4 -1271.19 -127 1260 5875 23219.6 4008.21 -2893.74 -128 1270 5874 16353.3 3660.36 -1284.47 -129 1280 5873 11632.7 6838.35 -2353.02 -130 1290 5872 1007.56 -676.856 -3318.21 -131 1300 5871 -1294.39 -2189.02 -4523.44 -132 1310 5870 -2006.38 -1050.51 -11859.2 -133 1320 5869 1397.81 709.295 -12805.6 -134 1330 5868 2885.8 229.978 -8050.07 -135 1340 5867 2323.42 4350.09 2608.3 -136 1350 5866 -521.673 9143.61 6618.29 -137 1360 5865 -4032.26 3177.66 6985.18 -138 1370 5864 -8072.47 -1182.69 -233.76 -139 1380 5863 -6171.18 -142.842 -2511.45 -140 1390 5862 -8391.51 1612.26 -313.25 -141 1400 5861 -6666.37 -1723.95 4073.86 -142 1410 5860 -4341.73 2553.57 1195.27 -143 1420 5859 300.053 5511.7 238.814 -144 1430 5858 3733.23 2563.01 -1351.08 -145 1440 5857 218.096 4378.6 -4789.79 -146 1450 5856 768.289 6312.32 -7764.61 -147 1460 5855 -2742.52 2652.15 -8294.25 -148 1470 5854 -3476.25 4663.15 -8956.97 -149 1480 5853 -4184.42 2127 -8461.3 -150 1490 5852 -1208.71 6060.15 -10108.9 -151 1500 5851 -4079.77 3799.51 -6826.92 -152 1510 5850 -4689.18 3676.46 -5116.43 -153 1520 5849 -2260.67 3689.71 98.0009 -154 1530 5848 -940.231 3331.02 5770.95 -155 1540 5847 2579.32 -1045.27 5362.81 -156 1550 5846 4140.38 -1837.07 3534.47 -157 1560 5845 6904.73 -8058.3 1911.7 -158 1570 5844 10137.2 -14508.3 -777.028 -159 1580 5843 8365.39 -17403.6 -636.143 -160 1590 5842 6552.1 -15566.1 -2024.12 -161 1600 5841 1045.16 -14548.5 100.178 -162 1610 5840 -1835.58 -16867.8 -583.517 -163 1620 5839 -576.47 -15863.9 -170.14 -164 1630 5838 4259.48 -15556.6 6621.93 -165 1640 5837 101.921 -15720.7 6987.44 -166 1650 5836 -5774.96 -18181.1 5395.74 -167 1660 5835 -9467.25 -12812.1 4295.71 -168 1670 5834 -11156 -9909.4 3277.05 -169 1680 5833 -6967.06 -2974.3 5325.59 -170 1690 5832 -2749.07 3142.24 -1433.01 -171 1700 5831 18.754 2270.08 -2651.41 -172 1710 5830 -1742.09 1865.13 1788.25 -173 1720 5829 1302.63 1915.94 1254.1 -174 1730 5828 1045.86 -98.1763 511.974 -175 1740 5827 3462.6 1220.37 1565.08 -176 1750 5826 -930.599 268.821 -616.096 -177 1760 5825 -5899.92 1271.53 237.55 -178 1770 5824 -5006.13 602.92 314.338 -179 1780 5823 2098.57 -2546.62 3447.89 -180 1790 5822 1369.04 -4436.15 6796.43 -181 1800 5821 -26.9448 -5497.77 3100.25 -182 1810 5820 -316.171 8.43517 928.659 -183 1820 5819 1177.5 941.813 1578.25 -184 1830 5818 -3777.71 -1689.45 1886.29 -185 1840 5817 -8038.09 -4557.58 -4629.01 -186 1850 5816 -6664.72 -5650.69 -9866.72 -187 1860 5815 -3594.67 -7189.2 -11337.5 -188 1870 5814 -85.4936 -9584.94 -6766.91 -189 1880 5813 255.76 -10089.2 -8250.35 -190 1890 5812 -4804.41 -7076.95 -6020.55 -191 1900 5811 -11800.1 -9086.52 -1164.24 -192 1910 5810 -12457.2 -4237.95 2603.5 -193 1920 5809 -6266.42 1331.2 3252.75 -194 1930 5808 -6709.83 6847.3 2638.82 -195 1940 5807 -119.946 12857.2 3034.31 -196 1950 5806 5621.67 13135.2 -1129.28 -197 1960 5805 4463.22 9265.79 -4975.67 -198 1970 5804 4967.84 6071.32 -4124.39 -199 1980 5803 2538.77 13815.5 398.792 -200 1990 5802 936.608 13213.2 1476.28 -62000 200 -1 0 6201 388563 376192 386944 -2 10 6200 228848 219421 231662 -3 20 6199 122134 121636 122048 -4 30 6198 81261 84127.7 80874.1 -5 40 6197 62887 62194.6 59356.9 -6 50 6196 43961.1 40798 46749.1 -7 60 6195 27227 28186.3 36033.6 -8 70 6194 16255.6 25426.1 29421.7 -9 80 6193 12753.9 21300.1 22248.2 -10 90 6192 2718.68 16065.2 16221.9 -11 100 6191 -3360.09 15702.5 11205.2 -12 110 6190 -4329.1 10072.9 7634 -13 120 6189 -5119.47 214.37 5942.79 -14 130 6188 1123.36 564.416 6908.64 -15 140 6187 629.559 -3058.55 9009.59 -16 150 6186 -1862.5 -8387.05 7110.7 -17 160 6185 770.437 -10813.9 7944.29 -18 170 6184 9975.37 -11591.7 4776.73 -19 180 6183 11830.2 -11925 4612.6 -20 190 6182 8915.54 -8994.23 183.119 -21 200 6181 584.487 -4982.48 -1695.89 -22 210 6180 -0.452414 -3787.24 -2809.74 -23 220 6179 2755.26 -7109.59 1030.58 -24 230 6178 6316.13 -10976.3 1699.85 -25 240 6177 -1746.18 -10919.2 -3638.15 -26 250 6176 -5218.47 -5978.22 -5830.58 -27 260 6175 -2228.71 -3977.21 -4558.68 -28 270 6174 1727.71 668.497 -626.437 -29 280 6173 5319.35 4810.58 7745.64 -30 290 6172 7166.57 1865.43 7364.82 -31 300 6171 8485.18 -3788.06 6211.46 -32 310 6170 7512.9 -7229.85 6052.24 -33 320 6169 4308.13 -5556.76 6163.46 -34 330 6168 3931.6 -9302.68 6913.38 -35 340 6167 -233.927 -6118.52 10867 -36 350 6166 4796.35 -3272.52 14403 -37 360 6165 8787 -5298.92 14970.4 -38 370 6164 4892.8 -7955.29 10163.7 -39 380 6163 123.767 -10651.9 7913.73 -40 390 6162 -2418.63 -4637.18 4034.81 -41 400 6161 399.234 2075.07 1858.86 -42 410 6160 -3597.94 782.786 4962.68 -43 420 6159 -8047.37 3214.35 10615.1 -44 430 6158 -10047.8 6715.77 7397.74 -45 440 6157 -5298.86 3971.03 6855.13 -46 450 6156 -7235.99 3640.81 4389.77 -47 460 6155 -7319.83 10656.1 411.818 -48 470 6154 -6376.23 15878.2 -3758.69 -49 480 6153 -5736.22 13777.5 -3543.38 -50 490 6152 -6465.69 9995.27 -5891.8 -51 500 6151 -2143 8049.51 -2460.23 -52 510 6150 917.01 6708.31 -49.1049 -53 520 6149 8548.48 9649.58 -562.099 -54 530 6148 8390.61 16957.4 -349.385 -55 540 6147 4361.78 14367 937.432 -56 550 6146 -1464.74 8985.53 6105.03 -57 560 6145 -5106.71 8230.82 6373.94 -58 570 6144 -827.316 6546.31 3321.38 -59 580 6143 1273.7 4491.04 4495.91 -60 590 6142 847.645 -108.483 3960.93 -61 600 6141 -5317.54 -4989.17 -597.096 -62 610 6140 -1890.77 -7580.47 1178.36 -63 620 6139 2259.16 -7071.68 8888.22 -64 630 6138 1263.77 -4908.07 15614.9 -65 640 6137 3148.59 -4535.04 11309.2 -66 650 6136 3578.58 -3515.82 11333.7 -67 660 6135 -2818.89 -1020.74 11014.6 -68 670 6134 -7941.8 2275.22 7176.23 -69 680 6133 -4004.82 -722.875 6195.33 -70 690 6132 -1670.72 -10131 7418.18 -71 700 6131 -1687.12 -9898.44 11229.1 -72 710 6130 -2155.1 -5026.81 12709.3 -73 720 6129 -635.418 -4784.83 10905.7 -74 730 6128 5636.01 -5284 9056.38 -75 740 6127 10548.2 -888.05 408.677 -76 750 6126 14366.5 -1309.27 -681.37 -77 760 6125 16462 -2523.44 -4875.75 -78 770 6124 15135.4 -913.485 -3900.2 -79 780 6123 12468.8 630.256 3796.61 -80 790 6122 5329.7 1711.08 2688.19 -81 800 6121 3383.82 190.054 704.516 -82 810 6120 2991.26 634.256 -3945.55 -83 820 6119 191.688 1235.42 -7478.86 -84 830 6118 3822.31 1710.18 -5804.27 -85 840 6117 3760.9 3274.03 -5194.02 -86 850 6116 -2023.03 6281.33 983.046 -87 860 6115 -3214.14 1761.35 6221.59 -88 870 6114 -4222.43 -2365.48 3186.71 -89 880 6113 -507.378 356.79 -1908.71 -90 890 6112 1595.32 -1516.7 517.694 -91 900 6111 -810.284 -8728.34 5565.33 -92 910 6110 314.037 -8348.26 4010.53 -93 920 6109 -2388.08 193.58 4028.75 -94 930 6108 613.166 11862.3 6079.01 -95 940 6107 468.807 14988.2 3863.76 -96 950 6106 1132.67 10114.3 6725.33 -97 960 6105 3297.82 4993.52 7402.46 -98 970 6104 1735.18 4615.45 10207.3 -99 980 6103 -4028.67 10686 12033.7 -100 990 6102 -5563.18 12387 8636.3 -101 1000 6101 -8527.19 13917.3 5185.66 -102 1010 6100 -2707.6 13714.8 6847.45 -103 1020 6099 3749.45 8520.32 2731.11 -104 1030 6098 6610.01 5607.19 -5043.65 -105 1040 6097 7909.57 1428.67 -3335.34 -106 1050 6096 13031.7 555.698 -4599.16 -107 1060 6095 12154.1 697.924 -3436.03 -108 1070 6094 9833.24 -2451.73 824.749 -109 1080 6093 7104.26 -1760.35 8288.24 -110 1090 6092 8603.3 -151.43 10831.7 -111 1100 6091 8583.8 -4231.53 6960.04 -112 1110 6090 9327.95 -3225.08 -1719.23 -113 1120 6089 8324.76 542.197 -3857.21 -114 1130 6088 2036.43 2390.42 -5774.25 -115 1140 6087 1067.57 -1777.14 -8868.47 -116 1150 6086 3991.83 -340.351 -6395.78 -117 1160 6085 3276.06 3924.34 -4815.15 -118 1170 6084 1592.23 6723.44 1781.38 -119 1180 6083 -4961.17 5784.11 6205.8 -120 1190 6082 1613.74 7439.58 2757.45 -121 1200 6081 8157.14 11683.3 496.638 -122 1210 6080 7592.59 14407.5 1118.92 -123 1220 6079 5729.22 9742.85 4013.21 -124 1230 6078 7723.04 7319.1 5042.69 -125 1240 6077 9618.6 2692.92 3955.18 -126 1250 6076 16673.2 5208.8 -1504.47 -127 1260 6075 21897.3 6976.34 -2507.35 -128 1270 6074 15451.3 5996.29 -642.977 -129 1280 6073 10202.4 8680.33 -743.53 -130 1290 6072 -2396.01 2105.8 -1146.76 -131 1300 6071 -5177.37 446.875 -2657.51 -132 1310 6070 -5590.26 854.388 -10317.4 -133 1320 6069 -1470.11 3141.12 -12450.3 -134 1330 6068 798.151 3475.89 -8808.36 -135 1340 6067 816.244 6666.46 1153.46 -136 1350 6066 -1486.79 10443.8 6511.05 -137 1360 6065 -4487.21 4276.04 7062.48 -138 1370 6064 -7139.09 -147.156 304.403 -139 1380 6063 -4629.66 496.162 -2078.45 -140 1390 6062 -6590.78 1556.49 -1022.03 -141 1400 6061 -4145.82 -2553.57 3833.8 -142 1410 6060 -2315.94 1302.5 1409.51 -143 1420 6059 1397.66 4080.57 46.8163 -144 1430 6058 4447.36 675.696 -1291.17 -145 1440 6057 228.723 2804.52 -4169.42 -146 1450 6056 850.262 5430.31 -6681.72 -147 1460 6055 -925.864 3027.16 -6315.83 -148 1470 6054 -1683.97 4434.78 -7080.66 -149 1480 6053 -3080.69 2265.72 -7171.56 -150 1490 6052 -68.3817 6735.59 -8777.04 -151 1500 6051 -2249.92 4773.16 -6747.87 -152 1510 6050 -3541.5 4365.02 -4146.93 -153 1520 6049 -601.185 4463.05 71.794 -154 1530 6048 647.537 4544.26 5324.86 -155 1540 6047 3892.22 336.913 4154.11 -156 1550 6046 5423.53 -1681.14 2287.48 -157 1560 6045 7571.41 -7800.45 605.007 -158 1570 6044 10251.5 -14025.3 -1787.61 -159 1580 6043 9740.73 -17451.2 -1531.89 -160 1590 6042 7705.06 -14618.9 -1950.02 -161 1600 6041 2173.45 -12602.2 624.474 -162 1610 6040 -592.984 -13969.6 -199.829 -163 1620 6039 -858.817 -13830.6 1083.11 -164 1630 6038 2531.42 -13375.8 7559.83 -165 1640 6037 -2734.52 -14031.6 7594.15 -166 1650 6036 -8492.24 -17060.7 5060.87 -167 1660 6035 -11467.8 -12922.1 3835.18 -168 1670 6034 -13438.6 -9632.42 2823.01 -169 1680 6033 -9150.59 -2490.99 4287.76 -170 1690 6032 -5217.57 4457.19 -2272.41 -171 1700 6031 -2037.63 3299.49 -2699.14 -172 1710 6030 -3474.71 2575.96 2290.09 -173 1720 6029 -665.049 2814.45 1540.33 -174 1730 6028 -539.616 968.51 753.277 -175 1740 6027 2379.61 1749.73 1040.88 -176 1750 6026 -432.163 410.085 -1920.17 -177 1760 6025 -4107.63 2314.22 -737.507 -178 1770 6024 -3153.96 1998.12 -139.625 -179 1780 6023 3840.35 -637.744 3161.52 -180 1790 6022 3562.8 -1672.1 7954.01 -181 1800 6021 3136.42 -2595.23 6118.23 -182 1810 6020 3545.45 3046.49 4380.82 -183 1820 6019 5069.09 4523.75 4575.4 -184 1830 6018 -724.822 2015.45 3240.4 -185 1840 6017 -6517 -1680.01 -4820.17 -186 1850 6016 -6398.64 -3772.74 -10244.4 -187 1860 6015 -3332.3 -4747.88 -11907.8 -188 1870 6014 -419.551 -8657.7 -7425.81 -189 1880 6013 -24.7108 -8872.19 -7304.08 -190 1890 6012 -5628.95 -5199.27 -4860.33 -191 1900 6011 -12217.4 -7533.32 -288.052 -192 1910 6010 -12600.3 -3142.9 2661.75 -193 1920 6009 -6144.44 2592.77 3465.58 -194 1930 6008 -5958.03 7095.65 3007.56 -195 1940 6007 1181.2 12343.6 4824.17 -196 1950 6006 5323.59 12071.1 1091.25 -197 1960 6005 3859.83 7477.47 -2532.12 -198 1970 6004 4865.11 2840.95 -2873.28 -199 1980 6003 2423.9 9549.41 723.873 -200 1990 6002 1359.2 9509.61 1974.71 -64000 200 -1 0 6401 391618 376196 384353 -2 10 6400 231087 219500 229660 -3 20 6399 122855 121468 120945 -4 30 6398 80952.7 83926.8 80405.6 -5 40 6397 61795.6 62679.8 59212.9 -6 50 6396 41757.2 41742.7 46191.5 -7 60 6395 24119.5 30132.2 34327.3 -8 70 6394 13863.4 26806.4 27905 -9 80 6393 11336.2 21723.6 21327.9 -10 90 6392 1435.97 15309.2 16062.6 -11 100 6391 -5849.91 14731.4 10784 -12 110 6390 -7476.88 9845.73 6624.73 -13 120 6389 -7742.28 1246.06 5376.13 -14 130 6388 -1955.04 1826.26 6815.06 -15 140 6387 -2262.73 -2555.59 8596.06 -16 150 6386 -3533.91 -8312.55 6293.6 -17 160 6385 1271.61 -11943.9 7292.55 -18 170 6384 11845.9 -13270.9 5058.61 -19 180 6383 13697.2 -13937.6 5384.4 -20 190 6382 10967.4 -9856.98 871.62 -21 200 6381 2954.89 -5910.46 -1422.42 -22 210 6380 1992.56 -4293.3 -2509.52 -23 220 6379 3854.82 -7584.28 540.416 -24 230 6378 6328.14 -11208.5 919.577 -25 240 6377 -2681.3 -11498.3 -4372.44 -26 250 6376 -6901.85 -6623.81 -6224.99 -27 260 6375 -3994.54 -3738.56 -3910.36 -28 270 6374 774.704 1166.76 426.735 -29 280 6373 4328.92 4493.61 8907.61 -30 290 6372 6685.19 1209.63 8494.79 -31 300 6371 6926.58 -4719.02 6590.15 -32 310 6370 4644.73 -8098.96 6359.29 -33 320 6369 1183.72 -5781.49 6473.02 -34 330 6368 1669 -8888.83 7554.99 -35 340 6367 -965.058 -6287.16 10896.4 -36 350 6366 5796.07 -4161.56 13718.2 -37 360 6365 10096.8 -5973.25 14088.4 -38 370 6364 7042.04 -8210.42 9141.59 -39 380 6363 2123.18 -10377.9 6913.89 -40 390 6362 -641.991 -4052.81 3077.8 -41 400 6361 1705.74 1545.5 292.655 -42 410 6360 -3689.31 -2.59564 3449.96 -43 420 6359 -7726.92 2204.14 9497.92 -44 430 6358 -9241.43 6169.32 6974.51 -45 440 6357 -5158.86 3336.82 6127.5 -46 450 6356 -7624.73 3367.53 3478.61 -47 460 6355 -8194.83 10882.4 1008.14 -48 470 6354 -7518.32 16125.5 -2751.94 -49 480 6353 -7280.21 13401.1 -3294.67 -50 490 6352 -8371.59 9690.58 -7134.92 -51 500 6351 -4466.11 7043.59 -4127.99 -52 510 6350 -1335.86 6197.42 -1066.27 -53 520 6349 5905.42 9646.33 -1631.34 -54 530 6348 5594.6 16824.3 -2008.48 -55 540 6347 2861.38 13780.8 301.154 -56 550 6346 -2124.76 7769.91 6427.53 -57 560 6345 -5590.67 6395.42 7332.77 -58 570 6344 -1017.72 4047.3 2833.63 -59 580 6343 1726.72 3236.18 3204.17 -60 590 6342 1792.34 -407.139 3346.85 -61 600 6341 -4313.65 -5740.81 -548.137 -62 610 6340 -506.793 -9626.17 757.991 -63 620 6339 5004.97 -8765.47 8300.55 -64 630 6338 5120.58 -6685.78 14858.3 -65 640 6337 7138.29 -6627.45 11829.1 -66 650 6336 6863.61 -4436.58 12041 -67 660 6335 487.172 -901.886 10853.5 -68 670 6334 -5295.77 1688.03 6761.37 -69 680 6333 -3965.29 -1170.04 5965 -70 690 6332 -2318.1 -9874.64 7055.33 -71 700 6331 -1695.69 -8906.98 9910.47 -72 710 6330 -2045.63 -3783.96 10948.7 -73 720 6329 -1436.06 -3238.27 10377.7 -74 730 6328 4466.24 -3786.41 8829.8 -75 740 6327 9579.59 -114.751 584.54 -76 750 6326 12742.8 -1105.77 -645.586 -77 760 6325 13814.4 -1331.25 -4666.51 -78 770 6324 13499.1 400.481 -3863.29 -79 780 6323 12380.5 1761.92 3166.15 -80 790 6322 6620.58 2446.6 2154.76 -81 800 6321 4383.39 1172.72 173.778 -82 810 6320 3575.92 1461.96 -4266.56 -83 820 6319 1125.93 2035.64 -6894.56 -84 830 6318 4686.36 1593.33 -5619.36 -85 840 6317 4280.88 2841.99 -4448.71 -86 850 6316 -2413.13 5341.36 1807.22 -87 860 6315 -3101.7 941.612 6478.01 -88 870 6314 -4700.25 -4145.25 2682.05 -89 880 6313 -2776.78 -2372.92 -2879.79 -90 890 6312 -2410.49 -3076.17 -1202.38 -91 900 6311 -4482.83 -9503.59 3790.29 -92 910 6310 -2761.05 -8217.12 3396.54 -93 920 6309 -5403.74 773.182 3752.33 -94 930 6308 -2071.04 12017.3 5581.79 -95 940 6307 -286.298 15496.9 2917.72 -96 950 6306 1279.03 10975.1 6133.73 -97 960 6305 4256.62 5538.67 6904.69 -98 970 6304 2786.58 5576.65 9698.37 -99 980 6303 -2026.94 11173.3 12075.3 -100 990 6302 -2862.33 12961.2 8207.94 -101 1000 6301 -5180.37 14810.3 4714.28 -102 1010 6300 908.516 14362.5 6118.48 -103 1020 6299 6896.98 9593.6 2591.48 -104 1030 6298 9314.16 6893.59 -4608.08 -105 1040 6297 10383.9 3723.62 -3523.68 -106 1050 6296 14198.5 3230.09 -5041.56 -107 1060 6295 12172.2 3167.21 -3589.71 -108 1070 6294 9744.85 -308.952 971.411 -109 1080 6293 5991.86 -3.82135 8121.47 -110 1090 6292 6104.79 793.401 10832.2 -111 1100 6291 5108.72 -3538.08 7829.44 -112 1110 6290 5690.02 -2563.93 290.07 -113 1120 6289 4661.15 1345.53 -1806.14 -114 1130 6288 -1085.68 3334.48 -4212.53 -115 1140 6287 -1422.58 -1173.01 -8070.85 -116 1150 6286 2637.22 679.438 -5179.69 -117 1160 6285 3422.7 4755.93 -3819.56 -118 1170 6284 2279.97 6997.09 859.285 -119 1180 6283 -3803.33 6600.77 4929.25 -120 1190 6282 2587.16 8934.97 2355.58 -121 1200 6281 9152.57 12564.7 560.466 -122 1210 6280 9955.54 15147.6 631.735 -123 1220 6279 7911.99 10562.6 3057.85 -124 1230 6278 9877.13 8632.48 4061.5 -125 1240 6277 10612.5 3787.71 3844.7 -126 1250 6276 17643.3 7405.68 -922.538 -127 1260 6275 21814.8 9351.32 -2480.84 -128 1270 6274 15488.2 7985.18 -438.454 -129 1280 6273 11110.8 10277.7 364.466 -130 1290 6272 -971.729 3802.36 566.554 -131 1300 6271 -4542.88 1933.4 -944.333 -132 1310 6270 -5794.28 2021.96 -8606.65 -133 1320 6269 -1406.72 3657 -10877.5 -134 1330 6268 1492.77 3385.29 -7562.66 -135 1340 6267 1437.7 6011.59 1043.37 -136 1350 6266 -1530.11 9380.37 4590.32 -137 1360 6265 -4683.28 3552.86 4952.35 -138 1370 6264 -6227.39 -1164.03 -1429.07 -139 1380 6263 -2225.84 87.7867 -3008.64 -140 1390 6262 -4699.67 1103.82 -1152.36 -141 1400 6261 -2137.11 -3717.55 4152.4 -142 1410 6260 -442.655 145.307 1785.61 -143 1420 6259 2440.17 3752.61 1097.44 -144 1430 6258 3830.42 547.99 -628.848 -145 1440 6257 -781.112 2263.42 -3441.79 -146 1450 6256 823.97 5393.95 -6315.51 -147 1460 6255 -2203.77 3363.44 -5701.88 -148 1470 6254 -4121.02 4982.96 -5623.1 -149 1480 6253 -5546.2 3440.1 -6622.11 -150 1490 6252 -2386.06 7907.39 -8983.38 -151 1500 6251 -3984.06 5204.32 -6958.65 -152 1510 6250 -6147.83 4853.21 -3820.71 -153 1520 6249 -4182.24 5366.5 444.789 -154 1530 6248 -3671.71 5301.96 4973.46 -155 1540 6247 -218.667 -65.7777 4225.04 -156 1550 6246 1704.54 -2013.01 2379.97 -157 1560 6245 5065.83 -7777.27 441.613 -158 1570 6244 9698.63 -13776.2 -1965.18 -159 1580 6243 10521.1 -16752.7 -1783.53 -160 1590 6242 8097.14 -13305.6 -1447.87 -161 1600 6241 3245.3 -11553.9 1997 -162 1610 6240 1851.85 -14763.1 1057.38 -163 1620 6239 1347.41 -14947.4 1380.23 -164 1630 6238 5307.99 -14165.9 7742.78 -165 1640 6237 246.88 -14464.5 7482.4 -166 1650 6236 -4874.81 -17554.9 4194.24 -167 1660 6235 -7795.68 -13800.9 2424.98 -168 1670 6234 -10211.2 -11479.7 1129.34 -169 1680 6233 -7146.01 -4690.84 2117.3 -170 1690 6232 -4518.41 2607.67 -4957.09 -171 1700 6231 -2249.08 2035.44 -5350.84 -172 1710 6230 -5033.17 2927.07 304.315 -173 1720 6229 -3244.48 3988.09 1090.13 -174 1730 6228 -1819.7 2122.19 -22.279 -175 1740 6227 1102.34 2266.93 -110.044 -176 1750 6226 -2238.25 968.052 -2523.04 -177 1760 6225 -6624.75 2171.93 -1579.61 -178 1770 6224 -4817.09 1880.66 -868.893 -179 1780 6223 2972.56 -291.206 2334.29 -180 1790 6222 2290.93 -1381.22 7315.88 -181 1800 6221 2355.55 -3557.07 5711.65 -182 1810 6220 3380.72 2083.48 4310.3 -183 1820 6219 5043.7 3123.19 4513.74 -184 1830 6218 194.899 -114.948 3805.08 -185 1840 6217 -4985.31 -2417.14 -4277.09 -186 1850 6216 -3182.67 -3180.87 -10413.6 -187 1860 6215 -1245.79 -4726.14 -12375.4 -188 1870 6214 740.319 -9456.79 -7699.8 -189 1880 6213 896.704 -10723.9 -7228.56 -190 1890 6212 -5551.56 -8012.05 -4487.63 -191 1900 6211 -12440.6 -10881 406.836 -192 1910 6210 -13665.2 -5831.22 2437.31 -193 1920 6209 -7953.78 625.633 2559.38 -194 1930 6208 -7965.54 4503.91 2432.07 -195 1940 6207 -529.09 9780.69 4329.57 -196 1950 6206 3677.14 10068.2 371.391 -197 1960 6205 2456.98 6676.35 -3993.85 -198 1970 6204 3602.42 3607.24 -3717.19 -199 1980 6203 960.135 10303 115.563 -200 1990 6202 362.65 10304.3 1116.51 -66000 200 -1 0 6601 389517 375757 384939 -2 10 6600 229675 218867 230160 -3 20 6599 121477 120913 121366 -4 30 6598 80245.2 83987.2 81146.7 -5 40 6597 62009.9 62066.2 60533.3 -6 50 6596 42905 41545.1 47539.4 -7 60 6595 25923.3 30233.7 35409.1 -8 70 6594 14882.6 26137.8 28584.6 -9 80 6593 11274.7 20511.6 22437 -10 90 6592 2470.38 13447.4 17050.3 -11 100 6591 -3548.62 13867 11833.7 -12 110 6590 -4928.37 9866.13 6204.34 -13 120 6589 -5696.91 789.985 4617.77 -14 130 6588 -732.4 1363.08 6916.42 -15 140 6587 -973.993 -2511.61 9661.29 -16 150 6586 -1881.45 -8298.29 6462.5 -17 160 6585 2535.28 -11231.4 6639.87 -18 170 6584 11320.2 -11887.4 4298.26 -19 180 6583 12375.7 -12347.2 4897.98 -20 190 6582 9906.33 -8739.13 481.889 -21 200 6581 2418.93 -4512.53 -2230.86 -22 210 6580 1777.12 -4036.86 -3567.24 -23 220 6579 3775.33 -7993.88 316.06 -24 230 6578 6265.68 -11825.5 321.523 -25 240 6577 -3013.97 -12151.5 -4834.86 -26 250 6576 -6765.52 -7115.73 -6551.92 -27 260 6575 -3219.7 -4361.81 -4028.3 -28 270 6574 1150.16 169.099 713.216 -29 280 6573 4085 3639.34 8685.93 -30 290 6572 6827.34 485.085 8168.64 -31 300 6571 7616.33 -4302.77 6832.41 -32 310 6570 5249.97 -7538.44 7058.37 -33 320 6569 2015.36 -4469.42 8181.59 -34 330 6568 2470.71 -7002.45 9378.52 -35 340 6567 -411.732 -4739.29 12699.3 -36 350 6566 6221.96 -2850.03 15725.6 -37 360 6565 10651 -3843.03 15289.7 -38 370 6564 7627.81 -6499.91 9728.12 -39 380 6563 2355.69 -8427.13 6813.38 -40 390 6562 -365.444 -1928.75 2782.02 -41 400 6561 1725.53 3780.37 -630.324 -42 410 6560 -3408.19 1924.02 2187.11 -43 420 6559 -6403.28 3066.41 8498.82 -44 430 6558 -7818.33 7319.11 5784.75 -45 440 6557 -4403.05 4928.87 5188.58 -46 450 6556 -6472.09 3706.73 2767.18 -47 460 6555 -6471.99 10728 192.13 -48 470 6554 -5570.45 15553.1 -3717.27 -49 480 6553 -5704.04 12476.3 -3944.24 -50 490 6552 -6582.16 8576.26 -6568.51 -51 500 6551 -3039.69 6535.82 -4033.13 -52 510 6550 -565.288 6935.99 -1225.71 -53 520 6549 6356.5 10093 -1531.58 -54 530 6548 6593.6 15826.4 -1646.76 -55 540 6547 3965.88 13812.9 1467.19 -56 550 6546 -1421.23 7951.27 6965.01 -57 560 6545 -5548.72 6788.7 7648.78 -58 570 6544 -1384.18 4816.17 3461.38 -59 580 6543 1690.77 2945.14 4473.38 -60 590 6542 1724.78 -1010.66 5386.68 -61 600 6541 -4150.85 -6225.63 1110.93 -62 610 6540 -20.537 -10291.1 1227.51 -63 620 6539 5370.37 -9842.83 8285.74 -64 630 6538 4835.67 -8391.18 15238.5 -65 640 6537 6378.25 -8593.46 13184.4 -66 650 6536 6556.16 -7170.51 12854.8 -67 660 6535 546.529 -3384.64 11134 -68 670 6534 -5028.23 -306.217 7426.68 -69 680 6533 -4280.07 -2425.72 6920.37 -70 690 6532 -2335.77 -11102.7 7915.76 -71 700 6531 -1732.42 -10035.9 10750.1 -72 710 6530 -1182.47 -3761.48 10686.3 -73 720 6529 -310.919 -2628.29 9859.7 -74 730 6528 4521.83 -3414.81 8850.41 -75 740 6527 8796.29 -195.926 928.147 -76 750 6526 11883.8 -1641.21 -1664 -77 760 6525 13651.3 -1072.4 -5708.39 -78 770 6524 14281.5 2184.31 -4563.9 -79 780 6523 12312.8 2971.96 2713.4 -80 790 6522 5925.94 2717.86 1111.58 -81 800 6521 4057.94 508.516 -1107.96 -82 810 6520 3769.75 -610.108 -4857.83 -83 820 6519 1969.24 -101.591 -7287.81 -84 830 6518 5801.92 492.422 -6093.34 -85 840 6517 4699.85 2540.95 -4155.82 -86 850 6516 -1860.4 4418.31 1771.21 -87 860 6515 -1915.49 -880.144 6293.03 -88 870 6514 -3121 -5507.51 2545.51 -89 880 6513 -1384.39 -3880.99 -3036.91 -90 890 6512 -1667.06 -4709.01 -1395.53 -91 900 6511 -4505.74 -9710.38 3662.43 -92 910 6510 -3056.98 -8061.23 4047.47 -93 920 6509 -5376.82 -112.365 4972.16 -94 930 6508 -2990.29 10724.3 6681.44 -95 940 6507 -1413.7 14549.6 4399.29 -96 950 6506 -523.183 10175.9 6765.28 -97 960 6505 2608.92 3913.03 7377.76 -98 970 6504 1050.02 4061.7 10245.2 -99 980 6503 -2929.55 9395.01 12970.9 -100 990 6502 -3596.01 9993.91 8895.72 -101 1000 6501 -5828.35 12279.5 5302.74 -102 1010 6500 -353.628 12333.9 6466.07 -103 1020 6499 5184.64 7076.34 3028.67 -104 1030 6498 8419 4524.86 -3598.52 -105 1040 6497 10519.7 1744.69 -2950.13 -106 1050 6496 13081.7 1587.43 -4912.35 -107 1060 6495 10582.4 1682.05 -2494.47 -108 1070 6494 8077.66 -1609.28 1938.64 -109 1080 6493 5131.52 -726.334 8437.1 -110 1090 6492 6299.56 364.394 10256.6 -111 1100 6491 5586.29 -3162.91 6468.14 -112 1110 6490 5419.11 -1369.56 -912.272 -113 1120 6489 3821.31 2288.65 -3832.86 -114 1130 6488 -1946.76 4429.87 -6293.96 -115 1140 6487 -1809.75 179.62 -9787.2 -116 1150 6486 2289.1 2399.52 -6673.04 -117 1160 6485 3747.54 5612.75 -4078.7 -118 1170 6484 2819.77 7524.86 208.759 -119 1180 6483 -3160.28 7135.47 4091.22 -120 1190 6482 3460.1 9248.9 1038.68 -121 1200 6481 10212.8 12252.9 -1750.51 -122 1210 6480 9944.48 14894.8 -1255.89 -123 1220 6479 6831.2 10413.7 1564.55 -124 1230 6478 8776.25 9264.96 2823.35 -125 1240 6477 9688.45 4507.32 2259.85 -126 1250 6476 17499 8252.19 -2742.6 -127 1260 6475 22060.6 10359.9 -3562.07 -128 1270 6474 15599.3 8130.81 -2127.52 -129 1280 6473 10617.8 10386.3 -1401.34 -130 1290 6472 -904.847 4488.04 -425.664 -131 1300 6471 -4135.11 2462.65 -1641.21 -132 1310 6470 -5082.25 2831.49 -9542.42 -133 1320 6469 -1338.31 4045.71 -11564 -134 1330 6468 1147.46 3146.46 -8247.3 -135 1340 6467 797.605 6237.76 -934.806 -136 1350 6466 -1754.43 9712.15 2163.95 -137 1360 6465 -5147.67 4123.17 3369.88 -138 1370 6464 -8170.56 -812.029 -1960.56 -139 1380 6463 -4344.86 0.120672 -3267.67 -140 1390 6462 -6122.79 891.907 -1542.86 -141 1400 6461 -3505.22 -3326.02 4233.93 -142 1410 6460 -1225.59 936.32 2415.95 -143 1420 6459 1353.97 4361.74 2191.62 -144 1430 6458 2368.48 1529.8 -7.19209 -145 1440 6457 -2548.14 3506.42 -3456.43 -146 1450 6456 -82.2161 7323.6 -5893 -147 1460 6455 -2280.53 5190.22 -5382.02 -148 1470 6454 -4044.77 6902.17 -5915.27 -149 1480 6453 -5508.97 5613.7 -6727.92 -150 1490 6452 -1748.18 9397.2 -8911.68 -151 1500 6451 -3920.99 6028.63 -6484.94 -152 1510 6450 -6631.32 6059.4 -4262.06 -153 1520 6449 -4753.21 6358.53 -933.064 -154 1530 6448 -4670.39 6068.07 3083.68 -155 1540 6447 -1852.3 732.147 2935.31 -156 1550 6446 153.684 -541.314 1855.89 -157 1560 6445 4071.29 -5659.07 -467.238 -158 1570 6444 9310.04 -11829.6 -3122.5 -159 1580 6443 10749.7 -15583.5 -2265.13 -160 1590 6442 8155.02 -12170.4 -1140.02 -161 1600 6441 2687.36 -10899.4 2267.33 -162 1610 6440 1684.97 -14078.6 1027.43 -163 1620 6439 1541.04 -13331.9 2049.91 -164 1630 6438 4497.22 -12070.4 8585.26 -165 1640 6437 -1266.01 -13118.6 8380.87 -166 1650 6436 -5974.15 -16537.5 4693.81 -167 1660 6435 -8994.81 -13589.1 1944.96 -168 1670 6434 -10500.6 -10738.8 638.571 -169 1680 6433 -6649.41 -3629.24 1465.9 -170 1690 6432 -3912.3 3128.81 -5548.8 -171 1700 6431 -1480.88 2889.66 -5385.92 -172 1710 6430 -3706.86 2954.9 680.861 -173 1720 6429 -2310.75 3265.29 1865.4 -174 1730 6428 -682.382 1495.33 1090.69 -175 1740 6427 2775.81 2322.75 1408.6 -176 1750 6426 387.835 222.04 -893.308 -177 1760 6425 -4426.48 517.316 -538.801 -178 1770 6424 -3487.81 726.266 -550.795 -179 1780 6423 4049.1 -1190.13 1954.09 -180 1790 6422 2673.49 -2543.96 5407.96 -181 1800 6421 2030.66 -4370.83 4130.87 -182 1810 6420 3872.9 1127.51 3104.58 -183 1820 6419 6193.22 2720.47 3430.7 -184 1830 6418 1231.65 207.096 2668.91 -185 1840 6417 -4289.98 -1510.65 -5375.83 -186 1850 6416 -2847.57 -1119 -11152 -187 1860 6415 -1508.29 -2490.37 -13329.3 -188 1870 6414 641.999 -7079.45 -9218.69 -189 1880 6413 1085.49 -8009.6 -8792.21 -190 1890 6412 -5987.12 -5945.47 -5360.02 -191 1900 6411 -12256.5 -9329.73 490.747 -192 1910 6410 -12715.4 -3308.19 2439.29 -193 1920 6409 -6637.14 3127.32 2794.78 -194 1930 6408 -7498.03 5097.05 3054.16 -195 1940 6407 -254.137 9535.95 4533.62 -196 1950 6406 3558.2 10672.1 313.941 -197 1960 6405 1835.08 7236.27 -3041.92 -198 1970 6404 2720.16 4655.92 -3113.55 -199 1980 6403 -266.87 11134.5 -17.2158 -200 1990 6402 -1904.12 10570.7 942.096 -68000 200 -1 0 6801 390545 374220 383888 -2 10 6800 230073 217391 229051 -3 20 6799 121881 119393 119686 -4 30 6798 80144 82929.4 79076 -5 40 6797 61531.8 60989.2 58850.2 -6 50 6796 43251.1 40026.2 47228.7 -7 60 6795 26593.8 28415.4 36310 -8 70 6794 14882.8 24592.3 29197.7 -9 80 6793 12041.5 18996.8 22760.2 -10 90 6792 4772.7 12255.3 17014.8 -11 100 6791 -698.104 12985.7 12120.6 -12 110 6790 -2526.31 9443.41 6771.81 -13 120 6789 -3408.97 549.512 4529.43 -14 130 6788 1072.54 1096.5 5425.61 -15 140 6787 1266.6 -2212.58 6921.66 -16 150 6786 -507.905 -7650.2 4654.32 -17 160 6785 3347.72 -11614.1 6558.73 -18 170 6784 11991.3 -12365.9 5372.08 -19 180 6783 13276.8 -12783.4 5875.48 -20 190 6782 10941.6 -9154.6 755.374 -21 200 6781 3704.53 -5297.74 -1992.38 -22 210 6780 2794.65 -5377.72 -3637.17 -23 220 6779 4613.37 -8890.84 -323.027 -24 230 6778 6939.46 -11953.3 -445.539 -25 240 6777 -1721.91 -11194.9 -4609.82 -26 250 6776 -6114.21 -5910.6 -5497.85 -27 260 6775 -3313.54 -2580.2 -2540.35 -28 270 6774 67.3401 1518.67 1818.5 -29 280 6773 2864.05 4236.09 9556.44 -30 290 6772 5422.14 798.727 8628.48 -31 300 6771 6134.04 -4016.61 7382.34 -32 310 6770 3295.82 -7018.14 7742.08 -33 320 6769 642.889 -4627.94 9383.22 -34 330 6768 1674.79 -7067.94 10791.5 -35 340 6767 789.29 -4903.49 13787.4 -36 350 6766 6971.17 -2717.32 16364 -37 360 6765 10672.5 -3052.5 16615.4 -38 370 6764 6858.06 -5909.68 11870 -39 380 6763 2327.74 -8396.85 8907.36 -40 390 6762 -346.391 -1426.95 4722.46 -41 400 6761 1986.56 4471.29 190.162 -42 410 6760 -3817.07 3147.46 1816.12 -43 420 6759 -6778.62 4111.66 7882.88 -44 430 6758 -8205.43 7439.37 6155.22 -45 440 6757 -4587.24 4561.72 5890.67 -46 450 6756 -5922.91 2815.85 4028.96 -47 460 6755 -5555.16 9213.89 1229.66 -48 470 6754 -4943.05 13649.2 -3747.48 -49 480 6753 -4643.36 11535.7 -4060.17 -50 490 6752 -6056.75 7500.91 -6107.04 -51 500 6751 -2444.53 5850.61 -3084.16 -52 510 6750 832.418 6716.91 -628.815 -53 520 6749 7716.94 9856.75 -1464.84 -54 530 6748 7283.15 15205.4 -2201.68 -55 540 6747 4937.52 13982.5 1235.22 -56 550 6746 -264.811 9517.61 7373.09 -57 560 6745 -4700.46 8428.37 9297.94 -58 570 6744 -394.941 5831.97 5552.82 -59 580 6743 3159.13 3128.67 5724.79 -60 590 6742 3871.06 -435.963 4885.81 -61 600 6741 -654.537 -5356.86 -274.232 -62 610 6740 1967.22 -9934.18 -13.5291 -63 620 6739 6858.67 -10022.1 7449.87 -64 630 6738 5840.26 -8990.42 15196.9 -65 640 6737 7249.2 -9243.39 13578.3 -66 650 6736 7111.72 -7407.6 13197.3 -67 660 6735 1497.97 -3619.5 11047.5 -68 670 6734 -4572.49 -176.135 6780 -69 680 6733 -3288.34 -1836.98 6562.99 -70 690 6732 77.9102 -10715.9 7301.34 -71 700 6731 686.314 -10124.6 9862.34 -72 710 6730 66.6848 -4201.93 9684.09 -73 720 6729 1269.51 -3984.16 9551.57 -74 730 6728 6086.57 -4358.73 9395.25 -75 740 6727 10361.1 217.795 2419.96 -76 750 6726 13097.8 -662.572 -328.04 -77 760 6725 14238.7 -987.223 -4620.92 -78 770 6724 13127.7 1435.33 -5026.65 -79 780 6723 11317.8 2411.48 1562.43 -80 790 6722 5291.76 2745.86 -66.2822 -81 800 6721 3195.58 865.147 -2209.28 -82 810 6720 2459.33 538.14 -5368.24 -83 820 6719 1003.22 829.371 -6171.51 -84 830 6718 4832.74 699.641 -4510.72 -85 840 6717 4484.68 1888.62 -2665.37 -86 850 6716 -2013.67 3645.41 3001.48 -87 860 6715 -2343.22 -1128.58 7650.33 -88 870 6714 -3866.98 -6177.76 3555.78 -89 880 6713 -1801.86 -4613.74 -1873.77 -90 890 6712 -1950.33 -4826.17 -141.255 -91 900 6711 -5956.65 -10555.4 4610.2 -92 910 6710 -5475.92 -8985.44 5407.74 -93 920 6709 -7782.16 -225.517 6124.39 -94 930 6708 -4896.85 10711.9 8283.13 -95 940 6707 -2194.57 14284.3 6376.77 -96 950 6706 -1638.65 10236 8284.78 -97 960 6705 1340.22 4505.21 8004.97 -98 970 6704 -70.2547 3974.91 9784.38 -99 980 6703 -3068.26 8390.77 11820.2 -100 990 6702 -3980.18 9481.96 8143.83 -101 1000 6701 -6453.24 11404.2 5334.63 -102 1010 6700 -1969.75 10874.8 7624.64 -103 1020 6699 4058.67 5701.17 4887.26 -104 1030 6698 7998.43 3463.37 -1824.63 -105 1040 6697 10190 1217.46 -2126.65 -106 1050 6696 11969.7 1472.9 -4654.72 -107 1060 6695 9044.22 2025.85 -1766.88 -108 1070 6694 7807.17 -293.195 2589.89 -109 1080 6693 5770.57 -38.2734 8883.16 -110 1090 6692 6934.88 1090.72 11136.7 -111 1100 6691 5834.43 -2263.49 7189.17 -112 1110 6690 5449.24 -863.082 -288.338 -113 1120 6689 3588.7 3164.71 -3822.53 -114 1130 6688 -2430.5 5286.18 -6620.61 -115 1140 6687 -1008.04 1623.13 -10018.9 -116 1150 6686 1883.85 3754.61 -7017.66 -117 1160 6685 2438.3 6304.62 -5008.14 -118 1170 6684 1792.54 7874.75 -465.586 -119 1180 6683 -3225.09 6769.9 3954.75 -120 1190 6682 4644.25 8857.33 2331.95 -121 1200 6681 12191.3 10877.6 -372.154 -122 1210 6680 11600.1 12967.7 -314.467 -123 1220 6679 8310.74 9002.27 1974.51 -124 1230 6678 9600.65 7465.43 3146.29 -125 1240 6677 10359.8 3074 2533.83 -126 1250 6676 18203.3 7325.87 -2439.47 -127 1260 6675 22414.5 8687.86 -2981.26 -128 1270 6674 16266.8 5994.86 -1345.36 -129 1280 6673 11839.2 7889.93 -405.524 -130 1290 6672 115.514 3271.34 298.662 -131 1300 6671 -3482.36 2246.96 -945.447 -132 1310 6670 -4835.95 3245.39 -8894.72 -133 1320 6669 -1395.35 5322.5 -11269.1 -134 1330 6668 1083.03 4792.26 -8289.24 -135 1340 6667 920.645 7315.4 -1487.12 -136 1350 6666 -1592.04 10539.1 1646.49 -137 1360 6665 -4586.7 5415.58 3297.35 -138 1370 6664 -7490.65 23.413 -1569.37 -139 1380 6663 -3692.81 -519.999 -2485.63 -140 1390 6662 -5863.19 -235.348 -917.925 -141 1400 6661 -3629.44 -3987.26 5332.56 -142 1410 6660 -1627.01 343.747 4280.22 -143 1420 6659 1177.73 3541.18 4003.87 -144 1430 6658 2030.17 1456.56 1934.05 -145 1440 6657 -2646.76 3544.22 -1752.67 -146 1450 6656 122.112 6497.41 -4564.3 -147 1460 6655 -2708.92 3991.35 -4125.99 -148 1470 6654 -4234.73 5933.93 -4451.31 -149 1480 6653 -5052.15 5330.34 -5106.5 -150 1490 6652 -1464.92 8973.86 -7491.67 -151 1500 6651 -4126.76 5826.6 -5748.08 -152 1510 6650 -7525.49 5987.95 -2909.52 -153 1520 6649 -6346.53 5700.04 836.614 -154 1530 6648 -6040.28 5039.25 3767.15 -155 1540 6647 -1707.24 -584.386 2948.2 -156 1550 6646 301.657 -1171.94 1798.54 -157 1560 6645 3875.05 -6527.37 -405.126 -158 1570 6644 8885.54 -12784.4 -2080.45 -159 1580 6643 10361.4 -16481 421.067 -160 1590 6642 8626.19 -12674.2 2683.87 -161 1600 6641 3501.95 -10713.8 5153.88 -162 1610 6640 1826.72 -13393.2 2540.21 -163 1620 6639 1232 -13168.4 2263.92 -164 1630 6638 3494.52 -12168.2 7926.36 -165 1640 6637 -2476.78 -12994 7656.91 -166 1650 6636 -6913.6 -15869.6 4661.73 -167 1660 6635 -9659.87 -12284.1 2167.03 -168 1670 6634 -10825.3 -8846.53 1288.36 -169 1680 6633 -6856.9 -1257.68 2727.48 -170 1690 6632 -3630.62 5255.68 -3831.37 -171 1700 6631 -633.858 4957.38 -4969.41 -172 1710 6630 -2833.12 4963.47 66.1018 -173 1720 6629 -1286.02 4580.66 1106.89 -174 1730 6628 -20.5035 2326.83 863.24 -175 1740 6627 2820.5 4065.85 1919.77 -176 1750 6626 -631.892 2137.82 584.306 -177 1760 6625 -5953.66 1715.59 1101.84 -178 1770 6624 -4367.98 572.966 1481.63 -179 1780 6623 3058.63 -2395.84 3031.12 -180 1790 6622 2064.72 -3795.19 5888.88 -181 1800 6621 2341.04 -5661.98 3362.93 -182 1810 6620 3418.27 -354.529 2550.94 -183 1820 6619 4918.43 812.685 2906.44 -184 1830 6618 674.955 -1601.45 1979.06 -185 1840 6617 -4396.15 -2410.88 -6113.18 -186 1850 6616 -3035.98 -1504.06 -11013.2 -187 1860 6615 -1562.38 -1774 -13410.9 -188 1870 6614 1195.76 -6083.23 -9309.12 -189 1880 6613 1275.29 -7532.68 -9669.05 -190 1890 6612 -6033.92 -5108.36 -6779.3 -191 1900 6611 -12545.7 -8305.43 -557.118 -192 1910 6610 -12737.5 -2395.74 2095.5 -193 1920 6609 -6056.45 3321.56 3052.98 -194 1930 6608 -6223.47 4950.1 3950.9 -195 1940 6607 533.7 8694.33 5656.41 -196 1950 6606 3138.03 9062.33 1245.43 -197 1960 6605 1378.83 6343.99 -2760.95 -198 1970 6604 2482.16 4439.25 -2166.24 -199 1980 6603 -406.424 10692.8 1116.16 -200 1990 6602 -2566.29 10671.4 1156.65 -70000 200 -1 0 7001 386567 375640 382050 -2 10 7000 226590 219485 227013 -3 20 6999 118740 121289 118400 -4 30 6998 77539.7 84481.9 77965.5 -5 40 6997 60327 61636.5 57770.9 -6 50 6996 42037.3 40272.5 46448.1 -7 60 6995 25760.1 28280.2 36240.4 -8 70 6994 14258.1 24171.4 29502.9 -9 80 6993 11251.7 18635.6 22339.4 -10 90 6992 3819.06 10486.5 16640.6 -11 100 6991 -1198.44 10712 11215 -12 110 6990 -2632.69 7128.54 5875.56 -13 120 6989 -3274.51 -2072.15 3893.16 -14 130 6988 975.912 -1933.99 5170.33 -15 140 6987 1863.66 -5225.24 6942.31 -16 150 6986 -317.283 -10304.2 5101.48 -17 160 6985 3423.37 -13457.3 6747.12 -18 170 6984 11041.5 -13276.3 5961.88 -19 180 6983 12417.3 -12682.5 5139.19 -20 190 6982 9279.79 -8512.03 309.038 -21 200 6981 2598.54 -4486.52 -1802.82 -22 210 6980 1752.36 -4024.91 -3203.63 -23 220 6979 3931.29 -6851.05 206.343 -24 230 6978 6027 -10213 8.82478 -25 240 6977 -2351.83 -9720.24 -4118.07 -26 250 6976 -6563.02 -4952.21 -5728.56 -27 260 6975 -3547.35 -2346.5 -1907.42 -28 270 6974 -181.924 1401.64 2349.17 -29 280 6973 3525.8 3486.28 9676.04 -30 290 6972 5728.74 732.177 8097.51 -31 300 6971 6061.71 -3923.99 7380.61 -32 310 6970 2685.03 -7065.33 7684.33 -33 320 6969 66.591 -4545.33 10135 -34 330 6968 826.315 -6945.12 12016 -35 340 6967 -56.033 -5664.22 14868.8 -36 350 6966 5831.49 -3746.84 17119 -37 360 6965 9679.86 -3550.64 16232.4 -38 370 6964 5634.91 -5550.46 12097.3 -39 380 6963 1722.43 -7548.52 9484.66 -40 390 6962 -777.124 -294.777 5836.24 -41 400 6961 1782.83 5108.18 1161.49 -42 410 6960 -4368.01 3829.81 2048.69 -43 420 6959 -7498.29 4618.4 6984.7 -44 430 6958 -8922.38 7364.46 5118.11 -45 440 6957 -5215.51 4876.87 4902.65 -46 450 6956 -6349.43 3105.31 3780.76 -47 460 6955 -5847.95 8911.97 848.975 -48 470 6954 -5474.89 13236.6 -4769.06 -49 480 6953 -5287.85 10599 -5806.89 -50 490 6952 -6804.07 6227.21 -7565.63 -51 500 6951 -2751.6 4908.63 -4632.25 -52 510 6950 1341.31 5797 -2122.6 -53 520 6949 7754.2 9301.49 -883.712 -54 530 6948 5909.07 14343.3 -1687.02 -55 540 6947 3261.58 13217.1 965.191 -56 550 6946 -1126.69 9456.56 5889.04 -57 560 6945 -4713.68 8295.5 7352.23 -58 570 6944 -408.162 5994.58 3884.43 -59 580 6943 3029.38 4294.65 5192.52 -60 590 6942 3487.99 1081.2 5225.38 -61 600 6941 -796.691 -3676.65 40.6865 -62 610 6940 1469.31 -7939.46 -462.913 -63 620 6939 6452.92 -8175.43 6485.5 -64 630 6938 5782.73 -7119.6 13694.8 -65 640 6937 7721.67 -7717.36 12319.9 -66 650 6936 7146.84 -6186.79 13420 -67 660 6935 1253.14 -3376.74 11092.4 -68 670 6934 -4728.04 -1581.86 7716.28 -69 680 6933 -3321.92 -3716.7 7626.29 -70 690 6932 -141.952 -12669.8 8188.85 -71 700 6931 1006.93 -12008.7 9979.82 -72 710 6930 1593.94 -6079.15 9424.65 -73 720 6929 2409.12 -5930.85 9869.83 -74 730 6928 5930.23 -5950.16 10109.2 -75 740 6927 10025 -1233.08 4169.87 -76 750 6926 12964.7 -2270.51 908.121 -77 760 6925 13955 -2756.13 -3420.82 -78 770 6924 12806 104.942 -4625.45 -79 780 6923 11048.9 1348.89 1413.36 -80 790 6922 5627.75 1501.16 -405.977 -81 800 6921 3690.16 101.712 -1910.15 -82 810 6920 3063.63 1015.76 -6178.17 -83 820 6919 1891.73 1828.3 -7939.67 -84 830 6918 5630.26 2304.13 -5502.25 -85 840 6917 5660.24 3487.53 -2847.92 -86 850 6916 -980.089 5314.45 2651.36 -87 860 6915 -1336.19 142.877 6938.26 -88 870 6914 -3086.81 -5195.6 2120.83 -89 880 6913 -1121.87 -4238.59 -3889.13 -90 890 6912 -1524.63 -4921.27 -1140.67 -91 900 6911 -5536.64 -11118.6 5136.73 -92 910 6910 -4675.63 -9566.85 6537.03 -93 920 6909 -6507.78 -1271.94 7320.22 -94 930 6908 -2884.81 8481.79 8535.29 -95 940 6907 -267.848 11444.8 5218 -96 950 6906 -446.246 8245.26 7155.88 -97 960 6905 2451.72 2639.94 6513.76 -98 970 6904 1096.27 1578.57 9001.11 -99 980 6903 -1567.71 5677.47 11887 -100 990 6902 -2597.86 7695.48 8255.66 -101 1000 6901 -5096.13 9636.75 5301.68 -102 1010 6900 -1272.06 8635.11 7094.07 -103 1020 6899 4363.34 4802.32 4836.63 -104 1030 6898 8185.01 3764.41 -1498.4 -105 1040 6897 9933.06 1852.18 -1469.42 -106 1050 6896 11951.6 2247.27 -4073.2 -107 1060 6895 9643.07 2286.88 -942.393 -108 1070 6894 9233.1 297.697 3280.52 -109 1080 6893 6930.01 515.569 9724.87 -110 1090 6892 8165.47 1428.25 11845.4 -111 1100 6891 7190.35 -1400.78 8499.35 -112 1110 6890 6367.33 -217.23 617.444 -113 1120 6889 4240.54 3443.38 -3505.92 -114 1130 6888 -2387.26 5650.19 -6282.68 -115 1140 6887 -1231.19 2090.27 -9686.95 -116 1150 6886 1789.42 3961.07 -6938.59 -117 1160 6885 2601.64 6856.67 -4788.33 -118 1170 6884 1743.36 8689.05 -143.587 -119 1180 6883 -3461.68 7591.34 4254.36 -120 1190 6882 4334.88 9726 2914.63 -121 1200 6881 11965.4 12298 -256.776 -122 1210 6880 11378.3 14334.7 -709.486 -123 1220 6879 8524.6 10725.7 915.348 -124 1230 6878 9781.7 8443.8 2349.01 -125 1240 6877 9989.06 3750.79 1496.33 -126 1250 6876 16696.1 7695.97 -2483.37 -127 1260 6875 20271.4 8392.78 -2587.38 -128 1270 6874 14736.3 5452.27 -1362.08 -129 1280 6873 10872.3 6774.91 -642.575 -130 1290 6872 -426.473 1460.02 -460.827 -131 1300 6871 -3764.13 441.96 -1670.1 -132 1310 6870 -5047.01 1108.55 -10547.6 -133 1320 6869 -1597.84 3064.04 -12023.2 -134 1330 6868 954.854 2819.74 -8964.34 -135 1340 6867 1608.91 5036.14 -3281.94 -136 1350 6866 -873.066 8104.03 -190.873 -137 1360 6865 -4591.09 2783.89 2360.22 -138 1370 6864 -8340.7 -2464.5 -1780.18 -139 1380 6863 -4388.12 -2402.83 -2623.4 -140 1390 6862 -6157.92 -1737.52 -1147.97 -141 1400 6861 -4420.01 -4988.33 4722.69 -142 1410 6860 -2970.61 -338.001 3517.78 -143 1420 6859 355.596 3131.28 4162.39 -144 1430 6858 1807.48 1448.26 3040.03 -145 1440 6857 -1641.16 4799.89 -292.776 -146 1450 6856 2144.04 7359.05 -3273.89 -147 1460 6855 -1527.18 5347.01 -3643.81 -148 1470 6854 -4261 7810.67 -4279.83 -149 1480 6853 -5476.04 6470.32 -4748.15 -150 1490 6852 -2245.93 9508.85 -6765.98 -151 1500 6851 -4818.19 6679.73 -5005.92 -152 1510 6850 -8150.64 6953.74 -2570.69 -153 1520 6849 -6824.19 7006.79 880.783 -154 1530 6848 -5970.37 5602.39 3686.25 -155 1540 6847 -1724.5 661.715 3171.76 -156 1550 6846 -377.891 -22.5439 1841.81 -157 1560 6845 3880.1 -6184.64 -554.312 -158 1570 6844 8870.29 -12190.1 -2382.95 -159 1580 6843 11003.7 -16288.4 486.222 -160 1590 6842 9404.6 -12600 3199.36 -161 1600 6841 4137.89 -10651.7 6328.74 -162 1610 6840 1582.49 -13381.8 3061.22 -163 1620 6839 1101.57 -12737.1 2521.53 -164 1630 6838 3391.68 -10898.2 7621.88 -165 1640 6837 -2492.77 -11075.7 7712.67 -166 1650 6836 -6422.42 -14226.9 5277.57 -167 1660 6835 -9153.7 -10923.3 3277.28 -168 1670 6834 -9653.54 -7262.31 2282.23 -169 1680 6833 -5927.34 -338.108 2355.83 -170 1690 6832 -3365.55 6484.86 -4483.12 -171 1700 6831 -78.9646 6739.9 -5330.11 -172 1710 6830 -2483.24 6795.74 337.199 -173 1720 6829 -659.472 5382.69 1016.43 -174 1730 6828 630.068 2378.2 397.077 -175 1740 6827 3941.86 3597.93 1056.1 -176 1750 6826 140.879 1312.42 850.58 -177 1760 6825 -5032.77 259.612 2079.82 -178 1770 6824 -4178.11 -470.416 2808.42 -179 1780 6823 2836.49 -3133.88 4370.47 -180 1790 6822 2271.82 -4677.25 7038.49 -181 1800 6821 2687.67 -6484.54 3749.15 -182 1810 6820 3425.11 -1060.9 3029.9 -183 1820 6819 4241.85 74.302 4526.72 -184 1830 6818 -140.453 -2238.74 3342.48 -185 1840 6817 -5067.41 -3244.83 -4668.71 -186 1850 6816 -4072.56 -1776.34 -10020.5 -187 1860 6815 -2773.56 -1270.4 -13000.7 -188 1870 6814 529.125 -5474.5 -8820.9 -189 1880 6813 850.185 -6732.51 -9051.56 -190 1890 6812 -6547.59 -4477.47 -7470.33 -191 1900 6811 -12487.2 -7574.26 -1554.39 -192 1910 6810 -12377.6 -1665.7 1453.52 -193 1920 6809 -6433.72 3582.99 2752.11 -194 1930 6808 -6797.93 5735.74 3700.72 -195 1940 6807 21.1448 9918.96 4870.59 -196 1950 6806 2735.98 10416.5 952.715 -197 1960 6805 1679.62 7577.55 -3410.55 -198 1970 6804 3482.25 4872.99 -3352.34 -199 1980 6803 493.596 10557.8 21.6616 -200 1990 6802 -2226.64 10670.1 810.225 -72000 200 -1 0 7201 387074 374723 381704 -2 10 7200 226383 218240 226334 -3 20 7199 118371 120193 117342 -4 30 7198 77908.8 83614.5 77206.4 -5 40 7197 60633.4 61168.6 57883.1 -6 50 7196 42276.1 39551.9 47089.2 -7 60 7195 25953 28217.1 36848.7 -8 70 7194 14240 24529 29020.3 -9 80 7193 10407.8 18746.3 21469.3 -10 90 7192 2904.24 9745.21 15942.2 -11 100 7191 -1927.32 9835.23 11232.1 -12 110 7190 -2882.95 6561.4 6737.52 -13 120 7189 -3122.72 -2023.94 4573.69 -14 130 7188 766.054 -2253.14 5109.55 -15 140 7187 1937.84 -5168.36 5568.44 -16 150 7186 48.8865 -9338.17 4214.81 -17 160 7185 3683.92 -12494.9 6926.27 -18 170 7184 11403.5 -13201.4 6201.38 -19 180 7183 12712.1 -12655.5 5046.24 -20 190 7182 9970.65 -8559.67 272.097 -21 200 7181 3263.37 -5010.2 -2534.85 -22 210 7180 2864.47 -5071.47 -4650.88 -23 220 7179 5146.02 -7876.5 -1072.5 -24 230 7178 6493.15 -11955.4 -111.389 -25 240 7177 -2166.51 -12245.2 -4063.74 -26 250 7176 -6783.03 -8063.2 -5597.87 -27 260 7175 -3638.41 -5046.19 -2149.6 -28 270 7174 -425.117 -641.146 2417.14 -29 280 7173 3346.52 2060.5 10282.5 -30 290 7172 5166.42 41.0167 9502.41 -31 300 7171 5731.57 -4865.73 9211.68 -32 310 7170 3384.55 -7658.3 9408.85 -33 320 7169 1106.53 -5500.65 11088.7 -34 330 7168 2203.22 -7242.25 12698.4 -35 340 7167 843.346 -4950.16 16198.3 -36 350 7166 7518.77 -2940.18 19133.3 -37 360 7165 11143.2 -3322.84 17865.3 -38 370 7164 7035.49 -6066.07 12824.8 -39 380 7163 2784.9 -7574.08 10019.8 -40 390 7162 -669.081 690.559 6024.07 -41 400 7161 1474.43 5830.16 1393.93 -42 410 7160 -4853.35 4605.68 2472.07 -43 420 7159 -8525.57 5776.38 7412.75 -44 430 7158 -10309.8 8429.04 4965.49 -45 440 7157 -6684.35 5368.07 4396.38 -46 450 7156 -7885.56 3928.72 3747.41 -47 460 7155 -7940.65 9102.07 1236.28 -48 470 7154 -7018.42 13608.3 -4399.6 -49 480 7153 -6482.62 10897.1 -5699.83 -50 490 7152 -7033.9 7086.84 -7771.1 -51 500 7151 -3874.77 5271.81 -5110.17 -52 510 7150 82.4349 6227.54 -2179.24 -53 520 7149 6317.56 9267.1 -1316.72 -54 530 7148 4696.64 14403.7 -2815.2 -55 540 7147 1992.71 13366.3 -268.328 -56 550 7146 -1905.09 9851.23 4967.79 -57 560 7145 -5345.06 8197.06 5146.13 -58 570 7144 -943.414 6338.77 1692.8 -59 580 7143 2446.64 4752.89 4431.02 -60 590 7142 2667.9 1537.79 5300.01 -61 600 7141 -1000.91 -3265.76 -355.404 -62 610 7140 1780.8 -8177.89 -996.13 -63 620 7139 6441.44 -8723.41 6170.55 -64 630 7138 5686 -7753.05 13658.4 -65 640 7137 8843.58 -8504.52 13721.8 -66 650 7136 8433.33 -7491.4 15389 -67 660 7135 1707.77 -5362.6 12382.7 -68 670 7134 -4008.37 -3473.81 8635.24 -69 680 7133 -2724.99 -5096.14 8409.81 -70 690 7132 58.1825 -14322.8 8050.75 -71 700 7131 590.726 -13250.9 9829.05 -72 710 7130 417.935 -6907.94 8848.09 -73 720 7129 1000.48 -7231.61 8989.59 -74 730 7128 5182.7 -6932.42 8416.83 -75 740 7127 8718.12 -2014.62 3146.94 -76 750 7126 11639 -2550.49 661.508 -77 760 7125 12972.2 -3156.23 -3687.34 -78 770 7124 12696 -500.994 -4707.84 -79 780 7123 10452.2 1897.88 1125.89 -80 790 7122 5605.2 1965.07 -1166.44 -81 800 7121 3061.16 56.6676 -2988.3 -82 810 7120 1851.2 754.512 -7031.26 -83 820 7119 1769.24 1410.29 -9362.45 -84 830 7118 5370 1589.66 -7091.42 -85 840 7117 5341.35 3083.09 -4897.26 -86 850 7116 -964.433 4962.46 546.326 -87 860 7115 -343.112 1109.7 4533.51 -88 870 7114 -1889.69 -3644.1 81.9851 -89 880 7113 -1346.45 -3311.64 -6220 -90 890 7112 -1746.27 -4244.96 -2858.91 -91 900 7111 -5580.38 -9953.3 4442.96 -92 910 7110 -4573.62 -8484.36 6191.04 -93 920 7109 -6210.76 541.998 6506.07 -94 930 7108 -1939.41 9952.44 7995.75 -95 940 7107 1092.51 11970.3 4893.53 -96 950 7106 30.7736 8470.77 6782.85 -97 960 7105 2666.71 2940.97 6702.8 -98 970 7104 2449.14 1424.62 9638.33 -99 980 7103 338.457 5962 12704.1 -100 990 7102 -1514.07 8393.19 8611.78 -101 1000 7101 -4095.75 10018.7 5798.93 -102 1010 7100 -124.256 8492.83 7565.91 -103 1020 7099 4588.89 5118.18 5228.48 -104 1030 7098 7266.4 3371.82 -858.62 -105 1040 7097 8407.87 1762.71 -755.109 -106 1050 7096 11511.9 2089.23 -4141.64 -107 1060 7095 9727.03 2287.89 -1450.93 -108 1070 7094 9344.06 583.78 2638.9 -109 1080 7093 7656.9 243.045 8875.39 -110 1090 7092 7847.15 519.86 11621.2 -111 1100 7091 6393.34 -2577.15 9091.73 -112 1110 7090 5614.68 -1301.92 830.355 -113 1120 7089 4296.92 2648.08 -3767.27 -114 1130 7088 -1835.67 5208.13 -6364.68 -115 1140 7087 -549.782 1995.3 -10101.6 -116 1150 7086 2729.89 3044.2 -7503.19 -117 1160 7085 2961.82 5404.16 -4569.56 -118 1170 7084 1513.3 7868.05 241.419 -119 1180 7083 -4232.18 7353.52 3123.23 -120 1190 7082 3342.26 10243.2 1423.01 -121 1200 7081 11959.5 13071.5 -1204.64 -122 1210 7080 11027.3 14249.7 -1875.81 -123 1220 7079 8124.14 10011.9 -317.404 -124 1230 7078 8410.18 7607.94 1174.32 -125 1240 7077 8999.28 3330.07 94.85 -126 1250 7076 15322.2 7118.62 -2934.38 -127 1260 7075 18571.7 7950.33 -1814.95 -128 1270 7074 13834.4 5036.41 -380.44 -129 1280 7073 11048.1 6039.73 41.4067 -130 1290 7072 328.501 842.824 235.019 -131 1300 7071 -3209.76 118.581 -823.401 -132 1310 7070 -4555.23 874.841 -9782.92 -133 1320 7069 -1378.69 2823.95 -10480.8 -134 1330 7068 1514.91 2763.08 -7334.73 -135 1340 7067 1860.64 5219.11 -2287.89 -136 1350 7066 -1858.42 8098.05 658.543 -137 1360 7065 -6559.86 2502.13 3384.76 -138 1370 7064 -10625.6 -2525.26 -1382 -139 1380 7063 -6315.85 -1846.09 -2041.8 -140 1390 7062 -8404.93 -1001.26 -330.925 -141 1400 7061 -7118.06 -4099.87 5123.89 -142 1410 7060 -5729.17 1053.3 4237.24 -143 1420 7059 -1573.06 3727.95 5618.88 -144 1430 7058 782.539 1188.84 4132.04 -145 1440 7057 -1903.03 3601.09 634.494 -146 1450 7056 1939.74 6554.48 -2230.26 -147 1460 7055 -1199.74 4875.46 -3387.33 -148 1470 7054 -4274.31 6995.46 -4265.93 -149 1480 7053 -5412.48 5804.12 -4276.83 -150 1490 7052 -2140.47 9660.45 -6192.04 -151 1500 7051 -4844.94 6073.24 -3981.19 -152 1510 7050 -9245.19 6425.74 -2289.3 -153 1520 7049 -7778.26 6934.45 844.347 -154 1530 7048 -7056.84 6656.9 3709.74 -155 1540 7047 -2832.09 1134.26 3156.75 -156 1550 7046 -1912.15 -305.764 2969.77 -157 1560 7045 1994.55 -5375.17 1065.96 -158 1570 7044 6774.43 -10345.8 -1539.46 -159 1580 7043 10140.9 -15068.3 505.453 -160 1590 7042 9033.01 -11303.5 2798.94 -161 1600 7041 3284.5 -8984.11 6225.58 -162 1610 7040 1173.25 -12047.3 4386.66 -163 1620 7039 1266.09 -11679.1 3570.83 -164 1630 7038 3149.74 -9612.6 7967.45 -165 1640 7037 -2157.86 -9970.41 7816.46 -166 1650 7036 -6274.45 -12962.5 6163.18 -167 1660 7035 -9069.02 -10176.8 4274.63 -168 1670 7034 -10045.3 -6416.09 3741.02 -169 1680 7033 -6424.09 173.89 4134.17 -170 1690 7032 -4412.13 6537.7 -2885.4 -171 1700 7031 -572.93 6813.31 -3588.82 -172 1710 7030 -2142.21 7100.04 1472.16 -173 1720 7029 -96.6501 5446.56 1822.12 -174 1730 7028 -224.983 3170.45 787.518 -175 1740 7027 1867.88 4817.1 1249.52 -176 1750 7026 -1526.2 2715.22 1257.21 -177 1760 7025 -5577.84 547.594 2847.06 -178 1770 7024 -5125.08 -266.901 3873.33 -179 1780 7023 1850.9 -2200.53 4933.91 -180 1790 7022 1597.39 -3440.69 6643.11 -181 1800 7021 2880.07 -6045.92 3351.62 -182 1810 7020 3624.31 -1586.59 2623.93 -183 1820 7019 4753.03 54.5975 3504.16 -184 1830 7018 578.224 -3182.76 1356.4 -185 1840 7017 -3552.69 -4883.76 -5432.1 -186 1850 7016 -2428.53 -3063.82 -9441.25 -187 1860 7015 -1860.56 -2707.64 -12766.3 -188 1870 7014 888.847 -6365.61 -8492.09 -189 1880 7013 822.158 -6519.9 -8673.2 -190 1890 7012 -6240.51 -4343.42 -7514.23 -191 1900 7011 -12244.1 -7525.13 -1317.2 -192 1910 7010 -12052.6 -2405.55 2946.61 -193 1920 7009 -5293.56 2790.39 3609.29 -194 1930 7008 -5629.92 4390.87 4652 -195 1940 7007 1349.49 8044.54 6666.6 -196 1950 7006 4306.73 8842.22 3532.04 -197 1960 7005 2617.99 5848.95 -1495.58 -198 1970 7004 4125.82 3425.94 -2076.38 -199 1980 7003 1306.11 9664.16 -49.4853 -200 1990 7002 -474.471 9930.32 91.289 -74000 200 -1 0 7401 386708 376113 381781 -2 10 7400 226519 219568 226163 -3 20 7399 119066 121923 117114 -4 30 7398 78508 85174.1 77085.4 -5 40 7397 61208.5 62506.5 57887.7 -6 50 7396 42931.5 40450.6 47382.4 -7 60 7395 26512.3 28222.6 38025.1 -8 70 7394 15614.2 24665.5 29549.3 -9 80 7393 12732.6 19231.3 21961.3 -10 90 7392 4858.11 10688.5 16084.9 -11 100 7391 -476.641 10378.8 11362.4 -12 110 7390 -2808.58 7436.26 7112.14 -13 120 7389 -3129.05 -941.638 5785.36 -14 130 7388 893.871 -1660.38 5520.21 -15 140 7387 2884.19 -5040.94 5112.23 -16 150 7386 1219.73 -8615.37 3631.5 -17 160 7385 4776.49 -12459.2 6635.7 -18 170 7384 11920.3 -12706.3 5931.05 -19 180 7383 12438.6 -11344.8 5053.35 -20 190 7382 9310.87 -7038.33 201.56 -21 200 7381 2858.29 -3112.22 -2518.63 -22 210 7380 1875.44 -3671.68 -3649.33 -23 220 7379 4609.53 -6498.92 862.52 -24 230 7378 5427 -10159.9 924.606 -25 240 7377 -2543.51 -10820.6 -3209.93 -26 250 7376 -6669.2 -7787.24 -4725.31 -27 260 7375 -3695.65 -4858.49 -1257.91 -28 270 7374 -527.913 -196.184 3661.71 -29 280 7373 3133.3 2736.26 11858.2 -30 290 7372 4024.96 559.239 10846.1 -31 300 7371 3706.75 -3983.99 9998.17 -32 310 7370 1926.55 -6507.97 9910.41 -33 320 7369 563.587 -5076.28 11095.5 -34 330 7368 2136.83 -7316.19 13191.4 -35 340 7367 909.674 -5292.47 17010.7 -36 350 7366 7123.34 -2429.23 19683.2 -37 360 7365 10907.1 -2228.4 17924.9 -38 370 7364 7563.39 -4444.58 12813.2 -39 380 7363 3185.4 -5635.84 10054.5 -40 390 7362 -300.377 1903.97 5796.6 -41 400 7361 2571.11 6244.54 528.008 -42 410 7360 -3204.3 4619.48 1042.89 -43 420 7359 -7054.88 4965.36 5761.95 -44 430 7358 -9810.46 7657.83 3335.61 -45 440 7357 -6622.62 3834.86 3295.65 -46 450 7356 -8153.33 2246.74 3347.53 -47 460 7355 -8718.25 8186.44 1093.44 -48 470 7354 -7939.44 12984.7 -3550.47 -49 480 7353 -7486.62 10697.2 -4359.1 -50 490 7352 -8220 7675.97 -6690.84 -51 500 7351 -5692.06 6800.61 -4145.38 -52 510 7350 -2219.13 7395.28 -1307.6 -53 520 7349 4070.99 10529.3 -998.76 -54 530 7348 3332.48 15846.9 -1761.35 -55 540 7347 891.165 15040.5 749.075 -56 550 7346 -2299.96 11247.6 5792.1 -57 560 7345 -5451.76 9113.58 5985.84 -58 570 7344 -1332.7 6820.72 2868.17 -59 580 7343 2025.43 6017.7 4992.37 -60 590 7342 2613.2 2237.66 5702.15 -61 600 7341 -730.553 -3002.31 171.523 -62 610 7340 1884.56 -7960.7 -605.963 -63 620 7339 6012.74 -9106.93 5709.02 -64 630 7338 4777.38 -8838.63 12794.1 -65 640 7337 7548.65 -9918.01 13259 -66 650 7336 7463.32 -9285.51 14849.6 -67 660 7335 1080.34 -7919.62 11704.4 -68 670 7334 -5103.79 -5284.31 7768.23 -69 680 7333 -3744.72 -7528.02 6750.56 -70 690 7332 -527.272 -17146.5 6564.22 -71 700 7331 -132.146 -15908.3 8834.77 -72 710 7330 114.215 -9825.81 8089.58 -73 720 7329 599.272 -9968.61 8615.06 -74 730 7328 4332.19 -8886.09 7976.36 -75 740 7327 7771.31 -3304.71 2275.81 -76 750 7326 11184.1 -3471.8 340.945 -77 760 7325 12328.7 -3285.28 -3617.22 -78 770 7324 12353.6 -1475.49 -4492.37 -79 780 7323 10114.3 393.093 1380.55 -80 790 7322 6269.61 -264.404 -1107.33 -81 800 7321 4320.7 -1835.27 -2924.99 -82 810 7320 3132.47 -590.119 -6406.99 -83 820 7319 2210.46 -125.76 -8066.53 -84 830 7318 5174.27 151.903 -5689 -85 840 7317 5600.06 1971.58 -4096.42 -86 850 7316 -728.845 4651.66 1133.13 -87 860 7315 -88.6386 111.356 5072.25 -88 870 7314 -1236.98 -4519 897.691 -89 880 7313 -953.508 -3897.9 -5375.9 -90 890 7312 -1006.46 -4898.72 -2221.83 -91 900 7311 -4414.95 -10776.9 3893.88 -92 910 7310 -3902.98 -9014.27 5497.77 -93 920 7309 -5330.44 -542.359 6335.65 -94 930 7308 278.169 8828.61 8957.83 -95 940 7307 3401.88 10193.1 5975.71 -96 950 7306 2223.62 7038.84 6649.47 -97 960 7305 4413.79 1690.5 4981.95 -98 970 7304 4080.03 -107.034 6924.29 -99 980 7303 1423.11 3383.45 10603.4 -100 990 7302 -497.785 5759.44 8061.91 -101 1000 7301 -3193.37 8086.54 5147.28 -102 1010 7300 597.186 6796.25 6913.73 -103 1020 7299 5147.96 3000.59 4177.88 -104 1030 7298 7595.17 1409.3 -1660.67 -105 1040 7297 8170.55 490.844 -1014.61 -106 1050 7296 11463.8 1502.8 -4226.09 -107 1060 7295 9965.15 1376.65 -1578.4 -108 1070 7294 9119.14 -401.3 2588.75 -109 1080 7293 7074.11 -299.764 8295.8 -110 1090 7292 7057.32 -634.888 11018.8 -111 1100 7291 5023.05 -3831.3 8841.48 -112 1110 7290 4030.83 -2165.72 1545.12 -113 1120 7289 3307.98 1978.6 -1821.63 -114 1130 7288 -2723.4 4786.42 -4867.59 -115 1140 7287 -1353.02 1911.02 -9191.67 -116 1150 7286 1909.51 2899.69 -6726.1 -117 1160 7285 1904.65 4406.81 -4515.71 -118 1170 7284 879.586 6179.1 -194.892 -119 1180 7283 -5346.15 4902.5 3460.94 -120 1190 7282 1916.17 8494.7 1563.11 -121 1200 7281 10265.7 11036.9 -628.896 -122 1210 7280 10210.6 11598.9 -1430.19 -123 1220 7279 8083.21 7157.33 -268.233 -124 1230 7278 7483.01 4911.34 1383.06 -125 1240 7277 7860.76 1078.58 1029.29 -126 1250 7276 13625.2 4775.39 -1884.44 -127 1260 7275 16836 6055.34 -1286.86 -128 1270 7274 11996.7 3788.97 -1358.54 -129 1280 7273 9237.37 5691.28 -2075.81 -130 1290 7272 -658.687 481.247 -1535.56 -131 1300 7271 -4090.5 40.6918 -1062.78 -132 1310 7270 -5454.18 1363.76 -9925.54 -133 1320 7269 -2349.93 3673.81 -11252 -134 1330 7268 454.748 2077.47 -8517.62 -135 1340 7267 1832.08 4811.55 -3311.25 -136 1350 7266 -2232.97 7960.21 -348.137 -137 1360 7265 -7202.37 3165.28 2583.98 -138 1370 7264 -11039.5 -1888.36 -2295.87 -139 1380 7263 -7706.36 -1354.15 -2806.18 -140 1390 7262 -9321.49 -25.2865 -1512.28 -141 1400 7261 -7971.08 -3467.36 3857.58 -142 1410 7260 -6529.12 1155.87 2800.86 -143 1420 7259 -1942.15 3922.9 4552.98 -144 1430 7258 50.4222 2101.51 3089.78 -145 1440 7257 -3232.81 4119.16 -849.009 -146 1450 7256 396.059 6716.69 -3838.97 -147 1460 7255 -1662.82 4924.27 -4730.91 -148 1470 7254 -4093.22 7181.56 -4577.53 -149 1480 7253 -4533.63 6727.29 -4178.34 -150 1490 7252 -907.378 10913.9 -5751.37 -151 1500 7251 -2916.74 8014.51 -4804.1 -152 1510 7250 -8149.46 7935.46 -3552.65 -153 1520 7249 -7272.32 7562.63 -575.965 -154 1530 7248 -5851.49 5464.41 3112.31 -155 1540 7247 -474.65 -218.045 2857.86 -156 1550 7246 52.9362 -1099.32 2236.16 -157 1560 7245 3124.16 -6611.75 -741.893 -158 1570 7244 7332.85 -11886.2 -2735.82 -159 1580 7243 11263.9 -15733.8 -91.9943 -160 1590 7242 9793.67 -10703.8 3422.11 -161 1600 7241 3408.12 -8326.9 6846.12 -162 1610 7240 2348.43 -12235.7 4495.35 -163 1620 7239 2617.48 -11873.4 1791.87 -164 1630 7238 4202.77 -9291.63 5701.68 -165 1640 7237 -1032.68 -10023.9 5390.29 -166 1650 7236 -5975.72 -13074.6 4612.92 -167 1660 7235 -8311.18 -10159.4 2910.44 -168 1670 7234 -9178.75 -5596 2339.55 -169 1680 7233 -6085.01 1810.06 2254.49 -170 1690 7232 -4141.54 7332.64 -4772.92 -171 1700 7231 151.554 7764.01 -5451.53 -172 1710 7230 -1619.78 7386.1 268.518 -173 1720 7229 913.037 6155.58 -347.721 -174 1730 7228 643.268 3556.71 -1323.48 -175 1740 7227 3037.13 4486.7 -1224.86 -176 1750 7226 -412.997 2259.77 -1579.81 -177 1760 7225 -4911.68 99.3105 199.042 -178 1770 7224 -4169.99 47.4418 1563.6 -179 1780 7223 1997.2 -1011.43 2913.93 -180 1790 7222 1484.03 -2142.95 4495.06 -181 1800 7221 2668.64 -4868.43 1481.78 -182 1810 7220 4173.32 -766.247 508.546 -183 1820 7219 5872.92 1058.57 2105.68 -184 1830 7218 2483.98 -1810.78 388.058 -185 1840 7217 -1695.6 -4024.59 -6150.76 -186 1850 7216 -1019.6 -2121.76 -9683.88 -187 1860 7215 -472.91 -884.6 -13214.9 -188 1870 7214 3148.31 -4172.18 -8507.67 -189 1880 7213 2724.74 -3987.42 -8690.51 -190 1890 7212 -3692.03 -1872.86 -7240.33 -191 1900 7211 -9407.05 -4888.53 -1109.92 -192 1910 7210 -8882.73 -497.829 2967.62 -193 1920 7209 -3117.12 4153.45 3510.61 -194 1930 7208 -5121.37 4752.74 4582.06 -195 1940 7207 1500.5 7867.82 6450.33 -196 1950 7206 5088 8725.93 4105.33 -197 1960 7205 3341.93 5318.32 -272.003 -198 1970 7204 3959.84 3451.85 -1290.74 -199 1980 7203 1137.65 9911.4 -173.202 -200 1990 7202 468.566 10133.8 -786.086 -76000 200 -1 0 7601 384740 377891 381348 -2 10 7600 225216 221161 225831 -3 20 7599 118316 124044 116919 -4 30 7598 77681.9 87031.8 76755 -5 40 7597 60783.3 64004.5 57224 -6 50 7596 43192.9 42044.1 45978.5 -7 60 7595 26708.3 29254 36691.5 -8 70 7594 15616 24140.1 28760.1 -9 80 7593 12304.8 18989.3 20818 -10 90 7592 5240.78 10719.5 14507.9 -11 100 7591 46.0396 10626.4 9071.66 -12 110 7590 -2986.53 7127.79 4634.74 -13 120 7589 -4439.69 -1508.64 4212.54 -14 130 7588 -1081.71 -1962.45 4464.75 -15 140 7587 909.311 -5433.51 4900.17 -16 150 7586 -563.953 -8930.04 3886.28 -17 160 7585 3629.3 -11932.3 6702.6 -18 170 7584 10761.9 -12456.6 5944.19 -19 180 7583 11080.5 -10766.5 4361.17 -20 190 7582 8242.87 -5282.38 -576.688 -21 200 7581 2087.09 -773.708 -2915.49 -22 210 7580 2240.99 -449.937 -3840.12 -23 220 7579 5041.34 -2833.26 271.301 -24 230 7578 5678.34 -6358.42 129.559 -25 240 7577 -2645.67 -7519.61 -3791.89 -26 250 7576 -6167.55 -4375.62 -5111.36 -27 260 7575 -2314.06 -1824.01 -1782.72 -28 270 7574 789.194 2603.13 3796.23 -29 280 7573 3843.51 4790.88 11718.3 -30 290 7572 3975.44 2156.73 11345.3 -31 300 7571 3903.34 -3315.46 9968.8 -32 310 7570 2401.89 -6433.05 10665.1 -33 320 7569 1376.35 -5477.76 12213.2 -34 330 7568 2657.38 -7951.46 14164.1 -35 340 7567 952.096 -6421.62 17976.6 -36 350 7566 7403 -3431.9 20632.2 -37 360 7565 11084.2 -2481.87 19311.6 -38 370 7564 7603.41 -4303.77 13565.2 -39 380 7563 2859.17 -5047.67 10734 -40 390 7562 -1399.97 1967.68 6621.38 -41 400 7561 1027.42 6036.28 1112.78 -42 410 7560 -5227.38 4479 1911.62 -43 420 7559 -8871.41 5036.76 5860.54 -44 430 7558 -11611 7143.75 3003.2 -45 440 7557 -8274.86 3374.22 2844.16 -46 450 7556 -10254.8 1754.83 3513.2 -47 460 7555 -11012 8059.97 1592.39 -48 470 7554 -10006.3 12357.9 -3126.9 -49 480 7553 -10051.4 10048.2 -3593.54 -50 490 7552 -9990.06 6681.21 -6422.57 -51 500 7551 -7606.64 6666.43 -4832.03 -52 510 7550 -3925.86 7579.68 -2927.58 -53 520 7549 2768.18 10545.4 -3202.77 -54 530 7548 2224.44 14984 -3535.23 -55 540 7547 569.743 13539.5 -943.627 -56 550 7546 -2949.51 10121 3984.24 -57 560 7545 -6229.88 7497.8 4830.31 -58 570 7544 -2241.2 4584.53 2254.45 -59 580 7543 1443.4 3605.37 4622.19 -60 590 7542 2600.84 6.10625 5411.8 -61 600 7541 -111.772 -3620.91 -153.77 -62 610 7540 2512.63 -7712.33 -621.147 -63 620 7539 6238.57 -9180.58 5490.02 -64 630 7538 4689.53 -8715.13 13051.2 -65 640 7537 7302.58 -8767.48 13360.3 -66 650 7536 7480.24 -7773.93 15664.3 -67 660 7535 831.533 -6109.68 12460.2 -68 670 7534 -5572.11 -4679 9179.27 -69 680 7533 -3766.6 -8525.9 8383.82 -70 690 7532 -1165.69 -18539.2 7498.28 -71 700 7531 -1116.85 -17114 9024.25 -72 710 7530 -1005.02 -11162.5 8384.39 -73 720 7529 2.6145 -10898.6 9517.06 -74 730 7528 4091.67 -9244.48 9141.31 -75 740 7527 7367.09 -3507.86 3430.63 -76 750 7526 10303.5 -3900.06 1374.14 -77 760 7525 10555 -4883.83 -3159.56 -78 770 7524 10417.1 -3082.2 -3817.59 -79 780 7523 8519.7 -2229.16 1552.15 -80 790 7522 4929.69 -3108.37 -930.543 -81 800 7521 2282.66 -5150.67 -3002.5 -82 810 7520 1691.9 -4076.5 -6115.1 -83 820 7519 2161.8 -3148.74 -7809.23 -84 830 7518 5418.54 -2137.12 -5936.26 -85 840 7517 5820.76 -157.042 -4359.34 -86 850 7516 -593.042 2724.78 1146.68 -87 860 7515 761.985 -712.675 4512.34 -88 870 7514 22.5446 -4246.28 64.9373 -89 880 7513 811.353 -3427.44 -6233.16 -90 890 7512 1322.98 -4354.81 -3173.62 -91 900 7511 -2620.68 -10340.4 3112.73 -92 910 7510 -1949.9 -8983.26 3744.31 -93 920 7509 -3222.34 -36.8974 4416.59 -94 930 7508 2166.2 8945.8 7850.31 -95 940 7507 5439.81 9803.14 6000.76 -96 950 7506 4198.26 6493.27 7016.37 -97 960 7505 6192.19 1265.93 5730.65 -98 970 7504 5183.34 -799.974 8452.48 -99 980 7503 2085.56 2047.58 12493.4 -100 990 7502 110.305 4385.02 9659.59 -101 1000 7501 -2547.74 6373.71 6405.56 -102 1010 7500 956.604 4694.17 8100.73 -103 1020 7499 4270.34 1509.76 5565.87 -104 1030 7498 6630.02 -75.7305 -142.889 -105 1040 7497 7432.47 -1429.03 630.604 -106 1050 7496 11267.5 -1423.91 -2115.94 -107 1060 7495 9491.99 -1792.54 497.335 -108 1070 7494 8329.43 -3177.06 4240.03 -109 1080 7493 7211.56 -3016.78 8776.49 -110 1090 7492 8010.89 -3452.21 10666.7 -111 1100 7491 6246.45 -5593.46 8879.29 -112 1110 7490 4957.06 -3600.6 2086.23 -113 1120 7489 3913.47 1759.66 -1536.46 -114 1130 7488 -1881.16 4978.75 -4796.52 -115 1140 7487 -524.977 1974.82 -9252.02 -116 1150 7486 2558.53 3425.07 -7225.52 -117 1160 7485 2077.4 4769.18 -4924.38 -118 1170 7484 1485.33 5748.31 -484.135 -119 1180 7483 -4170.86 3967.91 2820.02 -120 1190 7482 3392.7 6686.57 601.763 -121 1200 7481 11454.1 8149.41 -993.38 -122 1210 7480 10804.6 8697.41 -1141.99 -123 1220 7479 8779.9 3934.32 -113.18 -124 1230 7478 7748.99 2143.9 1481.76 -125 1240 7477 8089.03 -946.948 1527.83 -126 1250 7476 13549.1 2994.85 -1472.75 -127 1260 7475 16715.2 4207.42 -735.646 -128 1270 7474 12333.7 2210.01 -720.372 -129 1280 7473 10153.7 3905.37 -867.142 -130 1290 7472 -195.55 -1354.85 -709.135 -131 1300 7471 -3641.02 -3123.4 -115.377 -132 1310 7470 -4676.58 -1195.81 -8833.81 -133 1320 7469 -2020.2 1550.81 -9223.2 -134 1330 7468 1312.09 698.239 -6931.75 -135 1340 7467 2105.12 3749.72 -2581.17 -136 1350 7466 -2218.48 7706.84 210.464 -137 1360 7465 -7036.54 2988.07 2955.82 -138 1370 7464 -11442.4 -1184.11 -2575.04 -139 1380 7463 -8551.04 -399.117 -2730.95 -140 1390 7462 -10792.5 832.368 -421.875 -141 1400 7461 -9501.38 -3038.9 5894.11 -142 1410 7460 -7817.59 545.914 4757.55 -143 1420 7459 -3030.1 2768.85 6090.42 -144 1430 7458 -326.435 810.737 4170.02 -145 1440 7457 -3663.69 2720.58 679.577 -146 1450 7456 -176.112 5029.16 -2549.03 -147 1460 7455 -2184.21 3171.96 -3460.39 -148 1470 7454 -4128.85 6062.36 -3324.19 -149 1480 7453 -4775.55 5909.37 -3284.5 -150 1490 7452 -1149.43 9804.7 -6228.04 -151 1500 7451 -2589.37 7213.68 -6527.4 -152 1510 7450 -8105.82 6786.6 -4826.5 -153 1520 7449 -7046.44 7388.55 -1364.18 -154 1530 7448 -5463.69 5711.29 2627.64 -155 1540 7447 -501.818 938.409 2604.25 -156 1550 7446 -179.997 809.664 1731.76 -157 1560 7445 2723.48 -4894.31 -1374.27 -158 1570 7444 7736.35 -10460.8 -2930.47 -159 1580 7443 11401.3 -13718.3 -346.135 -160 1590 7442 9952.02 -8816.39 3429.58 -161 1600 7441 4227.02 -6152.61 7582.17 -162 1610 7440 3461.3 -10504.1 5464.93 -163 1620 7439 3134.58 -9143.21 2040.8 -164 1630 7438 3861.09 -6538.81 5858.11 -165 1640 7437 -1154.13 -7336.87 5136.47 -166 1650 7436 -5660.8 -9908.52 4186.54 -167 1660 7435 -7693.41 -7833.75 2670.53 -168 1670 7434 -8437 -3950.84 1856.38 -169 1680 7433 -5309.87 2814.42 1725.25 -170 1690 7432 -3494.56 7401.85 -4408.99 -171 1700 7431 872.098 7808.49 -4954.45 -172 1710 7430 -676.346 7360.85 515.547 -173 1720 7429 1372.89 5710.95 -363.935 -174 1730 7428 1108.13 3023.03 -1111.67 -175 1740 7427 3097.23 4764.08 -700.669 -176 1750 7426 -778.817 2903.21 -851.24 -177 1760 7425 -6042.6 994.33 1222.54 -178 1770 7424 -4786.16 1587.18 2535.44 -179 1780 7423 2208.71 1053.12 3712.67 -180 1790 7422 2025.66 209.99 4807.09 -181 1800 7421 3287.8 -3006.94 1869.51 -182 1810 7420 4459.46 716.659 1021.02 -183 1820 7419 6633.3 2731.53 2494.28 -184 1830 7418 3719.91 -170.036 117.266 -185 1840 7417 -1035.46 -2877.96 -7249.32 -186 1850 7416 -1148.44 -1096.08 -10554.5 -187 1860 7415 -603.215 485.963 -13141 -188 1870 7414 4025.62 -2420.06 -8647.06 -189 1880 7413 4017.56 -2003.57 -8261.13 -190 1890 7412 -2131.56 209.9 -6558.99 -191 1900 7411 -7552.04 -2155.17 -1091.92 -192 1910 7410 -7454.54 2650.73 1856.13 -193 1920 7409 -1808.63 7159.21 2856.3 -194 1930 7408 -4026.22 7991.51 4225.95 -195 1940 7407 2195.37 9947.57 5867.59 -196 1950 7406 5058.56 10155.7 2883.8 -197 1960 7405 3440.39 6854.74 -1610.77 -198 1970 7404 4212.59 4854.43 -2610.72 -199 1980 7403 1871.89 11784.1 -854.252 -200 1990 7402 1310.38 12081.3 -1364.67 -78000 200 -1 0 7801 383498 376069 380100 -2 10 7800 224322 219926 224903 -3 20 7799 117560 123264 116173 -4 30 7798 76747.8 85465.1 75983 -5 40 7797 58983.7 63002.3 56581.1 -6 50 7796 41492.5 41554.9 45912.1 -7 60 7795 25841 29228.8 36837.5 -8 70 7794 15154.9 24095.5 28844 -9 80 7793 11441.5 18910 20007.4 -10 90 7792 3752.97 11294.4 14033.3 -11 100 7791 -1248.58 11042 9181.24 -12 110 7790 -3504.07 7132.16 4570.47 -13 120 7789 -5732.88 -1987.07 4294.18 -14 130 7788 -2324.38 -2174.07 4416.4 -15 140 7787 -267.935 -5395.83 4912.54 -16 150 7786 -1679.88 -8585.3 4282.85 -17 160 7785 2413.08 -11416.4 7630.88 -18 170 7784 9565.78 -11800.9 7733.89 -19 180 7783 10495 -10553.1 6145.58 -20 190 7782 7822.54 -5524.46 650.45 -21 200 7781 1429.47 -1030.81 -1801.9 -22 210 7780 1548.06 -921.552 -2470.32 -23 220 7779 5400 -3396.73 1637.24 -24 230 7778 6572.58 -7028.35 2071.67 -25 240 7777 -1052.96 -8320.93 -1858.1 -26 250 7776 -4496.44 -5839.96 -4254.57 -27 260 7775 -1147.39 -2627.84 -1628.97 -28 270 7774 1039.9 2388.38 3818.17 -29 280 7773 3597.9 4675.56 11890.8 -30 290 7772 4441.23 1762.97 10979.2 -31 300 7771 4484.73 -4266.05 9784.21 -32 310 7770 3256.56 -8253.15 10711.8 -33 320 7769 2555.04 -7921.63 12023.3 -34 330 7768 3484.85 -9581.54 14498.6 -35 340 7767 1568.36 -7800.14 18054 -36 350 7766 7780.75 -4650.96 20188.8 -37 360 7765 10989.2 -4352.73 18527.3 -38 370 7764 6745.13 -5714.12 13217.5 -39 380 7763 1950.71 -6486.61 11320.9 -40 390 7762 -2743.95 561.668 7457.71 -41 400 7761 -384.34 4606.76 2224.67 -42 410 7760 -5970.84 3121.46 2683.32 -43 420 7759 -8530.73 4046.43 5739.72 -44 430 7758 -11320.1 7298.75 2471.21 -45 440 7757 -8811.88 4179.94 2553.4 -46 450 7756 -10837.5 2615.85 3895.47 -47 460 7755 -11761.7 8387.53 1516.9 -48 470 7754 -10848.1 11680.5 -3716.25 -49 480 7753 -10651.8 9703.25 -3932.12 -50 490 7752 -9924.93 6872.82 -7104.94 -51 500 7751 -7386.43 7167.58 -5597.8 -52 510 7750 -3703.61 7143.62 -4152.68 -53 520 7749 2696.92 9308.92 -4659.25 -54 530 7748 2277.36 13381.3 -4738.51 -55 540 7747 533.172 11884.8 -1962.3 -56 550 7746 -2354.23 9190.71 3784.6 -57 560 7745 -4715.63 7111.87 4587.17 -58 570 7744 -689.129 4093.72 1810.05 -59 580 7743 3004.91 3076.71 4323.43 -60 590 7742 3906.91 57.757 5432.25 -61 600 7741 1129.23 -4078.78 295.887 -62 610 7740 3909.79 -8212.41 -321.927 -63 620 7739 7338.03 -9385.67 5497.3 -64 630 7738 5188.67 -9068.88 12325 -65 640 7737 7765.24 -8941.56 12176.1 -66 650 7736 7819.74 -7756.89 15272.6 -67 660 7735 1656.09 -5745.58 12786.2 -68 670 7734 -5031.21 -4642.49 9840.22 -69 680 7733 -3888.04 -8087.65 8806.01 -70 690 7732 -2001.95 -17936.7 7742.94 -71 700 7731 -2486.96 -16784.3 8943.51 -72 710 7730 -1848.6 -11175.1 8281.48 -73 720 7729 -1140.62 -10218.6 9869.22 -74 730 7728 2762.11 -8897.5 9350.01 -75 740 7727 6279.22 -3350.51 2750.5 -76 750 7726 9052.78 -3473.29 -158.576 -77 760 7725 9853.43 -4247.96 -4099.64 -78 770 7724 10083.4 -1980.51 -4885.63 -79 780 7723 7818.02 -891.031 731.496 -80 790 7722 4062.98 -1607.27 -1455.88 -81 800 7721 1587.32 -4285.17 -3584.9 -82 810 7720 1292.98 -3373.27 -7011.57 -83 820 7719 2127.02 -2979.4 -8422.39 -84 830 7718 5425.76 -2019.17 -5680.07 -85 840 7717 6136.19 -428.703 -3849.48 -86 850 7716 360.716 3236.26 1368.53 -87 860 7715 1071.33 293.867 4809.78 -88 870 7714 505.234 -3372.18 374.983 -89 880 7713 1864.69 -2443.54 -5365 -90 890 7712 2005.57 -3333.72 -1986.34 -91 900 7711 -1785.52 -9421.42 4613.72 -92 910 7710 -1240.03 -8081.31 4713.19 -93 920 7709 -2365.77 843.381 4495.68 -94 930 7708 2849.52 9618.65 8230.32 -95 940 7707 5577.53 10798.9 6352.85 -96 950 7706 3723.4 7845.82 7456.26 -97 960 7705 5204.53 2522.28 6164.29 -98 970 7704 3984.08 102.084 8611.32 -99 980 7703 1691.2 2227.23 12553.2 -100 990 7702 270.181 4608.25 10166.5 -101 1000 7701 -2751.9 5847.38 8082.05 -102 1010 7700 488.486 4749.82 9364.93 -103 1020 7699 3597.49 1960.95 5796.93 -104 1030 7698 5858.85 70.0569 177.455 -105 1040 7697 6365.33 -1336.2 815.22 -106 1050 7696 9694.79 -1254.85 -1565.93 -107 1060 7695 8800.27 -1690.47 1665.32 -108 1070 7694 7740.86 -2505.7 4937.6 -109 1080 7693 6948.38 -2747.67 8753.32 -110 1090 7692 8138.39 -3244.07 10795.1 -111 1100 7691 5602.04 -5675.83 9709.46 -112 1110 7690 4282.46 -3960.02 3064.21 -113 1120 7689 3511.73 1452.8 -236.592 -114 1130 7688 -1902.75 4523.61 -2973.21 -115 1140 7687 -679.481 1924.9 -7855.42 -116 1150 7686 2303.27 3132.69 -5866.67 -117 1160 7685 1872.42 4344.66 -3431.83 -118 1170 7684 1906.38 4681.23 1104.25 -119 1180 7683 -3269.45 3123.12 4280.92 -120 1190 7682 5011.79 5536.38 1260.74 -121 1200 7681 13174.4 7129.37 -1004.56 -122 1210 7680 12256.4 7516.42 -1409.49 -123 1220 7679 10171.4 3790.12 -159.683 -124 1230 7678 9174.5 2434.13 1389.01 -125 1240 7677 9476.24 -848.039 1676.69 -126 1250 7676 14473.9 2221.22 -762.81 -127 1260 7675 16545.5 2768.85 -42.6202 -128 1270 7674 11941.7 215.213 -10.5048 -129 1280 7673 9847.91 2378.12 19.3048 -130 1290 7672 -783.145 -2599.17 971.777 -131 1300 7671 -3976.69 -4272.97 1844.83 -132 1310 7670 -4962.81 -2363.06 -6128.58 -133 1320 7669 -2655.43 694.695 -5940.59 -134 1330 7668 -93.9814 -128.149 -3900.37 -135 1340 7667 571.598 3063.24 -19.9544 -136 1350 7666 -3428.57 7403.62 1950.71 -137 1360 7665 -8958.94 3430.97 3654.66 -138 1370 7664 -13388.4 -820.644 -2343.57 -139 1380 7663 -10557.8 -302.95 -2537.07 -140 1390 7662 -12440.3 976.106 186.691 -141 1400 7661 -10839.4 -2640.4 5794.46 -142 1410 7660 -8534.81 846.675 4068.91 -143 1420 7659 -2684.62 2890.72 4458.45 -144 1430 7658 450.576 1111.31 3020.35 -145 1440 7657 -2472.56 3892.32 -226.848 -146 1450 7656 1078.31 6665.22 -2797.28 -147 1460 7655 -579.426 4659.19 -2830.11 -148 1470 7654 -2958 6583.48 -3310.73 -149 1480 7653 -3455.56 6452.86 -2900.24 -150 1490 7652 434.771 9957.8 -5562.19 -151 1500 7651 -778.882 7487.44 -5434.58 -152 1510 7650 -6290.13 7411.12 -3766.9 -153 1520 7649 -5886.88 8110.17 -819.686 -154 1530 7648 -3954.81 6381.18 2714.66 -155 1540 7647 1076.43 1435.85 2389.66 -156 1550 7646 881.933 845.441 2198.4 -157 1560 7645 3380.98 -4805.09 -289.725 -158 1570 7644 8390.39 -10339.6 -2306.6 -159 1580 7643 11110.1 -12858.3 109.284 -160 1590 7642 8756.98 -8196.13 3321.19 -161 1600 7641 2451.22 -5862.53 7436.09 -162 1610 7640 851.196 -9960.04 4984.18 -163 1620 7639 916.028 -8465.42 1505.93 -164 1630 7638 1886.21 -5784.88 5617.89 -165 1640 7637 -2210.81 -6631.39 4629.95 -166 1650 7636 -6082.18 -9675.18 3641.34 -167 1660 7635 -8469.3 -7173.78 2533.77 -168 1670 7634 -9467.24 -2913.43 2103.56 -169 1680 7633 -6434.8 4012.11 2552.24 -170 1690 7632 -4493.62 8139.46 -3318.06 -171 1700 7631 477.281 8423.76 -4133.14 -172 1710 7630 -1210.94 8429.48 1236.44 -173 1720 7629 1249.92 7705.62 588.287 -174 1730 7628 1842.57 4892.31 -380.159 -175 1740 7627 3867.59 6743.42 -377.356 -176 1750 7626 644.935 3526.13 -1023.39 -177 1760 7625 -4800.08 767.612 786.226 -178 1770 7624 -3845.21 1076.62 2599.91 -179 1780 7623 1513.29 593.794 3853.72 -180 1790 7622 1896.89 -723.89 4809.96 -181 1800 7621 3683.43 -3834.21 1362.06 -182 1810 7620 5296.62 570.948 -227.575 -183 1820 7619 6805.58 3070.49 699.963 -184 1830 7618 3960.71 242.393 -1253.07 -185 1840 7617 -266.521 -2744.99 -7958.22 -186 1850 7616 -673.877 -1232.58 -10856.1 -187 1860 7615 24.6036 -93.7201 -12892.3 -188 1870 7614 4408.77 -2056.47 -8391.8 -189 1880 7613 3931.1 -1083.2 -7799.48 -190 1890 7612 -2728.6 704.979 -5718.83 -191 1900 7611 -7742.93 -1449.15 168.991 -192 1910 7610 -7340.2 2972.01 3792.69 -193 1920 7609 -2276.33 7193.54 4771.88 -194 1930 7608 -4951.75 8104.55 5504.13 -195 1940 7607 365.568 10121.7 6913.62 -196 1950 7606 3120.72 10333.4 3841.73 -197 1960 7605 1724.12 7686.37 -589.467 -198 1970 7604 2925.09 5665.38 -1665.06 -199 1980 7603 743.321 11612.4 -60.5255 -200 1990 7602 -328.155 11613.2 -432.873 -80000 200 -1 0 8001 383542 375945 381079 -2 10 8000 223917 219479 225856 -3 20 7999 116292 122016 117025 -4 30 7998 75269.3 84058.9 76382.2 -5 40 7997 57158.5 62314.7 56040.4 -6 50 7996 39318 41502 44171.2 -7 60 7995 24064.9 28004.8 34663.3 -8 70 7994 14055 21912.4 26175.8 -9 80 7993 10898.9 16633.2 16948.3 -10 90 7992 2862.61 9797.05 11028 -11 100 7991 -1867.74 10117.1 6871.5 -12 110 7990 -3297.27 6044.07 3062.19 -13 120 7989 -5432.42 -2915.66 3499.78 -14 130 7988 -2120.43 -3232.24 4231.08 -15 140 7987 -354.532 -6438.3 5102.73 -16 150 7986 -1543.09 -8773.46 4472.91 -17 160 7985 2542.79 -11386.8 7662.01 -18 170 7984 8701.27 -10480.4 8491.86 -19 180 7983 8992.26 -9660.64 7254.03 -20 190 7982 6347.9 -5932.57 2665.21 -21 200 7981 92.9773 -1045.49 298.99 -22 210 7980 619.863 -415.909 -409.232 -23 220 7979 4866.34 -1920.39 3103.88 -24 230 7978 6355.48 -5808.23 3752.26 -25 240 7977 -875.765 -7642.6 504.148 -26 250 7976 -3923.19 -4849.26 -1994.35 -27 260 7975 -763.612 -422.358 -615 -28 270 7974 1108.95 4653.86 3561.51 -29 280 7973 3942.08 5655.52 11095.3 -30 290 7972 5403.91 1853.24 9957.23 -31 300 7971 4118.2 -5170.61 8054.32 -32 310 7970 2103.74 -9194.42 8410.44 -33 320 7969 1201.05 -8726.12 9600.21 -34 330 7968 2203.63 -10738.4 12269.5 -35 340 7967 1367.49 -9105.39 15975.3 -36 350 7966 8341.07 -6050.39 18533.8 -37 360 7965 11963.8 -5560.42 18142.9 -38 370 7964 7590.67 -5745.87 13285.2 -39 380 7963 2421.36 -5915.09 12684.4 -40 390 7962 -2281.28 499.017 9679.98 -41 400 7961 432.646 4004.41 4550.72 -42 410 7960 -5360.23 2751.7 5385.07 -43 420 7959 -7830.83 4134.01 8492.55 -44 430 7958 -11300.5 7707.65 5385.91 -45 440 7957 -9553.08 4889.43 4372.81 -46 450 7956 -12103.2 2911.82 4583.05 -47 460 7955 -13043.2 8730.56 601.543 -48 470 7954 -11773.5 12065 -5173.12 -49 480 7953 -11441.1 9700.59 -5383.95 -50 490 7952 -10335.3 6429.7 -8023.03 -51 500 7951 -7532.01 5472.75 -6889.76 -52 510 7950 -3730.64 5696.5 -5776.87 -53 520 7949 1748.54 8328.57 -5947.9 -54 530 7948 1465.01 12769.6 -5959.44 -55 540 7947 68.7683 11184.5 -2922.04 -56 550 7946 -2378.96 8134.05 3251.82 -57 560 7945 -3890.49 5878.41 4671.55 -58 570 7944 534.669 2413.84 1489.21 -59 580 7943 4208.11 1960.84 2608.53 -60 590 7942 4209.77 -648.627 3519.39 -61 600 7941 -344.046 -4195.48 -1037.52 -62 610 7940 1856.53 -7834.42 -1136.42 -63 620 7939 5591.46 -9398.36 6072.13 -64 630 7938 3390.58 -9207.85 13453.5 -65 640 7937 6691.13 -8596.88 13320.5 -66 650 7936 7808.91 -7090.5 16113.9 -67 660 7935 2107.66 -5244.51 13694.2 -68 670 7934 -4951.38 -5169.49 10435.5 -69 680 7933 -4355.09 -8538.23 9171.74 -70 690 7932 -1826.68 -18301.3 7376.27 -71 700 7931 -1669.35 -17067.8 7730.16 -72 710 7930 -1284.96 -10677.4 6354.96 -73 720 7929 70.2148 -9894.8 7642.74 -74 730 7928 4217.13 -8809.78 7101.71 -75 740 7927 6520.7 -3599.38 1612.68 -76 750 7926 8947.99 -2721.23 -1000.86 -77 760 7925 10275.3 -3207.09 -4394.24 -78 770 7924 10405.1 -1799.11 -4732.78 -79 780 7923 8308.29 -731.185 629.547 -80 790 7922 4140.13 -1403.36 -588.898 -81 800 7921 1941.44 -3644.5 -1797.44 -82 810 7920 1441.77 -2216.33 -5330.25 -83 820 7919 2306.74 -2431.49 -7164.3 -84 830 7918 5414.87 -1917.96 -4906.75 -85 840 7917 6669.76 -205.961 -3692.36 -86 850 7916 1713.81 3932.99 1374.86 -87 860 7915 2210.58 1301.93 4255.49 -88 870 7914 1462.45 -2931.71 -396.383 -89 880 7913 1787.17 -1272.89 -5261.73 -90 890 7912 1062.96 -2415.62 -1612.17 -91 900 7911 -2768.29 -8268.39 4203.2 -92 910 7910 -2575.8 -7502.22 3764.24 -93 920 7909 -3519.63 642.05 3427.95 -94 930 7908 3481.8 9461.73 7162.7 -95 940 7907 5763.06 10310 5234.17 -96 950 7906 3716.57 6886.87 6384.91 -97 960 7905 5392.97 1234.67 4244.72 -98 970 7904 3771.26 -1727.6 6566.7 -99 980 7903 1086.25 1153.56 10752.3 -100 990 7902 -491.16 3628.54 8450.17 -101 1000 7901 -3250.35 4496.35 6293.04 -102 1010 7900 385.416 3880.57 7350.18 -103 1020 7899 2517.69 1721.76 3916.97 -104 1030 7898 3850.67 1183.28 -851.653 -105 1040 7897 4925.44 -614.521 954.793 -106 1050 7896 8365 -418.077 -347.184 -107 1060 7895 7769.86 -767.303 2871.9 -108 1070 7894 7498.59 -1546.77 6056.28 -109 1080 7893 7377.4 -2296.82 9436.06 -110 1090 7892 8699.81 -3852.47 10691.1 -111 1100 7891 5742.4 -5975.14 9643.06 -112 1110 7890 4803.25 -3769.15 2906.57 -113 1120 7889 4885.43 1937.52 -506.826 -114 1130 7888 -516.33 4852.35 -3808.98 -115 1140 7887 181.73 1644.02 -9528.72 -116 1150 7886 2527.45 3083.93 -7668.13 -117 1160 7885 716.405 4544.14 -4904.73 -118 1170 7884 75.7843 4524.14 -77.6919 -119 1180 7883 -4981.65 1638.18 4027.15 -120 1190 7882 3939.54 3636.43 1273.91 -121 1200 7881 12544.5 5589.04 -1630.38 -122 1210 7880 12097.7 6671.04 -2537.67 -123 1220 7879 10835.9 3302.66 -928.622 -124 1230 7878 9635.34 1404.45 962.085 -125 1240 7877 9190.59 -2142.03 1538.33 -126 1250 7876 13822.8 1090.81 -1008.44 -127 1260 7875 15369.3 1584.19 -1015.17 -128 1270 7874 11386.9 -425.233 -902.584 -129 1280 7873 9656.1 1990.51 582.427 -130 1290 7872 -296.978 -2869.93 1944.28 -131 1300 7871 -3293.08 -4029.77 3168.33 -132 1310 7870 -4255.5 -2165.69 -4565.35 -133 1320 7869 -2460.2 879.023 -5510.62 -134 1330 7868 -427.976 818.959 -3731.91 -135 1340 7867 -261.043 3551.07 -574.144 -136 1350 7866 -3336.59 6186.55 614.674 -137 1360 7865 -8637.37 1837.3 2145.32 -138 1370 7864 -12831.3 -1837.85 -3049.9 -139 1380 7863 -9777.2 -610.501 -3578.51 -140 1390 7862 -12228.6 1249.27 -1252.4 -141 1400 7861 -11411.8 -1991.63 4732.35 -142 1410 7860 -8932.06 1085.33 2968.63 -143 1420 7859 -2186.37 2799.19 3280.17 -144 1430 7858 1908.34 851.909 2765.37 -145 1440 7857 -1023.02 3442.92 86.9808 -146 1450 7856 1208.7 5987.72 -2609.26 -147 1460 7855 -229.577 3947.25 -2579.99 -148 1470 7854 -2696.77 6127.35 -2686.32 -149 1480 7853 -3428.63 6612.87 -1541.55 -150 1490 7852 652.342 10778.8 -3925.39 -151 1500 7851 -662.988 9071.06 -3881.1 -152 1510 7850 -4906.53 9238.95 -2528.92 -153 1520 7849 -4505.66 8389.84 6.57753 -154 1530 7848 -3929.65 6200.19 3261.06 -155 1540 7847 999.729 2081.69 3195.94 -156 1550 7846 1501.65 1421.75 3090.99 -157 1560 7845 3082.27 -3371.02 372.521 -158 1570 7844 8184.34 -9117.68 -1967.07 -159 1580 7843 10940.4 -12449.9 347.672 -160 1590 7842 9107.11 -8051.47 3140.43 -161 1600 7841 3112.34 -5368.49 7445.74 -162 1610 7840 1520.8 -9799.46 5652.7 -163 1620 7839 2153.62 -9398.34 2308.46 -164 1630 7838 2932.49 -7261.02 5634.01 -165 1640 7837 -1688.89 -8163.31 4696.02 -166 1650 7836 -5569.06 -10579.2 2925.33 -167 1660 7835 -8056.22 -7048.83 1376.02 -168 1670 7834 -9574.35 -1955.02 1495.77 -169 1680 7833 -7248.94 5225.85 2241.51 -170 1690 7832 -5723.72 9137.65 -3149.14 -171 1700 7831 -420.727 8799.73 -4626.69 -172 1710 7830 -1545.32 9175.88 1175.41 -173 1720 7829 852.484 7849.52 1468.07 -174 1730 7828 1633.44 4705.03 1268.51 -175 1740 7827 2731.09 6575.94 1507.9 -176 1750 7826 -1260.56 3186.65 372.313 -177 1760 7825 -5960.88 1055.72 1473.03 -178 1770 7824 -3567.63 1701.83 2661.45 -179 1780 7823 2527.36 908.071 4236 -180 1790 7822 2566.41 -1064.5 5730.7 -181 1800 7821 3971.16 -4228.22 2143.42 -182 1810 7820 5527.98 350.046 646.775 -183 1820 7819 6026.7 3792.51 1156.22 -184 1830 7818 3575.56 1403.27 -497.973 -185 1840 7817 609.852 -1714.16 -6920.39 -186 1850 7816 -10.0413 -1580.33 -10214.7 -187 1860 7815 717.106 -1049.2 -12180.1 -188 1870 7814 4574.12 -2560.34 -8238.48 -189 1880 7813 4007.24 -2147.21 -7607.26 -190 1890 7812 -2611.34 -321.218 -5626.66 -191 1900 7811 -7915.29 -3225.99 -225.946 -192 1910 7810 -8124.94 1805.94 2771.88 -193 1920 7809 -3786.3 6984.79 4194.15 -194 1930 7808 -5978.11 8737.56 5918.76 -195 1940 7807 608.66 10942.5 7377.99 -196 1950 7806 3533.29 10881.9 5002.05 -197 1960 7805 1232.44 7511.24 952.037 -198 1970 7804 2624.79 6152.95 -356.728 -199 1980 7803 -20.506 12215.7 1017.7 -200 1990 7802 -1241.55 12114.1 1157.15 -82000 200 -1 0 8201 384373 376191 383439 -2 10 8200 225113 219173 226709 -3 20 8199 117697 121016 116567 -4 30 8198 76329 82991.4 75236.5 -5 40 8197 57981.4 61096.1 55820.2 -6 50 8196 40456.8 40183 44047.8 -7 60 8195 25260.3 26849.1 33851.1 -8 70 8194 15080.9 20560 24414.5 -9 80 8193 11665 16088.7 15454.2 -10 90 8192 2998.63 9401.89 9910.36 -11 100 8191 -1330.35 9393.16 5703.33 -12 110 8190 -2395.46 5930.25 2430.17 -13 120 8189 -4594.45 -1673.45 3629.3 -14 130 8188 -899.979 -1415.55 4422.4 -15 140 8187 586.154 -4618.29 4348.42 -16 150 8186 -1091.1 -7017.49 3669.15 -17 160 8185 1894.22 -10154.5 6915.12 -18 170 8184 7390.91 -10409.3 7399.56 -19 180 8183 7159.44 -10134.5 5369.97 -20 190 8182 5541.96 -6445.94 136.797 -21 200 8181 -555.775 -1017.84 -1720.78 -22 210 8180 -280.605 -743.456 -1840.59 -23 220 8179 3882.52 -3066.92 1664.75 -24 230 8178 5817.66 -5978.31 1720.77 -25 240 8177 -843.698 -7453.29 -687.379 -26 250 8176 -3433.76 -4538.67 -1882.28 -27 260 8175 -515.525 -385.676 42.6625 -28 270 8174 1736.86 4799.2 4226.82 -29 280 8173 4161.51 6655.68 11414.1 -30 290 8172 5098.43 3561.3 9631.24 -31 300 8171 3903.18 -3762.11 8218.08 -32 310 8170 1156.21 -8418.3 9424.3 -33 320 8169 648.225 -8558.32 10816.5 -34 330 8168 2273.04 -10572.9 13088.9 -35 340 8167 1865.59 -8886.2 15895.5 -36 350 8166 9054.5 -5842.95 18071.3 -37 360 8165 12754.9 -5381.21 18087.2 -38 370 8164 8455.54 -5891.46 13919.2 -39 380 8163 3609.27 -5609.68 13418.7 -40 390 8162 -1129.63 1411.11 10815.9 -41 400 8161 1862.76 4923.84 6028.81 -42 410 8160 -3958.47 4042.07 6937.23 -43 420 8159 -6921.73 4924 8792.33 -44 430 8158 -10866.5 7834.36 5175.03 -45 440 8157 -9992.66 4299.45 2965.84 -46 450 8156 -13005 2229.86 2884.52 -47 460 8155 -13963.5 7767.2 -1441.38 -48 470 8154 -11667.4 10387.8 -7216.31 -49 480 8153 -11095.2 7908.13 -7446.2 -50 490 8152 -10046.8 4950.72 -9571.93 -51 500 8151 -7610.42 4657.98 -8518.36 -52 510 8150 -3430.19 5693.33 -7120.24 -53 520 8149 1892.73 7801.14 -6132.86 -54 530 8148 1813.13 12307.9 -4788.4 -55 540 8147 807.32 11844.5 -1326.51 -56 550 8146 -1492.07 9099.91 4610.58 -57 560 8145 -3501.92 6607.49 5763.43 -58 570 8144 678.924 2610.48 2402.89 -59 580 8143 4170.08 2722.6 2868.8 -60 590 8142 3987.5 940.999 2905.83 -61 600 8141 257.465 -3396.3 -2419.85 -62 610 8140 3080.18 -7993.19 -2670.67 -63 620 8139 6821.87 -9133.33 4601.67 -64 630 8138 3780.08 -8980.92 12466.5 -65 640 8137 6403.35 -8374.11 12200 -66 650 8136 6651.69 -7604.69 15494.5 -67 660 8135 2014.35 -5698.67 13494.5 -68 670 8134 -4719.58 -5056.31 10696 -69 680 8133 -4176.4 -7745.18 9519.34 -70 690 8132 -2084.31 -17560.2 7445.22 -71 700 8131 -1145.47 -16326.6 8138.21 -72 710 8130 -419.114 -9805.82 6692.44 -73 720 8129 863.614 -9121.83 7443.34 -74 730 8128 4018.27 -8502.53 7264.72 -75 740 8127 6579.79 -3316.43 1848.47 -76 750 8126 9357.57 -2156.57 -1318.48 -77 760 8125 11355.9 -2608.62 -5435.35 -78 770 8124 11959.9 -1283.57 -6153.67 -79 780 8123 9516.96 -1062.78 -49.472 -80 790 8122 5557.09 -1364.81 -484.207 -81 800 8121 3617.01 -4007.29 -1691.42 -82 810 8120 2986.37 -2962.94 -5567.06 -83 820 8119 3122.98 -2337.29 -7384.13 -84 830 8118 6748.44 -368.184 -4654.44 -85 840 8117 7921.16 1370.05 -3660.75 -86 850 8116 2864.7 4912.32 1484.31 -87 860 8115 2585.7 1337.75 4121.29 -88 870 8114 1762.13 -3374.42 -39.6694 -89 880 8113 2461.55 -2217.75 -4768.42 -90 890 8112 1746.22 -3579.3 -2688.57 -91 900 8111 -2024.46 -9586.49 2747.66 -92 910 8110 -1420.84 -8039.89 3404.88 -93 920 8109 -3279.71 279.263 3895.04 -94 930 8108 2738.64 8214.88 8096.25 -95 940 8107 5589.17 8989.79 6256.69 -96 950 8106 4893.59 5855.28 7761.98 -97 960 8105 6984.27 640.892 5616.12 -98 970 8104 4489.37 -1701.01 7094.95 -99 980 8103 1238.77 872.512 10356.7 -100 990 8102 -706.267 3249.09 7877.23 -101 1000 8101 -3597.87 3602.19 5397.86 -102 1010 8100 107.366 2272.52 6407.63 -103 1020 8099 2534.55 -280.398 2468.13 -104 1030 8098 3415.66 -737.139 -1690.29 -105 1040 8097 4053.35 -2257.04 1305.62 -106 1050 8096 6929.35 -1637.03 785.894 -107 1060 8095 6319.96 -1401.27 4879.9 -108 1070 8094 5805.62 -1893.5 8448.46 -109 1080 8093 6299.89 -2993.08 11846.9 -110 1090 8092 8443.77 -3568.06 12924.5 -111 1100 8091 6027.42 -4806.83 11263.7 -112 1110 8090 5368.92 -3244.08 4357.53 -113 1120 8089 5162.63 2553.59 1059.83 -114 1130 8088 -923.684 5777.39 -3024.19 -115 1140 8087 -454.645 1880.21 -9824.92 -116 1150 8086 2067.86 2978.19 -8356.83 -117 1160 8085 495.571 3832.79 -5821.04 -118 1170 8084 -70.7401 3132.17 -944.635 -119 1180 8083 -4293.42 620.222 3519.24 -120 1190 8082 5410.82 3282.64 1396.9 -121 1200 8081 13251.2 5259.63 -1698.4 -122 1210 8080 12223.7 7103.87 -2430.71 -123 1220 8079 10045.4 4103.87 -851.354 -124 1230 8078 8684.08 1614.03 1148.39 -125 1240 8077 7754.41 -1768.52 1992.4 -126 1250 8076 11663.3 1172.75 -862.239 -127 1260 8075 13411.7 1606.15 -1008 -128 1270 8074 10426.4 -180.335 -427.738 -129 1280 8073 9275.23 1600.08 717.745 -130 1290 8072 -1016.85 -4027.9 1482.51 -131 1300 8071 -3751.63 -5579.68 2854.32 -132 1310 8070 -3771.75 -4169.86 -4562.61 -133 1320 8069 -1745.43 -1418.95 -5180.59 -134 1330 8068 -218.967 -315.416 -3316.77 -135 1340 8067 391.158 3358.76 -23.8187 -136 1350 8066 -2370.82 6595.4 1208.59 -137 1360 8065 -7849.96 2936.18 3155.75 -138 1370 8064 -12106.5 -962.117 -2550.95 -139 1380 8063 -8272.72 306.405 -3912.99 -140 1390 8062 -11425.9 2721.99 -1611.06 -141 1400 8061 -11337.2 -1071.06 4355.11 -142 1410 8060 -9513.31 1051.62 2459.4 -143 1420 8059 -2282.24 2407 2670.32 -144 1430 8058 1980.15 63.3055 2761.22 -145 1440 8057 -925.548 2437.66 722.015 -146 1450 8056 1526.36 4985.89 -1834.03 -147 1460 8055 606.862 2975.4 -1942.83 -148 1470 8054 -2318.98 5481.1 -1564.23 -149 1480 8053 -3210.86 5705.8 1012.93 -150 1490 8052 -67.5624 9998.39 -1586.47 -151 1500 8051 -1412.32 9194.16 -2903.13 -152 1510 8050 -4676.59 9968.48 -2962.81 -153 1520 8049 -4213.94 9061.56 -1354.38 -154 1530 8048 -4035.96 6891.5 1974.38 -155 1540 8047 503.957 2582.77 1697.29 -156 1550 8046 914.86 1130.91 1325.64 -157 1560 8045 3228.46 -4095.3 -2044.76 -158 1570 8044 8970.28 -9892.15 -5268.8 -159 1580 8043 11544.7 -12843.4 -1792.18 -160 1590 8042 9215.2 -8403.63 1947.53 -161 1600 8041 2926.22 -5534.04 7933.28 -162 1610 8040 1013.05 -8788.89 7007.48 -163 1620 8039 1050.53 -7302.34 3470.12 -164 1630 8038 2007.88 -5206.01 5659.27 -165 1640 8037 -2544.02 -6564.25 4982.58 -166 1650 8036 -6235.11 -8885.06 2856.7 -167 1660 8035 -8725.33 -6387.84 1450.32 -168 1670 8034 -9560.04 -1234.77 1027.86 -169 1680 8033 -6899.15 5189.41 1606.15 -170 1690 8032 -5515.62 7847.77 -3776.39 -171 1700 8031 -58.3773 6959.69 -5170.93 -172 1710 8030 -563.301 6857.62 306.658 -173 1720 8029 1752.82 5020.23 532.215 -174 1730 8028 2257.88 2387.7 942.063 -175 1740 8027 2867.43 5546.59 1914.09 -176 1750 8026 -1295.92 3073.03 1725.01 -177 1760 8025 -5912.55 352.918 1869 -178 1770 8024 -4089.83 553.501 2119.99 -179 1780 8023 1611.6 835.509 3538.73 -180 1790 8022 1513.44 134.501 5189.39 -181 1800 8021 3040.06 -2392.03 2342.76 -182 1810 8020 4925.07 1536.28 1301.46 -183 1820 8019 5338.45 4338.78 1741.07 -184 1830 8018 2602.19 1327.9 287.617 -185 1840 8017 -111.307 -2008.3 -5596.99 -186 1850 8016 1.47255 -1266.61 -8887.06 -187 1860 8015 960.303 -780.254 -10079 -188 1870 8014 4555.15 -2225.1 -6560.81 -189 1880 8013 3739.5 -1896.66 -6861.99 -190 1890 8012 -2427.33 211.482 -4482.58 -191 1900 8011 -7307.72 -2098.76 472.831 -192 1910 8010 -6834.71 2758.48 3550.14 -193 1920 8009 -1945.55 7548.35 4802.12 -194 1930 8008 -3935.02 8771.83 5815.5 -195 1940 8007 1801.52 10584.7 6419.76 -196 1950 8006 4012.72 10862 4305.5 -197 1960 8005 1185.53 8180.84 -66.0671 -198 1970 8004 2438.3 6380.58 -1305.89 -199 1980 8003 -247.55 12188.1 -15.6332 -200 1990 8002 -1091.54 12603.9 324.822 -84000 200 -1 0 8401 385878 374997 382271 -2 10 8400 226280 218114 225593 -3 20 8399 118216 119832 115200 -4 30 8398 76236.8 81362 72775.9 -5 40 8397 56675.3 59327.9 53840 -6 50 8396 39569.2 39004.7 43109.1 -7 60 8395 25368.3 26182.2 33867.3 -8 70 8394 15132.6 20554.8 25046.5 -9 80 8393 11689.2 16338.8 15342.2 -10 90 8392 3961.59 10414.1 8571.3 -11 100 8391 -131.238 10293.4 3933.17 -12 110 8390 -1841.75 6352.53 974.484 -13 120 8389 -3714.35 -2228.99 2374.13 -14 130 8388 -383.136 -2892.72 4396.72 -15 140 8387 1091.26 -5342.36 4945.24 -16 150 8386 178.423 -7022.94 4066.32 -17 160 8385 3003.93 -8707.01 6151.21 -18 170 8384 7867 -8727.06 6253.89 -19 180 8383 7781.89 -9025.52 4703.89 -20 190 8382 6256.56 -5621.47 220.325 -21 200 8381 419.9 -493.999 -779.991 -22 210 8380 628.139 -772.756 -666.692 -23 220 8379 3874.83 -3820.27 1811.2 -24 230 8378 5350.22 -6519.47 647.041 -25 240 8377 -1006.07 -7467.49 -2580.31 -26 250 8376 -2382.45 -4013.36 -2560.4 -27 260 8375 390.404 379.443 149.629 -28 270 8374 2775.55 5156.62 5572.38 -29 280 8373 5761.02 5982.48 12459 -30 290 8372 7285.79 1964.08 9628.31 -31 300 8371 6511.46 -5016.68 7023.02 -32 310 8370 3685.52 -8940.91 8403.46 -33 320 8369 2583.08 -8488.72 11333.7 -34 330 8368 3372.52 -10585.2 14618.8 -35 340 8367 2554.66 -9080.23 17193.7 -36 350 8366 9894.22 -5591.35 18385.1 -37 360 8365 13473.2 -4485.33 17848.5 -38 370 8364 9430.88 -4387.96 12742.5 -39 380 8363 5641.3 -4639.95 12714.1 -40 390 8362 1058.55 1618.64 10960.2 -41 400 8361 3697.92 5019.15 6879.89 -42 410 8360 -2243.84 4454.8 7479.77 -43 420 8359 -6650.11 5586.53 8654.51 -44 430 8358 -11070.2 8308.05 4674.69 -45 440 8357 -9981.82 4735.81 2022.78 -46 450 8356 -12828.3 2562.83 1455.26 -47 460 8355 -13458.2 7265.49 -1831.09 -48 470 8354 -11146.3 10024.5 -6174.31 -49 480 8353 -10270.3 8053.88 -6606.53 -50 490 8352 -8913.24 5025.48 -9178.96 -51 500 8351 -6431.82 4434.42 -8797.25 -52 510 8350 -2440.39 5273.02 -7898.05 -53 520 8349 1865.8 7395.76 -6651.85 -54 530 8348 1646.97 12021.1 -4125.37 -55 540 8347 969.481 11159.7 184.552 -56 550 8346 -1964.33 8161.61 5739.92 -57 560 8345 -4471.02 5838.32 5824.22 -58 570 8344 -585.399 2014.17 2089.81 -59 580 8343 3756.96 2295.2 2183.3 -60 590 8342 4474.12 412.253 2475.85 -61 600 8341 2054.92 -3900.06 -1844.52 -62 610 8340 5042.15 -8213.1 -1492.18 -63 620 8339 8387.46 -8715.8 4798.38 -64 630 8338 5800.89 -8606.53 11812.8 -65 640 8337 8309.22 -7987.77 11269.5 -66 650 8336 8629.17 -7628.32 14784.5 -67 660 8335 4046.82 -6805.45 13628 -68 670 8334 -3135.96 -6361.81 11593.3 -69 680 8333 -3273.29 -8726.27 10933.2 -70 690 8332 -1664.9 -17899.7 8131.33 -71 700 8331 -626.551 -16839.3 7622.77 -72 710 8330 380.891 -10716.5 5918.5 -73 720 8329 1428.29 -10053 7006.12 -74 730 8328 4377.35 -9211.84 6917.93 -75 740 8327 6896.65 -4182.31 2657.21 -76 750 8326 9923.15 -3521.58 -687.411 -77 760 8325 12446.1 -4109.37 -5334.1 -78 770 8324 13229 -3062.06 -6879.35 -79 780 8323 10904.8 -2125.89 -1010.82 -80 790 8322 7629.12 -1366.95 -689.652 -81 800 8321 4957.76 -3069.09 -1487.39 -82 810 8320 3240.24 -1834.15 -4984.97 -83 820 8319 2767.51 -1692.68 -6604.98 -84 830 8318 6014.16 -496.323 -4401.3 -85 840 8317 6946.38 882.889 -3563.61 -86 850 8316 2660.45 3834.92 1994.22 -87 860 8315 2574.2 251.003 4701.02 -88 870 8314 1658.74 -4370.49 402.141 -89 880 8313 2234.2 -3044.87 -4302.44 -90 890 8312 1776.68 -3753.22 -1542.06 -91 900 8311 -1740.44 -9159.75 2908.86 -92 910 8310 -158.614 -7740.22 2553.06 -93 920 8309 -1744.07 282.421 2558.01 -94 930 8308 3276.76 7995.42 7262.03 -95 940 8307 5900.19 9089.74 6345.05 -96 950 8306 4766.56 6665.62 7532.65 -97 960 8305 6919.13 1176.72 5616.66 -98 970 8304 4674.3 -1617.59 6503.27 -99 980 8303 2619.88 730.663 9390.26 -100 990 8302 1294.3 2976.07 7419.49 -101 1000 8301 -1682 3144.62 5906.57 -102 1010 8300 2286.09 2022.18 7126.96 -103 1020 8299 4158.19 -671.822 2448.06 -104 1030 8298 4648.26 -1603.82 -1905.12 -105 1040 8297 5650.73 -2999.27 1027.59 -106 1050 8296 7339.99 -1890.1 402.975 -107 1060 8295 6220.41 -1170.07 4365.37 -108 1070 8294 6123.54 -1884.58 8132.93 -109 1080 8293 6267.46 -3367.23 10730.3 -110 1090 8292 7909.84 -3671.59 12135.7 -111 1100 8291 5836.64 -5356.3 10786 -112 1110 8290 5057.61 -3655.48 4110.82 -113 1120 8289 4869.43 1452.69 740.246 -114 1130 8288 -349.886 5318.24 -4026.55 -115 1140 8287 998.366 1577.55 -9831.98 -116 1150 8286 3211.09 2972.66 -8298.24 -117 1160 8285 1575.83 3660.64 -5690.82 -118 1170 8284 345.38 2926.99 -1020.47 -119 1180 8283 -4484.61 594.127 3038.52 -120 1190 8282 5176.14 3127.49 757.61 -121 1200 8281 12502.4 5616.88 -2116.42 -122 1210 8280 10796.7 7623.89 -1904.85 -123 1220 8279 8530.37 4762.41 -93.4265 -124 1230 8278 7938.4 2041.8 1783.16 -125 1240 8277 8745.95 -2034.56 1858.88 -126 1250 8276 13499.8 844.714 -592.716 -127 1260 8275 15574.6 1384.65 -1144.5 -128 1270 8274 11831.4 -309.422 -901.378 -129 1280 8273 9936.02 1271.92 221.564 -130 1290 8272 -43.1217 -3515.28 1050.36 -131 1300 8271 -2261.67 -4866.61 1715.58 -132 1310 8270 -2123.93 -3327.63 -5929.09 -133 1320 8269 -153.216 -834.607 -5874.08 -134 1330 8268 911.541 -551.914 -4272.2 -135 1340 8267 1251.91 2822.44 -880.248 -136 1350 8266 -1609.9 5847.31 237.858 -137 1360 8265 -7239.74 2254.24 2605.38 -138 1370 8264 -11433 -1750.22 -2507.77 -139 1380 8263 -7243.52 -165.14 -3610.81 -140 1390 8262 -9721.58 2619.19 -1169.11 -141 1400 8261 -9993.75 -1361.13 4729.69 -142 1410 8260 -8776.29 618.7 2306.59 -143 1420 8259 -1548.43 1331.88 2976.01 -144 1430 8258 2782.12 -562.158 3121.04 -145 1440 8257 235.099 1769.06 1271.09 -146 1450 8256 3275.71 5151.77 -1565.07 -147 1460 8255 1763.78 3988.49 -2160.58 -148 1470 8254 -2382.28 6622.73 -1609.04 -149 1480 8253 -4194.3 6945.82 1032.91 -150 1490 8252 -1156.97 10554.6 -2639.58 -151 1500 8251 -1634.03 9688.6 -3682.14 -152 1510 8250 -5138.56 9898.18 -3399.63 -153 1520 8249 -4956.02 8623.33 -733.585 -154 1530 8248 -4933.9 7169.28 2688.12 -155 1540 8247 -556.77 3872.2 2272.41 -156 1550 8246 443.632 2554.46 1906.6 -157 1560 8245 2801.2 -3225.6 -1598.95 -158 1570 8244 8352.41 -9821.7 -4451.74 -159 1580 8243 10715.3 -12958.2 -1331.65 -160 1590 8242 8032.46 -8648.65 2575.18 -161 1600 8241 1894.47 -5427.76 8041.07 -162 1610 8240 462.544 -8437.97 6971.27 -163 1620 8239 1744.84 -6329.74 3365.88 -164 1630 8238 3129.38 -4335.48 5660.52 -165 1640 8237 -1250.64 -5734.8 4874.04 -166 1650 8236 -4639.77 -8346.36 3070.8 -167 1660 8235 -7935.07 -5577.67 1073.58 -168 1670 8234 -9119.67 -768.338 -25.4038 -169 1680 8233 -5991.56 5734.23 243.276 -170 1690 8232 -4859.83 8797.04 -4960.12 -171 1700 8231 872.152 8008.44 -6244.45 -172 1710 8230 970.366 7939.79 -110.11 -173 1720 8229 2874.58 5164.08 866.864 -174 1730 8228 3607.74 3094.52 1490.41 -175 1740 8227 4866.35 6834.19 1979.65 -176 1750 8226 1341.24 4206.19 2258.6 -177 1760 8225 -3820.2 1102.04 2268.34 -178 1770 8224 -2212.05 1118.41 2635.65 -179 1780 8223 2845.9 2183.07 3892.59 -180 1790 8222 1936.79 1343.51 5803.24 -181 1800 8221 3391.98 -1559.32 3531.12 -182 1810 8220 4889.91 1987.47 2470.06 -183 1820 8219 5018.56 4158.69 2124.59 -184 1830 8218 2475.71 697.75 43.4399 -185 1840 8217 -627.418 -2385.52 -5894.51 -186 1850 8216 -201.865 -1008.62 -9139.34 -187 1860 8215 1192.41 -90.3108 -9519.47 -188 1870 8214 5070.02 -984.022 -7153.83 -189 1880 8213 4129.72 -937.243 -8203.69 -190 1890 8212 -2046.24 1209.58 -7121.51 -191 1900 8211 -5720.8 -109.276 -2340.46 -192 1910 8210 -5196.62 4319.14 1927.27 -193 1920 8209 -917.219 7576.84 4851.68 -194 1930 8208 -3229.92 8345.66 6284.23 -195 1940 8207 1885.64 10614 6734.66 -196 1950 8206 4484.31 10600.9 4164.97 -197 1960 8205 2015.95 7704.97 -313.302 -198 1970 8204 3193.05 6161.93 -1277.08 -199 1980 8203 1142.12 11957.9 201.269 -200 1990 8202 544.592 12961.3 674.72 -86000 200 -1 0 8601 386914 373779 380637 -2 10 8600 227447 217514 224367 -3 20 8599 119747 119502 114177 -4 30 8598 77684.4 81386.6 71827.7 -5 40 8597 58200.6 59154.8 53086.9 -6 50 8596 41460.9 38681.5 42782.8 -7 60 8595 27208.2 26491.2 33296.9 -8 70 8594 16295 20712.4 23982.8 -9 80 8593 11870.7 16201.7 14713 -10 90 8592 4286.34 10227.5 8461.94 -11 100 8591 190.395 9563.17 3611.33 -12 110 8590 -1716.44 5535.47 81.5441 -13 120 8589 -3521.77 -2728.52 587.153 -14 130 8588 -1065.54 -3688.31 2994.26 -15 140 8587 -279.941 -5829.17 4191.21 -16 150 8586 -953.358 -7188.76 3022.98 -17 160 8585 2548.16 -8738.96 4506.7 -18 170 8584 7497.14 -8544.74 4486.38 -19 180 8583 7004.63 -8071.92 3861.6 -20 190 8582 5660.37 -4566.49 376.615 -21 200 8581 -362.179 539.016 37.1225 -22 210 8580 -257.429 276.615 188.146 -23 220 8579 2983.59 -2712.65 2606.01 -24 230 8578 5596.56 -5642.05 2039.61 -25 240 8577 347.882 -6305.02 -963.992 -26 250 8576 -752.772 -3147.4 -1842.8 -27 260 8575 2244.3 1214.71 746.334 -28 270 8574 4531.41 5661.58 6336.64 -29 280 8573 7672.92 6483.8 13134.7 -30 290 8572 9502.89 2279.96 11109.5 -31 300 8571 8450.57 -5179.66 8070.2 -32 310 8570 5417.73 -9745.88 8923.16 -33 320 8569 4835.82 -8983.12 11154.2 -34 330 8568 5872.94 -10563.2 14155 -35 340 8567 4849.98 -9473.16 16486.7 -36 350 8566 11522.1 -6285.05 17291.4 -37 360 8565 15248.9 -5067.94 16441.1 -38 370 8564 10588.2 -5069.34 11698.8 -39 380 8563 6645.22 -5377.24 11479.1 -40 390 8562 2062.76 1144.23 9668.7 -41 400 8561 4397.66 4890.85 5734.72 -42 410 8560 -2204.05 4139.31 6127.46 -43 420 8559 -6859.63 5136.93 7050.58 -44 430 8558 -11173.9 7799.74 3417.03 -45 440 8557 -9876.33 4512.68 1707.06 -46 450 8556 -13066.8 2336.16 1449.14 -47 460 8555 -14740.1 6731.19 -2258.5 -48 470 8554 -13408.2 9089.46 -6427.85 -49 480 8553 -12741.9 7514.45 -6861.25 -50 490 8552 -10998.2 4836.88 -8938.42 -51 500 8551 -8154.07 4138.55 -8272.03 -52 510 8550 -4104.98 4639.14 -7643.26 -53 520 8549 752.019 6267.72 -6678.79 -54 530 8548 838.765 10349.2 -3310.79 -55 540 8547 455.149 9599.22 994.523 -56 550 8546 -2100.87 6643.83 6099.32 -57 560 8545 -3927.29 4372.97 5182.6 -58 570 8544 218.574 1149.06 698.632 -59 580 8543 4613.05 1815.51 1370.43 -60 590 8542 5433.04 -400.802 2937.43 -61 600 8541 3176.1 -4421.2 -1125.15 -62 610 8540 6169.55 -8620.88 -1827.06 -63 620 8539 9800.9 -9182.44 3337.68 -64 630 8538 7335.91 -8492.21 10398.4 -65 640 8537 9214.12 -7258.87 10198.5 -66 650 8536 8724.57 -7243.62 13165 -67 660 8535 3853.5 -6321.01 12219.3 -68 670 8534 -3168.91 -6028.63 10524.9 -69 680 8533 -2932.8 -8765.81 10727.9 -70 690 8532 -832.489 -17572.6 8239.31 -71 700 8531 -286.652 -16565.6 6805.4 -72 710 8530 -199.341 -11074.2 4827.51 -73 720 8529 647.179 -10268.5 5757.41 -74 730 8528 4015.4 -9589.79 6631.26 -75 740 8527 6865.51 -4478.75 2973.27 -76 750 8526 9771.32 -4177.75 -1058.27 -77 760 8525 11754 -4892.61 -5983.42 -78 770 8524 12142.4 -3494.18 -7682.93 -79 780 8523 9936.89 -2678.39 -1610.29 -80 790 8522 6103.36 -1971.16 -825.723 -81 800 8521 3248.71 -3452.94 -1794.38 -82 810 8520 832.402 -1889.4 -5515.56 -83 820 8519 806.88 -1706.79 -6322.83 -84 830 8518 4843.82 140.81 -3721.26 -85 840 8517 5313.46 1681.87 -2610.89 -86 850 8516 831.942 4181.91 1972.64 -87 860 8515 648.45 1278.06 4863.69 -88 870 8514 -68.1277 -3212.27 1356.76 -89 880 8513 953.75 -1558.06 -2816.62 -90 890 8512 407.933 -2273.79 -148.423 -91 900 8511 -2828.69 -7304.02 3986.32 -92 910 8510 -1979.72 -6196.75 3393.17 -93 920 8509 -3295.67 1332.44 2884.95 -94 930 8508 1950.68 8412.12 7376.93 -95 940 8507 5559.83 9060 5967.05 -96 950 8506 4092.72 6094.18 6853.34 -97 960 8505 6362.48 264.367 4772.11 -98 970 8504 3813.98 -2138.11 5967 -99 980 8503 1365.37 484.777 9280.56 -100 990 8502 549.072 2885.62 7078.46 -101 1000 8501 -3127.17 3164.72 5926.95 -102 1010 8500 475.522 2094.73 6931.19 -103 1020 8499 2834.8 -248.353 2078.94 -104 1030 8498 3489.89 -798.251 -1971.17 -105 1040 8497 4542.94 -2310.58 944.314 -106 1050 8496 5568.89 -1163.15 -40.3008 -107 1060 8495 4769.29 -65.9406 4149.34 -108 1070 8494 4376.22 -725.191 7634.46 -109 1080 8493 4134.25 -2656.24 10495 -110 1090 8492 5795.77 -2848.2 12066.5 -111 1100 8491 3774.36 -4864.21 10662.8 -112 1110 8490 3584.55 -3548.15 3947.96 -113 1120 8489 4014.83 1624.61 769.469 -114 1130 8488 -1304.59 5246.67 -3155.86 -115 1140 8487 181.169 1351.17 -8278.22 -116 1150 8486 2509.08 3019.25 -6942.8 -117 1160 8485 1045.47 3921.66 -4616.34 -118 1170 8484 -535.086 2907.77 -151.547 -119 1180 8483 -5993.21 1138.8 3772.14 -120 1190 8482 2941.43 3831.36 1990.22 -121 1200 8481 9324.8 5922.54 -638.524 -122 1210 8480 8213.45 8193.52 -945.342 -123 1220 8479 6717.56 5545.56 302.955 -124 1230 8478 6820.15 3341.72 1982.52 -125 1240 8477 6919.86 -145.633 1666.39 -126 1250 8476 10884.6 2438.89 -1499.41 -127 1260 8475 13372.2 2467.89 -2319.21 -128 1270 8474 10435.5 701.848 -1436.02 -129 1280 8473 8915.63 1936.6 311.249 -130 1290 8472 -1598.87 -3109 1079.47 -131 1300 8471 -4265.96 -4583.11 1308.88 -132 1310 8470 -3965.32 -3307.46 -6337.52 -133 1320 8469 -1805.1 -1318.7 -5728.1 -134 1330 8468 -62.3326 -1722.98 -3340.52 -135 1340 8467 391.982 1502.85 -310.019 -136 1350 8466 -2120.94 4265.1 733.957 -137 1360 8465 -7333.83 495.24 2426.8 -138 1370 8464 -11028.9 -3228.12 -2032.94 -139 1380 8463 -6417.13 -622.672 -2929.48 -140 1390 8462 -9175.39 3139.85 -928.364 -141 1400 8461 -9955.59 -513.233 4549.91 -142 1410 8460 -9597.3 1208.27 1885.16 -143 1420 8459 -2437.5 2277.6 2953.56 -144 1430 8458 2350.34 379.713 3430.29 -145 1440 8457 434.934 2792.29 758.501 -146 1450 8456 3367.41 6698.45 -1931.6 -147 1460 8455 1599.05 5682.25 -2047.35 -148 1470 8454 -2579.46 7563.02 -803.463 -149 1480 8453 -4574.06 7613.72 1524.21 -150 1490 8452 -2367.85 10898.3 -3127.34 -151 1500 8451 -2217.85 9760.2 -4376.24 -152 1510 8450 -5594.23 10138 -4311.65 -153 1520 8449 -5404.95 8770.86 -1446.49 -154 1530 8448 -5598.84 7037.37 2653.59 -155 1540 8447 -1058.39 3702.13 1973.11 -156 1550 8446 172.095 2019.05 858.191 -157 1560 8445 2712.96 -4253.56 -2541.24 -158 1570 8444 7632.92 -10882.9 -4947.36 -159 1580 8443 8845.51 -14312.2 -1667.19 -160 1590 8442 5769.69 -10009.5 2075.04 -161 1600 8441 -528.992 -6085.8 7828.41 -162 1610 8440 -1815.38 -8668.78 6814.56 -163 1620 8439 -193.54 -6475.97 3249.13 -164 1630 8438 1482.25 -3754.33 5444.88 -165 1640 8437 -3630.8 -4711.29 4444.01 -166 1650 8436 -6930.13 -7655.55 2594.81 -167 1660 8435 -9094.25 -4841.94 1094.6 -168 1670 8434 -9482.23 25.2511 646.147 -169 1680 8433 -6125.4 6149.92 690.534 -170 1690 8432 -5163.41 9158.92 -4505.48 -171 1700 8431 -34.1906 8598.49 -6057.06 -172 1710 8430 947.933 9067.49 102.838 -173 1720 8429 3118.52 6613.07 1319.06 -174 1730 8428 3602.97 3880.91 1846.61 -175 1740 8427 5046.79 6728.07 2346.82 -176 1750 8426 2084.88 3577.8 2381.09 -177 1760 8425 -2329.05 532.37 2147.52 -178 1770 8424 -398.608 482.69 2636.5 -179 1780 8423 3396.6 1894.28 3879.76 -180 1790 8422 1875.35 1576.08 5902.82 -181 1800 8421 2852.37 -1199.2 4338.26 -182 1810 8420 3643.91 2154.12 3121.52 -183 1820 8419 4398.95 4067.05 2260.9 -184 1830 8418 1911.61 300.916 -41.5434 -185 1840 8417 -797.371 -3884.08 -6005.13 -186 1850 8416 -261.982 -2207.99 -9402.75 -187 1860 8415 1869.03 -1328.87 -9118.44 -188 1870 8414 4917.43 -1674.03 -6066.85 -189 1880 8413 3714.42 -752.796 -7013.75 -190 1890 8412 -3218.99 2061.91 -7209.48 -191 1900 8411 -7441.67 405.124 -3093.49 -192 1910 8410 -7207.65 4215.9 963.708 -193 1920 8409 -3389.01 7095.09 4300.86 -194 1930 8408 -6151.93 7298.09 5924.7 -195 1940 8407 -1162.74 9013.4 6432.84 -196 1950 8406 1624.83 8691.87 3353.4 -197 1960 8405 -592.128 6267.45 -1757.98 -198 1970 8404 1164.2 5401.75 -2670.38 -199 1980 8403 -219.064 11239.3 -611.394 -200 1990 8402 -737.605 12388.2 515.626 -88000 200 -1 0 8801 387255 374587 379041 -2 10 8800 227402 218446 223231 -3 20 8799 118779 119627 113624 -4 30 8798 76228.3 80932.7 71181.3 -5 40 8797 56947.8 58920.9 52105.5 -6 50 8796 41308.7 39397.9 41710.2 -7 60 8795 27240.7 26532.6 32201.9 -8 70 8794 16273.6 20417.6 23092 -9 80 8793 11320.9 16288.7 14035.5 -10 90 8792 3091.43 10671.9 8057.05 -11 100 8791 -956.689 10025.5 3381.85 -12 110 8790 -2553.87 5970.55 232.484 -13 120 8789 -3177.5 -1804.64 1142.97 -14 130 8788 293.146 -2511.28 3375.77 -15 140 8787 829.071 -4688.73 4106.59 -16 150 8786 483.168 -6552.54 3008.33 -17 160 8785 3757.09 -8736.61 4552.88 -18 170 8784 8471.13 -8252.09 4626.81 -19 180 8783 7525.99 -7141.76 4080.75 -20 190 8782 5840.69 -4059.15 515.511 -21 200 8781 396.414 353.557 -72.6373 -22 210 8780 532.972 -206.42 -26.5926 -23 220 8779 3255.45 -2698.54 1613.49 -24 230 8778 5499.29 -4726.19 999.477 -25 240 8777 438.935 -5486.83 -1309.87 -26 250 8776 -1088.87 -2713.34 -1916.94 -27 260 8775 1376.78 857.92 -160.556 -28 270 8774 3562.65 5083.62 4844.02 -29 280 8773 6717.92 5994.14 11889.9 -30 290 8772 8711.57 2317.4 10187.1 -31 300 8771 8339.87 -4882.93 7256.36 -32 310 8770 5923.07 -9657.28 8258.63 -33 320 8769 5763.1 -8875.71 10124.9 -34 330 8768 6580.05 -10820.1 13045.4 -35 340 8767 5148 -10434.2 15286.7 -36 350 8766 11697.7 -7038.42 16570 -37 360 8765 15324.6 -6520.52 16787.6 -38 370 8764 11614.5 -6161.78 12136.7 -39 380 8763 7451.73 -5985.49 11439.1 -40 390 8762 2250.82 -243.271 9661.91 -41 400 8761 4041.8 3224.37 5455.06 -42 410 8760 -2711.37 2608.14 6094.25 -43 420 8759 -7734.99 3798.97 6852.95 -44 430 8758 -12091.2 6845.15 3032.07 -45 440 8757 -10713.1 4004.55 1543.08 -46 450 8756 -14207.1 2755.59 1517.72 -47 460 8755 -15837.7 7391.66 -2128.33 -48 470 8754 -14676.4 9744.27 -6654.58 -49 480 8753 -14225.1 7323.25 -6846.89 -50 490 8752 -11525.6 3727.95 -8121.52 -51 500 8751 -7620.84 3232.34 -7255.92 -52 510 8750 -3313.36 3891.31 -6161.44 -53 520 8749 1058.06 5760.14 -5232.72 -54 530 8748 553.704 9779.24 -1722.13 -55 540 8747 1228.12 8448.75 2311.07 -56 550 8746 -931.788 5336.84 6428.73 -57 560 8745 -2632.86 3127.18 5089 -58 570 8744 1226.55 102.851 668.97 -59 580 8743 4655.81 892.281 303.55 -60 590 8742 4989.46 -1428.35 2031.24 -61 600 8741 2761.52 -5239.43 -1444.92 -62 610 8740 5899.58 -9388.61 -2121.3 -63 620 8739 9956.03 -10322.1 2512.03 -64 630 8738 6659.65 -9988.32 9010.12 -65 640 8737 8360.47 -8379.06 8802.24 -66 650 8736 8550.55 -7696.62 12060.7 -67 660 8735 3972.47 -6939.7 11409.5 -68 670 8734 -2184.94 -6415.45 9767.48 -69 680 8733 -1577.82 -8929.36 9959.45 -70 690 8732 341.911 -17536.3 8107.23 -71 700 8731 1213.84 -16115.7 7032.49 -72 710 8730 1224.24 -11220 4935.43 -73 720 8729 1896.69 -10949.2 5971.51 -74 730 8728 4695.54 -10343 6341.75 -75 740 8727 7757.95 -5077.87 2950.3 -76 750 8726 10693.8 -4131.6 -1486.41 -77 760 8725 11072.2 -4332.55 -6703 -78 770 8724 10810.4 -2853.12 -8847.69 -79 780 8723 8422.33 -2597.48 -2708.61 -80 790 8722 4241.92 -2336.26 -1852.25 -81 800 8721 1773.95 -4295.28 -2216.48 -82 810 8720 -57.6307 -3197.78 -5104.22 -83 820 8719 746.388 -2647.08 -6175.68 -84 830 8718 4896.7 -326.777 -3861.59 -85 840 8717 4978.49 1021.24 -2470.09 -86 850 8716 771.227 3805.49 2386.72 -87 860 8715 1078.64 980.934 5261.32 -88 870 8714 1670.54 -3707.26 1711.44 -89 880 8713 3563.89 -1812.62 -2626.89 -90 890 8712 2676.77 -2495.62 -349.471 -91 900 8711 -1299.37 -6966.89 4030.1 -92 910 8710 -1155.9 -5748.21 3055.69 -93 920 8709 -3203.8 1352.32 2642.82 -94 930 8708 1517.18 8029.89 6849.27 -95 940 8707 5269.83 8327.48 5399.51 -96 950 8706 4261.54 5790.49 6796.17 -97 960 8705 6264.38 867.873 5149.32 -98 970 8704 3145.56 -748.507 5872.31 -99 980 8703 324.676 1409.93 8515.42 -100 990 8702 -391.092 3428.81 6218.69 -101 1000 8701 -3586.8 3450.77 5369.92 -102 1010 8700 541.819 1797.35 6801.22 -103 1020 8699 3215.95 -505.646 2402.36 -104 1030 8698 3796.34 -948.197 -1770.07 -105 1040 8697 4075.81 -2548.35 968.849 -106 1050 8696 4487.42 -1151.88 438.598 -107 1060 8695 4103.25 -281.974 4756.2 -108 1070 8694 3850.71 -1255.51 8050.08 -109 1080 8693 3430.35 -3137.9 10862 -110 1090 8692 4789.36 -2711.85 12188.9 -111 1100 8691 2959.69 -4069.06 10800.6 -112 1110 8690 2938.92 -2755.11 3840.89 -113 1120 8689 3823.83 2051.18 383.55 -114 1130 8688 -2212.99 5384.53 -3522.49 -115 1140 8687 -1162.31 2122.58 -8418.84 -116 1150 8686 1646.84 4472.94 -6980.01 -117 1160 8685 805.951 4878.6 -5041.55 -118 1170 8684 -563.806 3242.16 -874.333 -119 1180 8683 -5720.42 1859.79 2903.96 -120 1190 8682 3498.7 5196.49 2109.29 -121 1200 8681 10034.3 7999.45 641.015 -122 1210 8680 8518.45 10736.7 726.494 -123 1220 8679 6579.06 7864.25 1309.04 -124 1230 8678 6838.31 5762.58 2247.34 -125 1240 8677 7535.11 2236.86 1202.01 -126 1250 8676 11220.3 4517.85 -1585.3 -127 1260 8675 13450.3 3558.63 -2396.97 -128 1270 8674 10955.5 1176.9 -1425.75 -129 1280 8673 8776.95 2747.71 211.393 -130 1290 8672 -1269.15 -2382.59 997.961 -131 1300 8671 -4407.36 -4116.24 1496.96 -132 1310 8670 -5147.54 -3595.49 -5827.33 -133 1320 8669 -2953.49 -1814.1 -5183.5 -134 1330 8668 -1696.77 -1429.29 -2905.11 -135 1340 8667 -1208.6 2399.76 -100.655 -136 1350 8666 -3837.49 5721.55 928.81 -137 1360 8665 -8695.8 2074.8 2988.04 -138 1370 8664 -12428.4 -1828.31 -1143.66 -139 1380 8663 -7799.38 960.359 -1812.96 -140 1390 8662 -9667.32 4287.07 -32.5846 -141 1400 8661 -10611.5 493.58 5388.72 -142 1410 8660 -11068.3 1856.21 3316.58 -143 1420 8659 -3467.97 2572.69 3597.91 -144 1430 8658 1389.34 1208.37 3584.83 -145 1440 8657 -453.224 3965.29 780.252 -146 1450 8656 2730.06 7186.22 -1588.06 -147 1460 8655 199.592 5879.63 -1837.1 -148 1470 8654 -3946.82 7501.81 -1228.64 -149 1480 8653 -5554.42 7218.32 874.62 -150 1490 8652 -3085.57 10193.1 -3793.28 -151 1500 8651 -2659.25 8913.67 -4460.76 -152 1510 8650 -5629.29 8970.55 -4748.17 -153 1520 8649 -5488.76 7574.51 -2347.8 -154 1530 8648 -5562.12 6704.04 1423.64 -155 1540 8647 -1639.95 4708.97 1020.06 -156 1550 8646 -361.827 3501.65 158.809 -157 1560 8645 2496.47 -3040.27 -2415.45 -158 1570 8644 7250 -10289.3 -4331.38 -159 1580 8643 8659.96 -14415.1 -1803.66 -160 1590 8642 5100.87 -10859.3 2175.43 -161 1600 8641 -1249.91 -7149.71 7760.84 -162 1610 8640 -2735.13 -9803.87 7027.68 -163 1620 8639 -905.638 -7641.57 2633.59 -164 1630 8638 269.76 -4663.89 4297.69 -165 1640 8637 -5035.7 -5623.3 3572.7 -166 1650 8636 -8792.86 -8304.61 2296.97 -167 1660 8635 -10305.3 -5164.83 1392.93 -168 1670 8634 -10405.7 221.076 1070.11 -169 1680 8633 -7262.6 6598.32 990.857 -170 1690 8632 -6269.71 9018.68 -3808.08 -171 1700 8631 -761.563 7749.66 -5390.11 -172 1710 8630 77.5227 8309.47 -132.811 -173 1720 8629 1444.4 6294.12 711.049 -174 1730 8628 1856.66 4399.71 822.952 -175 1740 8627 3991.87 6802.39 2039.67 -176 1750 8626 1726.16 2867.2 2173.46 -177 1760 8625 -2409 -513.977 1502.34 -178 1770 8624 -215.9 -748.116 1308.46 -179 1780 8623 3064.63 413.357 2701.58 -180 1790 8622 1079 -331.905 5020.7 -181 1800 8621 1267.71 -3024.11 3571.99 -182 1810 8620 2407.53 532.926 3136.68 -183 1820 8619 3350 2862.04 2647.15 -184 1830 8618 1542.36 -1327.1 214.414 -185 1840 8617 -148.354 -6045.12 -5783.44 -186 1850 8616 156.993 -3981.34 -9344.38 -187 1860 8615 2572.47 -2779.08 -9305.17 -188 1870 8614 5112.52 -3236.93 -6233 -189 1880 8613 3570.23 -2569.76 -6888.63 -190 1890 8612 -2766.14 645.861 -6768.79 -191 1900 8611 -5883.1 -385.691 -2045.25 -192 1910 8610 -5101.09 3791.49 1967.04 -193 1920 8609 -1873.99 6631.79 5164.02 -194 1930 8608 -5859.87 6843.41 6372.56 -195 1940 8607 -1716.57 8472.57 6293.43 -196 1950 8606 563.215 8644.98 2725.01 -197 1960 8605 -1283.5 6489.89 -2422.51 -198 1970 8604 808.244 5545.28 -3569.72 -199 1980 8603 -364.996 11052.9 -1577.7 -200 1990 8602 -949.53 11966.3 -821.801 -90000 200 -1 0 9001 388871 373550 377606 -2 10 9000 229717 217431 221907 -3 20 8999 121553 118653 113167 -4 30 8998 78687.9 79929.9 70541.9 -5 40 8997 58850.5 57541.8 51662.9 -6 50 8996 42890.1 38685.7 41517 -7 60 8995 29501.8 26087.5 32255.2 -8 70 8994 19253.3 19737.5 23270.2 -9 80 8993 14788.2 16028.3 14270.6 -10 90 8992 6898.69 11090.4 8388.16 -11 100 8991 2519.96 10269.5 3323.57 -12 110 8990 217.46 6404.82 -503.078 -13 120 8989 -137.868 -1252.32 168.449 -14 130 8988 3442 -3279.11 2956.33 -15 140 8987 4218.28 -5686.85 4138.82 -16 150 8986 3967.44 -7246.57 3142.33 -17 160 8985 6748.53 -9602.85 4320.83 -18 170 8984 11378.3 -8141.46 4978.34 -19 180 8983 9914.61 -6360.01 4445.39 -20 190 8982 7319.77 -3043.67 805.755 -21 200 8981 1685.87 1250.36 152.095 -22 210 8980 2184.32 252.185 413.43 -23 220 8979 4951.35 -2799.63 2032.23 -24 230 8978 6626.64 -4699.22 1567.67 -25 240 8977 1232.01 -5532.73 -383.504 -26 250 8976 -988.573 -3367.04 -954.998 -27 260 8975 491.35 604.653 811.181 -28 270 8974 2529.51 5342.38 5597.28 -29 280 8973 5766.14 6904.16 11970.9 -30 290 8972 8486.37 3630.62 10305.8 -31 300 8971 8495.12 -3251.15 7573.04 -32 310 8970 6813.01 -8442.31 8929.59 -33 320 8969 6589.92 -8438.37 10591.3 -34 330 8968 7084 -10704.6 13515.5 -35 340 8967 5255.11 -10780.9 15593.2 -36 350 8966 11816.8 -7510.9 16444.8 -37 360 8965 15316.2 -6484.07 16556 -38 370 8964 11743.7 -6553.57 11657.2 -39 380 8963 7261.18 -5929.03 11304 -40 390 8962 1411.47 -45.1662 9364.81 -41 400 8961 2152.1 2994.36 5190.35 -42 410 8960 -5271.45 2525.6 6249.04 -43 420 8959 -10322.1 3371.66 6982.83 -44 430 8958 -14043.6 5924.05 3840.64 -45 440 8957 -11425.1 2991.12 2074.66 -46 450 8956 -13725.2 2269.75 1908.94 -47 460 8955 -14739.6 6682.33 -2505.78 -48 470 8954 -13445.3 8878.99 -6913.59 -49 480 8953 -13178.1 6863.52 -6849.01 -50 490 8952 -11202.5 3044.38 -8169.29 -51 500 8951 -7579.18 3085.29 -6405.93 -52 510 8950 -3529.34 3197.72 -5435.32 -53 520 8949 1060.72 3838.47 -4553.78 -54 530 8948 426.263 8100.3 -1501.71 -55 540 8947 996.37 6819.33 1760.26 -56 550 8946 -1142.42 3975.45 5523.43 -57 560 8945 -3253.48 2750.05 4711.05 -58 570 8944 65.9089 -554.499 849.88 -59 580 8943 3671.03 -297.693 895.794 -60 590 8942 3624.82 -2076.97 2686.3 -61 600 8941 1473.04 -5722 -901.583 -62 610 8940 4458.55 -10444.5 -1919.98 -63 620 8939 8652.04 -11379.6 2695.7 -64 630 8938 5419.67 -11549.4 8690.28 -65 640 8937 7459.41 -10017.5 8542.26 -66 650 8936 7822.06 -8422.85 12044.1 -67 660 8935 3602.62 -7355.25 11688.9 -68 670 8934 -2203.17 -5698.54 10835.7 -69 680 8933 -1135.13 -7131.75 10663.8 -70 690 8932 1006.4 -15791.3 8533.5 -71 700 8931 1386.3 -15330.7 7224.9 -72 710 8930 934.731 -11005.2 4908.47 -73 720 8929 1183.38 -11059.7 6022.22 -74 730 8928 3173.15 -10820.9 5966.64 -75 740 8927 5599.66 -5368.6 2912.37 -76 750 8926 8061.25 -5228.69 -931.721 -77 760 8925 8324.55 -5227 -5652.77 -78 770 8924 8032.28 -2793.67 -7230.9 -79 780 8923 5304.08 -2224.88 -1912.73 -80 790 8922 1588.98 -1221.6 -1500.77 -81 800 8921 -785.257 -2664.98 -1677.33 -82 810 8920 -1768.49 -2078.17 -4984.06 -83 820 8919 -277.03 -1951.96 -5915.7 -84 830 8918 4181.11 -220.966 -3569.58 -85 840 8917 3803.74 841.044 -1813.5 -86 850 8916 -1059.88 3298.57 2712.14 -87 860 8915 -648.749 1018.62 5867.07 -88 870 8914 -679.856 -3866.78 1687.27 -89 880 8913 568.261 -1697.55 -2738.33 -90 890 8912 293.855 -1505.21 -93.9259 -91 900 8911 -3940.19 -6165.38 4168.61 -92 910 8910 -4090.24 -4859.13 3636.03 -93 920 8909 -6587.86 1309.53 2805.24 -94 930 8908 -2180.65 6930.33 6826.24 -95 940 8907 1116.14 7288.17 5712.65 -96 950 8906 -119.172 5723.58 6683.18 -97 960 8905 2150.62 1264.88 4547.95 -98 970 8904 -489.798 69.98 5300.04 -99 980 8903 -2151.71 2789.61 8286.31 -100 990 8902 -2340.8 4404.32 6722.07 -101 1000 8901 -5588.12 4275.78 6857.14 -102 1010 8900 -1494.41 2626.47 8441.91 -103 1020 8899 1656.05 144.012 3988.55 -104 1030 8898 3179.37 -379.662 251.487 -105 1040 8897 3585.33 -2256.49 1985.49 -106 1050 8896 3910.48 -1214.21 1018.78 -107 1060 8895 3459.47 -78.2072 4853.07 -108 1070 8894 2511.94 -680.013 7995.12 -109 1080 8893 1000.08 -2367.05 10478.9 -110 1090 8892 1899.44 -1802.52 11819.4 -111 1100 8891 407.17 -2844.78 10347.7 -112 1110 8890 779.201 -2491.57 3436.88 -113 1120 8889 1806.58 2110.68 -159.241 -114 1130 8888 -3687.81 5156.17 -4272.29 -115 1140 8887 -2596.25 1687.93 -9273.42 -116 1150 8886 460.113 4172.43 -7826.32 -117 1160 8885 477.075 4427.46 -5587.55 -118 1170 8884 -116.575 2317.92 -1319.75 -119 1180 8883 -4450.98 1010.24 2688.79 -120 1190 8882 4985.66 4293.08 2387.75 -121 1200 8881 11876.2 7000.61 710.147 -122 1210 8880 9930.49 9828.53 521.466 -123 1220 8879 7123.52 7383.3 728.264 -124 1230 8878 6457.31 4958.41 2124.87 -125 1240 8877 6589.47 1761.79 1333.49 -126 1250 8876 10055.9 4716.51 -1615.35 -127 1260 8875 12930.4 4109.34 -2730.16 -128 1270 8874 11436.6 2514.7 -1437.41 -129 1280 8873 9064.58 4101.57 693.25 -130 1290 8872 -1112.05 -1271.18 1583.47 -131 1300 8871 -4648.95 -3593.43 1603.1 -132 1310 8870 -5537.92 -3260.64 -6219.53 -133 1320 8869 -3597.12 -2192.45 -5822.15 -134 1330 8868 -1828.18 -1885.28 -3520.55 -135 1340 8867 -453.956 2156.36 -288.226 -136 1350 8866 -2582.05 5215.23 -31.6391 -137 1360 8865 -7202.28 2518.25 2419.04 -138 1370 8864 -11048.2 -901.716 -1527.48 -139 1380 8863 -6622.31 1353.36 -2310.08 -140 1390 8862 -8713.29 4427.57 -892.473 -141 1400 8861 -9631.44 907.101 4250.77 -142 1410 8860 -9728.91 2213.06 3087.38 -143 1420 8859 -2691.24 2826.57 3733.38 -144 1430 8858 1598.66 1224.23 3766.07 -145 1440 8857 -7.77165 4410.45 514.091 -146 1450 8856 2580.7 8834.08 -2264.5 -147 1460 8855 -525.944 7478.21 -2954.05 -148 1470 8854 -4637.76 8074.89 -2363.76 -149 1480 8853 -5821.27 7770.02 -30.2784 -150 1490 8852 -2379.68 10673.6 -4506.07 -151 1500 8851 -1559.53 8912.24 -4593.2 -152 1510 8850 -4392.01 9018.14 -3880.3 -153 1520 8849 -4609.24 7555.06 -1728.43 -154 1530 8848 -4804.91 6681.18 1726.63 -155 1540 8847 -939.944 4808.48 1445.99 -156 1550 8846 559.75 3449.05 1023.07 -157 1560 8845 3418.38 -2663.6 -1752.97 -158 1570 8844 7648.73 -9148.49 -4359.28 -159 1580 8843 8803.01 -12795 -2137.59 -160 1590 8842 4944.71 -9725.2 1884.18 -161 1600 8841 -1719.13 -6415.22 7728.08 -162 1610 8840 -3646.72 -9677.63 6821.78 -163 1620 8839 -1707.5 -8215.97 2215.32 -164 1630 8838 -345.092 -4830.44 3310.36 -165 1640 8837 -5681.32 -5737.33 2378.39 -166 1650 8836 -8849.31 -8104 1628.14 -167 1660 8835 -10170.5 -4565.88 825.427 -168 1670 8834 -10283.4 353.06 580.853 -169 1680 8833 -7402.83 6693.85 923.172 -170 1690 8832 -6499.15 9050.52 -3702.9 -171 1700 8831 -1360.27 7694.91 -4730.44 -172 1710 8830 233.39 8480.44 -83.6367 -173 1720 8829 2476.88 6693.83 1259.41 -174 1730 8828 3413.73 4868.25 1362.53 -175 1740 8827 5263.23 6910.35 2353.74 -176 1750 8826 2832.49 2795.02 2401.15 -177 1760 8825 -1771.71 -276.322 1749.14 -178 1770 8824 403.489 -420.055 1287.41 -179 1780 8823 3361.42 100.121 2947.04 -180 1790 8822 862.134 -1327.2 5576.28 -181 1800 8821 1270.41 -4516.9 3940.28 -182 1810 8820 2511.18 -357.256 2880.55 -183 1820 8819 3422.18 1911.93 1960.41 -184 1830 8818 1231.75 -2056.04 -517.734 -185 1840 8817 220.516 -6879.57 -6478.7 -186 1850 8816 793.555 -5593.83 -9011.53 -187 1860 8815 3256.23 -4227.83 -7993.66 -188 1870 8814 6030.36 -4330.6 -5056.67 -189 1880 8813 4927.37 -3124.96 -6187.36 -190 1890 8812 -1303.64 267.469 -6393.78 -191 1900 8811 -4668.03 -736.325 -2197.3 -192 1910 8810 -4503.09 3665.41 1987.75 -193 1920 8809 -1246.21 6613.71 4453.41 -194 1930 8808 -5047.79 6761.17 5604.14 -195 1940 8807 -1298.94 8140.39 5756.2 -196 1950 8806 500.719 8244.45 2523.14 -197 1960 8805 -1230.19 5993.56 -2439.11 -198 1970 8804 722.033 4098.11 -3171.15 -199 1980 8803 -573.373 9091.21 -1373.43 -200 1990 8802 -1091.71 10234.8 -913.695 -92000 200 -1 0 9201 394651 371137 376883 -2 10 9200 235110 215860 221303 -3 20 9199 127390 118094 112923 -4 30 9198 85004.9 79610 71048.1 -5 40 9197 65004.4 57742.5 52757.3 -6 50 9196 49242.9 39376.7 42444.9 -7 60 9195 36024.2 27266.3 32692.1 -8 70 9194 25207.7 20881.6 23903.8 -9 80 9193 19842.2 16806.4 15127.8 -10 90 9192 11496.8 11657.4 9644.64 -11 100 9191 6682.01 10750.4 4835.47 -12 110 9190 4401.97 6482.51 840.101 -13 120 9189 3856.37 -1318.99 872.563 -14 130 9188 6507.05 -3527.5 3775.8 -15 140 9187 7165.15 -5434.15 5045.64 -16 150 9186 6764.98 -6923.75 3969.32 -17 160 9185 8572.24 -9250.67 5024.93 -18 170 9184 12626.6 -8094.27 5295.39 -19 180 9183 10977.7 -6440.5 4872.67 -20 190 9182 8448.03 -3437.65 882.019 -21 200 9181 2596.15 917.488 -526.883 -22 210 9180 2193.88 -387.868 -758.896 -23 220 9179 4954.76 -3652.2 491.906 -24 230 9178 6457.22 -5056.25 795.673 -25 240 9177 1340.69 -5699.29 -470.017 -26 250 9176 -1118.64 -3514.64 -1098.91 -27 260 9175 960.626 -235.012 485.197 -28 270 9174 2872.84 4117.32 4911.4 -29 280 9173 6202.95 5703.94 11669.4 -30 290 9172 9539.91 2816.82 10288.1 -31 300 9171 9080.89 -3466.81 6957.23 -32 310 9170 7292.3 -8661.14 7849.36 -33 320 9169 6776.6 -8729.28 9524.91 -34 330 9168 7869.96 -11062.6 12707.9 -35 340 9167 6843.12 -10681.1 15050.4 -36 350 9166 12881.3 -7353.71 15688.4 -37 360 9165 15710.9 -6585.6 16138 -38 370 9164 12334.3 -6896.44 11454.4 -39 380 9163 8343.63 -6560.76 11517.9 -40 390 9162 3136.95 -380.492 9767.9 -41 400 9161 4459.09 2500.64 5256.37 -42 410 9160 -3266.08 2231.32 6522.24 -43 420 9159 -8339.41 3135.26 8263.16 -44 430 9158 -11814.8 5228.07 4647.86 -45 440 9157 -9282.78 2290.78 1747.01 -46 450 9156 -11503.8 1789.35 1554.11 -47 460 9155 -12143.8 5948.12 -2673.13 -48 470 9154 -11465.1 7738.17 -7283.76 -49 480 9153 -11671.2 6296.83 -7129.26 -50 490 9152 -10083.9 3140.43 -8262.93 -51 500 9151 -6685.2 3699.74 -6388.1 -52 510 9150 -2449.95 3719.13 -5366.45 -53 520 9149 3027.92 3818.29 -3864.65 -54 530 9148 1926.92 7769.42 -852.307 -55 540 9147 1554.62 6597.46 1691.93 -56 550 9146 -573.976 4151.02 4478.61 -57 560 9145 -3361.71 2955.4 3432.7 -58 570 9144 -310.14 -25.9218 -286.484 -59 580 9143 3542.73 148.268 -388.078 -60 590 9142 3183.62 -1529.97 1640.63 -61 600 9141 1127.41 -5015.66 -1830.71 -62 610 9140 3482.63 -9617.39 -2866.18 -63 620 9139 7194.93 -10525.5 1880.66 -64 630 9138 3532.2 -11013.3 8080.26 -65 640 9137 5660.4 -10012.8 7913.97 -66 650 9136 5221.69 -7946.21 10692.1 -67 660 9135 549.265 -7074.28 10146.6 -68 670 9134 -5111.93 -5112.35 10272.9 -69 680 9133 -4417.26 -6519.99 10598.1 -70 690 9132 -2252.2 -14451.9 8175.08 -71 700 9131 -2249.25 -14583.4 6528.72 -72 710 9130 -3033.45 -10464.6 4174.92 -73 720 9129 -2914.62 -10957.4 5240.64 -74 730 9128 -115.985 -10079.8 4708.18 -75 740 9127 2051.46 -4526.47 1895.58 -76 750 9126 4347.24 -4218.67 -1719.15 -77 760 9125 4644.73 -4371.77 -6095.18 -78 770 9124 4118.54 -2239.24 -6873.41 -79 780 9123 1288.63 -2229.38 -789.815 -80 790 9122 -1487.52 -1366.11 -350.247 -81 800 9121 -3266.54 -2258.03 -723.984 -82 810 9120 -3635.28 -1309.35 -3774.68 -83 820 9119 -1923.25 -1473.91 -4745.81 -84 830 9118 2115.32 -213.967 -3039.54 -85 840 9117 1509.75 624.948 -1342.3 -86 850 9116 -2805.54 3379.51 3500.03 -87 860 9115 -1154.65 1030.82 5642.85 -88 870 9114 -1381.19 -3365.74 1837.07 -89 880 9113 -344.292 -1378.06 -1768.42 -90 890 9112 -181.194 -1656.2 489.22 -91 900 9111 -4612.77 -5833.29 4248.79 -92 910 9110 -5180.18 -4386.02 3837.3 -93 920 9109 -8060.64 1580.38 3515.53 -94 930 9108 -3769.67 6991.26 7400.59 -95 940 9107 -786.878 6936.76 6388.12 -96 950 9106 -1230.83 5642.73 7613.2 -97 960 9105 825.833 1383.04 5829.29 -98 970 9104 -1955 -4.98074 6465.67 -99 980 9103 -3705.6 2879.36 9360.92 -100 990 9102 -4402.48 4947.85 7227.29 -101 1000 9101 -7688.48 4786.47 6815.15 -102 1010 9100 -3752.03 2700.83 8373.05 -103 1020 9099 -531.097 -458.538 4524.8 -104 1030 9098 598.107 -868.164 790.937 -105 1040 9097 1507.25 -2427.88 2475.63 -106 1050 9096 1929.14 -1231.98 1666.85 -107 1060 9095 689.707 -157.71 5348.62 -108 1070 9094 -189.381 -1339.39 7489.16 -109 1080 9093 -1513.46 -3692.14 9384.37 -110 1090 9092 -941.15 -3251.07 10891.5 -111 1100 9091 -2915.33 -3365.76 9670.08 -112 1110 9090 -3240.14 -2857.21 3156.43 -113 1120 9089 -2325.13 1336.01 -305.776 -114 1130 9088 -7783.38 4045.08 -3911.95 -115 1140 9087 -7196.11 413.099 -8795.89 -116 1150 9086 -4097.78 3305.17 -7007.12 -117 1160 9085 -4198.14 3820.09 -5062.58 -118 1170 9084 -4997.52 1353.51 -1269.7 -119 1180 9083 -9493.54 305.254 2396.69 -120 1190 9082 723.142 3719.35 2341.1 -121 1200 9081 7593.08 5974.72 1273.22 -122 1210 9080 5745.46 8643.56 1242.34 -123 1220 9079 2692.62 6305.56 856.391 -124 1230 9078 1542.85 4557.37 1627.81 -125 1240 9077 2517.14 1773.96 1088.57 -126 1250 9076 5504.03 4343.67 -2216.23 -127 1260 9075 8471.45 4111.8 -3220.81 -128 1270 9074 7762.51 2429 -2013.82 -129 1280 9073 6128.54 3563.76 -100.472 -130 1290 9072 -3405.42 -1650.35 1097.16 -131 1300 9071 -7138.26 -3615.69 1931.2 -132 1310 9070 -7098.11 -3891.16 -5403.32 -133 1320 9069 -4704.26 -2461.64 -5355.08 -134 1330 9068 -2580.37 -2349.23 -3121.18 -135 1340 9067 -848.478 1579.68 -357.846 -136 1350 9066 -2849.97 4730.24 -517.808 -137 1360 9065 -7407.66 2370.17 1490.91 -138 1370 9064 -10927.2 -1205.54 -2571.53 -139 1380 9063 -6604.65 1112.76 -3042.87 -140 1390 9062 -8408.13 4098.86 -1076.4 -141 1400 9061 -9490.68 476.777 4018.17 -142 1410 9060 -8581.47 2120.62 2361.4 -143 1420 9059 -939.067 3152.18 2926.96 -144 1430 9058 3241.62 1386.85 3133.76 -145 1440 9057 1850.95 4620.84 347.513 -146 1450 9056 4140.91 8900.06 -2255 -147 1460 9055 496.931 7691.11 -2917.65 -148 1470 9054 -3444.38 8380.09 -1953.89 -149 1480 9053 -4436.12 8010.51 109.707 -150 1490 9052 -1657.81 10838.7 -4299.07 -151 1500 9051 -558.284 9321.48 -4807.33 -152 1510 9050 -2740.09 9190.11 -4674.78 -153 1520 9049 -3332.54 7711.74 -2329.47 -154 1530 9048 -2835.8 6121.59 1219.21 -155 1540 9047 430.748 4316.08 1266.81 -156 1550 9046 1412.07 3209.01 329.047 -157 1560 9045 4025.44 -2426.08 -2077.79 -158 1570 9044 7932.43 -8654.2 -4001.7 -159 1580 9043 9013.22 -12966.5 -1602.61 -160 1590 9042 5886.79 -10459.5 1871.83 -161 1600 9041 -364.82 -6726.3 7147.08 -162 1610 9040 -2656.02 -9945.02 6091.13 -163 1620 9039 -468.579 -8501.15 1981.55 -164 1630 9038 1050.19 -5878.31 2838.02 -165 1640 9037 -4009.39 -6924.52 1500.53 -166 1650 9036 -6615.34 -8977.83 429.255 -167 1660 9035 -7475.2 -4715.5 -252.91 -168 1670 9034 -7576.2 21.647 -180.702 -169 1680 9033 -4639.35 5760.58 -529.931 -170 1690 9032 -3306.27 8029.97 -4733.76 -171 1700 9031 1741.93 6522.34 -6045.88 -172 1710 9030 3479.39 7294.05 -1455.43 -173 1720 9029 6031.8 6033.29 494.909 -174 1730 9028 7087.81 4303.42 614.519 -175 1740 9027 8868.38 6309.1 1833.71 -176 1750 9026 6330.23 2774.49 1667.47 -177 1760 9025 2012.26 -748.155 1371.48 -178 1770 9024 4550.35 -987.58 789.943 -179 1780 9023 7223.69 -465.328 1955.42 -180 1790 9022 4481.84 -1762 4228.53 -181 1800 9021 4477.64 -4252.23 3258.72 -182 1810 9020 5760.93 -12.6658 2502.23 -183 1820 9019 6966.85 1642.79 2186.38 -184 1830 9018 4519.19 -2235.53 -273.513 -185 1840 9017 3588.55 -6859.8 -6503.11 -186 1850 9016 3451.37 -5220.28 -9019.79 -187 1860 9015 5515.98 -3508.67 -8181.16 -188 1870 9014 8024.59 -3735.06 -5096.86 -189 1880 9013 7401.97 -3034.02 -6075.31 -190 1890 9012 1157.9 -192.776 -6804.01 -191 1900 9011 -2218.22 -564.419 -2260.59 -192 1910 9010 -2020.67 4661.46 2297.99 -193 1920 9009 720.042 7962.73 4951.49 -194 1930 9008 -3124.05 7757.92 5764.24 -195 1940 9007 207.523 8691.15 5412.86 -196 1950 9006 1709.26 9056.36 2531.93 -197 1960 9005 -141.632 6421.87 -2232.19 -198 1970 9004 1757.05 4432.64 -2526.34 -199 1980 9003 105.298 9144.87 -631.052 -200 1990 9002 -374.522 10319.1 -656.701 -94000 200 -1 0 9401 392956 370860 375913 -2 10 9400 233678 215834 220228 -3 20 9399 125611 118289 112106 -4 30 9398 83535.5 79930.9 70533.2 -5 40 9397 63810.5 58518.8 51844.9 -6 50 9396 48011.6 40867 41665.5 -7 60 9395 34678.3 28284.7 32040.7 -8 70 9394 23482.7 21517.2 23099.3 -9 80 9393 18833.8 17397.9 14228.2 -10 90 9392 11810.9 12013.2 8617.45 -11 100 9391 7227.23 11006.2 3371.03 -12 110 9390 4684 7063.18 -107.017 -13 120 9389 3947.11 -1014.24 766.132 -14 130 9388 6080.63 -3570.88 3662.1 -15 140 9387 6641.59 -5584.19 4701.61 -16 150 9386 6190.73 -6890.77 3329.22 -17 160 9385 7607.47 -8659.03 4546.07 -18 170 9384 11700.9 -7353.17 4690.1 -19 180 9383 10353.3 -5627.73 3908.83 -20 190 9382 8485.24 -2621.74 239.388 -21 200 9381 2867.72 1613.08 -1060.91 -22 210 9380 2434.33 156.512 -782.486 -23 220 9379 4909.39 -3842.61 582.294 -24 230 9378 6027.91 -5273.61 843.896 -25 240 9377 522.115 -5430.1 -171.044 -26 250 9376 -2141.33 -2656.31 -928.508 -27 260 9375 31.5188 416.422 367.729 -28 270 9374 2241.4 4423.33 4742.13 -29 280 9373 5692.57 5699.26 11242.7 -30 290 9372 9101.36 2703.91 10069.5 -31 300 9371 8893.42 -3270.35 7248.21 -32 310 9370 7739.27 -8597.36 7787.08 -33 320 9369 7140.32 -8665.61 8975.49 -34 330 9368 7601.99 -11131.8 12562.3 -35 340 9367 6260.03 -10891 14215 -36 350 9366 12053.6 -7321.86 14666.9 -37 360 9365 15199.7 -6376.13 15982.2 -38 370 9364 12223.2 -6377.83 11698.3 -39 380 9363 8107.69 -6597.81 10932.9 -40 390 9362 2539.37 -990.364 9419.95 -41 400 9361 4239.66 1906.96 4680.43 -42 410 9360 -3116.66 2574.54 5815.89 -43 420 9359 -7876.22 3872.76 8352.75 -44 430 9358 -10545.3 6080.59 5023.54 -45 440 9357 -7910.72 3207.61 2001.87 -46 450 9356 -10214 2600.46 1853.44 -47 460 9355 -11211.8 6319.53 -2137.12 -48 470 9354 -10602.9 7615.4 -7073.67 -49 480 9353 -10811.2 6556.73 -7452.48 -50 490 9352 -9489.53 3886.91 -8250.05 -51 500 9351 -6548.86 4480.95 -5814.92 -52 510 9350 -2628.06 4067.85 -4263.83 -53 520 9349 2754.75 4013.31 -3037.48 -54 530 9348 1646.63 8120.62 -311.355 -55 540 9347 1446.86 7315.63 1790.03 -56 550 9346 -215.384 4822.42 4668.07 -57 560 9345 -2536.72 3094.81 3248.93 -58 570 9344 741.847 -356.288 -771.312 -59 580 9343 4000.01 -367.091 -449.992 -60 590 9342 3364.22 -2210.05 1151.11 -61 600 9341 1329.28 -5489.53 -2801.1 -62 610 9340 3062.45 -9639.61 -4488.03 -63 620 9339 6443.36 -10288.2 6.9966 -64 630 9338 2835.62 -11241.4 7133.35 -65 640 9337 5386.11 -10853.4 7833.68 -66 650 9336 4978.74 -9079.03 10284.3 -67 660 9335 114.705 -8297.12 10355.5 -68 670 9334 -5559.02 -6089.39 11048.7 -69 680 9333 -5540.61 -7029 11159.9 -70 690 9332 -3824.86 -14608.1 8468.73 -71 700 9331 -4091.4 -14660.6 6705.53 -72 710 9330 -4196.71 -10883.3 4009.49 -73 720 9329 -3459.46 -11317.4 5614.17 -74 730 9328 -392.327 -9835.07 5105.77 -75 740 9327 1704.35 -4461.83 2024.48 -76 750 9326 4623.28 -4486.4 -1357.64 -77 760 9325 5187.16 -4637.98 -5831.68 -78 770 9324 3943.95 -2635.13 -7051.86 -79 780 9323 820.577 -2544.32 -1299.41 -80 790 9322 -1918.63 -1065.04 -610.34 -81 800 9321 -4156.72 -1965.7 -944.582 -82 810 9320 -4558.9 -824.975 -3883.73 -83 820 9319 -3653.47 -601.741 -4308.41 -84 830 9318 420.771 756.7 -2774.12 -85 840 9317 987.632 1994.56 -1421.12 -86 850 9316 -2348.89 4182.69 3211.09 -87 860 9315 -752.887 1669.18 5873.79 -88 870 9314 -876.638 -2500.54 2573.41 -89 880 9313 352.993 -445.977 -1301.55 -90 890 9312 454.303 -407.175 1420.14 -91 900 9311 -3903.49 -4813.45 4515.68 -92 910 9310 -4670.06 -3458.56 3936.91 -93 920 9309 -7614.74 2672.54 3843.86 -94 930 9308 -3095.23 7732.82 7859.71 -95 940 9307 23.1274 7817.01 7048.69 -96 950 9306 -382.29 6371.99 8170.65 -97 960 9305 1731 1589.73 6521.87 -98 970 9304 -1615.3 386.119 6989.78 -99 980 9303 -3669.61 3872.29 9635.41 -100 990 9302 -4419.21 6459.47 7022.95 -101 1000 9301 -7708.64 6329.3 6402.71 -102 1010 9300 -4227.95 3755.8 7914.49 -103 1020 9299 -699.873 513.887 4112.65 -104 1030 9298 1138.24 128.445 131.437 -105 1040 9297 2484.56 -1601.03 1427.01 -106 1050 9296 2813.54 -376.545 1420.31 -107 1060 9295 1289.29 -13.7825 5793.6 -108 1070 9294 451.709 -1703.76 7862.39 -109 1080 9293 -978.958 -4070.64 9908.7 -110 1090 9292 -1052.36 -3428.71 11237.2 -111 1100 9291 -3455.24 -3904.72 9619.54 -112 1110 9290 -4144.32 -3693.15 2494.36 -113 1120 9289 -3096.34 146.078 -1283.66 -114 1130 9288 -8136.07 2694.57 -5038.81 -115 1140 9287 -6845.55 -929.051 -9495.24 -116 1150 9286 -3035.27 1429.66 -7465.49 -117 1160 9285 -3298.11 2175.06 -5693.58 -118 1170 9284 -4666.62 -12.4447 -2125.68 -119 1180 9283 -8937.66 -852.682 2099.38 -120 1190 9282 1023.9 2503.09 2557.88 -121 1200 9281 7694.01 4207.14 1627.72 -122 1210 9280 6359.62 6748.4 1392.19 -123 1220 9279 3141.72 4533.61 1091.72 -124 1230 9278 1655.05 3499.68 1731.87 -125 1240 9277 2869.66 591.379 960.364 -126 1250 9276 5397.28 3312.52 -2374.05 -127 1260 9275 7922.22 3294.13 -3445.58 -128 1270 9274 7254.21 1557.86 -2742.61 -129 1280 9273 5350.76 3082.76 -1082.86 -130 1290 9272 -4024.77 -2035.94 219.112 -131 1300 9271 -6951.2 -3933.84 1225.78 -132 1310 9270 -6500.37 -3988.96 -5381.08 -133 1320 9269 -4590.27 -2538.3 -4898.94 -134 1330 9268 -2416.36 -1963.31 -2268.51 -135 1340 9267 -1110.42 2174.57 362.763 -136 1350 9266 -2556.87 4939.83 -139.493 -137 1360 9265 -6119.45 2275.06 1693.28 -138 1370 9264 -9823.01 -1333.4 -2711.75 -139 1380 9263 -5838.41 1078.73 -2700 -140 1390 9262 -7898.67 4077.5 -577.429 -141 1400 9261 -8642.41 785.787 4176.28 -142 1410 9260 -7368.26 1695.05 2217.72 -143 1420 9259 -265.497 2912.22 2725.56 -144 1430 9258 4254.8 2087.07 2435.54 -145 1440 9257 2362.25 5758.6 -304.186 -146 1450 9256 4099.14 9664.32 -2296.94 -147 1460 9255 326.364 8613.41 -3150.2 -148 1470 9254 -3060.52 8889.44 -1635.32 -149 1480 9253 -3995.69 8840.14 31.8955 -150 1490 9252 -1481.31 11401.6 -4442.31 -151 1500 9251 19.8751 9562.36 -4726.11 -152 1510 9250 -2120.53 9566.55 -4178.13 -153 1520 9249 -2793.12 7792.93 -2405.09 -154 1530 9248 -2490.64 6884.07 676.623 -155 1540 9247 100.727 5399.17 356.282 -156 1550 9246 773.014 4159.92 -1059.48 -157 1560 9245 3093.16 -2071.22 -2891.33 -158 1570 9244 6743.71 -8548.91 -4276.01 -159 1580 9243 7749.64 -12690.8 -2216.16 -160 1590 9242 4819.38 -10468.2 1099.99 -161 1600 9241 -529.563 -7015.59 6712.95 -162 1610 9240 -2147.96 -9988.36 6240.21 -163 1620 9239 508.623 -8420.44 2371.05 -164 1630 9238 839.732 -5317.69 2835.79 -165 1640 9237 -4435.66 -6297.52 1409.04 -166 1650 9236 -6825.53 -8735.67 428.304 -167 1660 9235 -7734.47 -4836.97 -482.665 -168 1670 9234 -7723.6 -81.1321 -905.791 -169 1680 9233 -5344.99 5891.5 -1075.09 -170 1690 9232 -4457.47 8297.73 -4914.07 -171 1700 9231 515.019 6725.06 -6190.44 -172 1710 9230 2810.23 7681.06 -1740.89 -173 1720 9229 5853.65 6498.35 472.04 -174 1730 9228 6779.65 4466.93 1448.64 -175 1740 9227 8442.16 6749.29 2976.28 -176 1750 9226 6105.08 3141.21 3152.16 -177 1760 9225 2237.08 -263.844 2917.56 -178 1770 9224 4985.61 -847.504 2032.95 -179 1780 9223 7075.73 -407.127 2893.65 -180 1790 9222 4749.77 -1824.23 4547.41 -181 1800 9221 5504.19 -4368.52 3481.5 -182 1810 9220 7439.92 95.1726 2518.82 -183 1820 9219 7514.78 1818.11 1854.23 -184 1830 9218 4280.73 -2067.82 -90.5371 -185 1840 9217 3134.78 -7040.02 -5597.53 -186 1850 9216 3052.35 -5187.16 -8842.5 -187 1860 9215 4807.32 -3317.24 -8619.16 -188 1870 9214 6664.4 -3136.31 -5197.64 -189 1880 9213 6332.3 -1751.97 -5424.45 -190 1890 9212 243.028 1328.35 -5758.48 -191 1900 9211 -3015.26 686.779 -1415.3 -192 1910 9210 -2104.99 5027.23 2650.25 -193 1920 9209 289.519 8166.67 5142.17 -194 1930 9208 -3737.2 8157.67 5870.17 -195 1940 9207 -19.953 9226.78 5150.54 -196 1950 9206 1633.33 9432.34 1536.66 -197 1960 9205 -17.1691 6679.01 -3073.76 -198 1970 9204 982.903 4486.61 -3309.11 -199 1980 9203 -1564.99 8925.42 -1198.25 -200 1990 9202 -1808.34 10248.7 -1120.42 -96000 200 -1 0 9601 394711 370869 375090 -2 10 9600 235455 215572 219970 -3 20 9599 127176 117913 112191 -4 30 9598 84432.7 79428.9 69892.5 -5 40 9597 64452.5 58044.9 50946 -6 50 9596 48687.5 40471.8 40834.1 -7 60 9595 35471.6 27499.3 32304.6 -8 70 9594 24703.3 20641.8 23851.7 -9 80 9593 20145 16346.9 14644.5 -10 90 9592 12947.2 11141.3 8772.88 -11 100 9591 7915.51 9982.68 3177.25 -12 110 9590 5197.34 6347.84 -517.003 -13 120 9589 4163.48 -655.116 -78.5475 -14 130 9588 5176.06 -3709.38 3324.29 -15 140 9587 5266.18 -6324.47 4615.34 -16 150 9586 4714.36 -7641.71 3380.79 -17 160 9585 6706.86 -8956.49 4676.73 -18 170 9584 11030.6 -7049.47 4850.25 -19 180 9583 9366.84 -5314.72 3838.13 -20 190 9582 7715.83 -1943.62 -547.569 -21 200 9581 2350.69 3202.38 -2047.69 -22 210 9580 1556.46 2145.37 -1715.4 -23 220 9579 4034.66 -1625.06 -637.657 -24 230 9578 6005.8 -3636 401.398 -25 240 9577 1101.72 -3742.39 -426.424 -26 250 9576 -1598.23 -1851.19 -2022.64 -27 260 9575 828.992 272.177 -1391.84 -28 270 9574 2812.69 4073.94 2850.73 -29 280 9573 6283.71 5238.88 9409.62 -30 290 9572 8890.55 2034.94 8658.79 -31 300 9571 8927.74 -4208.5 6551.67 -32 310 9570 8433.38 -9280.43 7266.45 -33 320 9569 8291.61 -9616.92 8176.91 -34 330 9568 9033.36 -12279 11639.2 -35 340 9567 7421.08 -11936.6 13040.1 -36 350 9566 11958.7 -9028.49 13494 -37 360 9565 14343.3 -7926.22 14968.7 -38 370 9564 11311.9 -7748.99 10948.9 -39 380 9563 7389.11 -7614.92 10430.3 -40 390 9562 2176.74 -1640.41 9363.48 -41 400 9561 4027.43 1925.41 4815.62 -42 410 9560 -3455.81 2562.13 6310.89 -43 420 9559 -8294.08 3495.3 8827.56 -44 430 9558 -10937.9 5956.8 5300.81 -45 440 9557 -9043.2 3845.66 1770.11 -46 450 9556 -11280.7 3364.65 1667.31 -47 460 9555 -12485.5 6679.25 -2331.66 -48 470 9554 -12101.4 7851.83 -6917.83 -49 480 9553 -12039.2 7131.24 -7052.95 -50 490 9552 -10243.5 4003.35 -7530.53 -51 500 9551 -6437.81 4601.23 -5358.18 -52 510 9550 -2054.26 4182.73 -3820.3 -53 520 9549 1991.43 3659.67 -2728.5 -54 530 9548 155.979 7341.63 -421.928 -55 540 9547 -138.921 6186.24 1843.95 -56 550 9546 -2126.42 3901.56 4623.95 -57 560 9545 -4247.31 2098.34 3437.39 -58 570 9544 -22.165 -1169.03 -581.8 -59 580 9543 3737.57 -1147.58 -296.102 -60 590 9542 3421.09 -3852.45 1203.8 -61 600 9541 1839.98 -6893.67 -2522.99 -62 610 9540 4033.52 -10926 -4387.01 -63 620 9539 7623.39 -10623.4 26.5767 -64 630 9538 4231.56 -10941.8 6897.97 -65 640 9537 5983.56 -9959.33 7225.16 -66 650 9536 5308.8 -7548.89 9396.22 -67 660 9535 1306.11 -7367.78 9676.05 -68 670 9534 -3847.92 -5079.64 10705.5 -69 680 9533 -4220.26 -5844.58 10612.9 -70 690 9532 -2527.02 -13644.8 7847.32 -71 700 9531 -2232.5 -13399.7 6110.21 -72 710 9530 -2652.48 -10494.8 2861.04 -73 720 9529 -2064.05 -10889.7 5200.82 -74 730 9528 1416.37 -10069.5 5139.35 -75 740 9527 3857.91 -5125.21 2660.2 -76 750 9526 6498.87 -4557.14 -818.012 -77 760 9525 7016.36 -4242.55 -5543.25 -78 770 9524 5863.85 -1826.28 -7039.62 -79 780 9523 2413.51 -2331.12 -1367.65 -80 790 9522 -1068.94 -1844.3 -184.216 -81 800 9521 -4143.44 -3260.17 -205.11 -82 810 9520 -4279.17 -2227.51 -2909.52 -83 820 9519 -3637.6 -1682.6 -3956.43 -84 830 9518 240.532 -412.823 -3090.12 -85 840 9517 1244.28 1751.68 -2365.61 -86 850 9516 -1634.84 3995.62 1778.65 -87 860 9515 -264.267 1361.02 4007.35 -88 870 9514 -712.503 -2018.37 1307.06 -89 880 9513 152.832 952.527 -1871.56 -90 890 9512 -183.402 1777.52 705.159 -91 900 9511 -4616.87 -2807.81 4576 -92 910 9510 -5208.52 -3010.58 4709.69 -93 920 9509 -8482.93 2787.56 4572.16 -94 930 9508 -3286.38 7859.28 8486.18 -95 940 9507 -348.777 8250.61 7298.71 -96 950 9506 -909.156 6938.21 7866.62 -97 960 9505 1297.7 2287.49 6567.32 -98 970 9504 -1617.42 976.314 7563.01 -99 980 9503 -3256.1 3860.43 10263.5 -100 990 9502 -3927.07 6221.97 7228.38 -101 1000 9501 -6973.72 5385.68 6506.62 -102 1010 9500 -3419.74 2961.3 7887.5 -103 1020 9499 -592.895 23.3353 4081.83 -104 1030 9498 332.954 -976.461 -15.1358 -105 1040 9497 2084.15 -3118.41 1127.28 -106 1050 9496 2821.39 -1672.49 1419.4 -107 1060 9495 1438.2 -1101.16 5968.51 -108 1070 9494 725.378 -2441.68 8052.68 -109 1080 9493 -325.848 -4347.96 9950.96 -110 1090 9492 -380.244 -3236.86 11272.6 -111 1100 9491 -3350.11 -3666.13 9195.71 -112 1110 9490 -5048.28 -3678.89 2236.53 -113 1120 9489 -5008.03 159.571 -1398.29 -114 1130 9488 -10311.3 3137.95 -4918.72 -115 1140 9487 -9449.91 -339.095 -8953.21 -116 1150 9486 -5854.08 1934.62 -7005.93 -117 1160 9485 -5715.11 2144.8 -5815.76 -118 1170 9484 -6160.01 169.62 -2653.07 -119 1180 9483 -9470.97 -2.37416 1018.3 -120 1190 9482 374.627 3333.41 1697.42 -121 1200 9481 6589.12 4604.24 1620.75 -122 1210 9480 5394.81 6440.45 2459.04 -123 1220 9479 1494.45 3545.67 2584.32 -124 1230 9478 -55.4719 2150.73 3031.51 -125 1240 9477 1916.37 -892.241 2383.01 -126 1250 9476 4531.74 2140.25 -1412.22 -127 1260 9475 7285.75 2216.36 -2881.82 -128 1270 9474 6983.67 359.757 -2334.97 -129 1280 9473 5118.78 1670.53 -761.669 -130 1290 9472 -3890.31 -3140.84 300.147 -131 1300 9471 -6770.07 -4208.79 1651.71 -132 1310 9470 -7061.36 -4028.68 -5366.94 -133 1320 9469 -5427.35 -2563.76 -5300.55 -134 1330 9468 -3536.58 -2595.8 -2858.73 -135 1340 9467 -2113.49 1683.67 -417.438 -136 1350 9466 -3793.56 4588.34 -400.965 -137 1360 9465 -6478.03 1923.15 1282.31 -138 1370 9464 -9413.15 -1522.68 -3150.2 -139 1380 9463 -4799.86 775.374 -3336.09 -140 1390 9462 -7198.92 4080.58 -1402.56 -141 1400 9461 -8904.93 1005.26 3038.85 -142 1410 9460 -7873.32 1373.93 1414.27 -143 1420 9459 -829.059 3081.53 2820.32 -144 1430 9458 3577.75 2460.31 3125.48 -145 1440 9457 1990.58 5584.21 933.408 -146 1450 9456 3541.39 8560.03 -1232.62 -147 1460 9455 -63.0493 7580.63 -2816.27 -148 1470 9454 -2470.24 8112.42 -2249.81 -149 1480 9453 -2642.6 7435.21 -490.947 -150 1490 9452 -101.184 9658.3 -4849.29 -151 1500 9451 1341.65 7906.7 -5435.7 -152 1510 9450 -824.588 8200.09 -4736.13 -153 1520 9449 -1966.68 7173.24 -3163.28 -154 1530 9448 -2422.66 6125.21 -243.067 -155 1540 9447 153.163 4554.17 -444.766 -156 1550 9446 636.144 3011.06 -2027.9 -157 1560 9445 2812.47 -2731.25 -3837.49 -158 1570 9444 6564.09 -8810.71 -4579.5 -159 1580 9443 8361.31 -13122 -2520.94 -160 1590 9442 5588.95 -10896.2 394.576 -161 1600 9441 175.748 -7732.87 6544.67 -162 1610 9440 -1436.3 -10379.9 5966.09 -163 1620 9439 1061.65 -8372.17 1629.74 -164 1630 9438 918.022 -5118.14 1975.81 -165 1640 9437 -4799.93 -6040.78 806.444 -166 1650 9436 -7714.41 -7933.64 -12.7404 -167 1660 9435 -8293.61 -3752.59 -504.848 -168 1670 9434 -7811.29 1043.11 -1074.8 -169 1680 9433 -5010.95 6291.52 -1378.86 -170 1690 9432 -3491.4 8093.26 -4684.13 -171 1700 9431 1509.34 6418.65 -5460.34 -172 1710 9430 3418.32 7150.22 -721.455 -173 1720 9429 5777.84 6330.18 1681.5 -174 1730 9428 6009.11 4263.95 2807.08 -175 1740 9427 8158.89 6351.3 4306.65 -176 1750 9426 6006 3057.18 4340.49 -177 1760 9425 1401.83 -129.313 3832.07 -178 1770 9424 3755.94 -857.274 3022.43 -179 1780 9423 6433.05 -542.781 3597.43 -180 1790 9422 4188.23 -1913.8 5231.03 -181 1800 9421 4902.38 -4383.51 3759.94 -182 1810 9420 6987.57 -78.1641 3027.89 -183 1820 9419 7575.81 1728.82 2277.57 -184 1830 9418 4426.92 -1516.42 -51.2082 -185 1840 9417 2971.83 -6277.83 -5003.03 -186 1850 9416 2529.28 -4423.93 -8524.64 -187 1860 9415 3642.64 -2374.52 -8598.99 -188 1870 9414 5347.44 -2009.72 -4877.35 -189 1880 9413 5254 -524.232 -5144.47 -190 1890 9412 -1453.23 2209.33 -5239.57 -191 1900 9411 -4838.18 1031.9 -1154.54 -192 1910 9410 -4243.23 5226.86 2395.28 -193 1920 9409 -1261.67 8738.28 3691.1 -194 1930 9408 -3961.64 9446.38 4730.04 -195 1940 9407 684.845 10526.8 4387.37 -196 1950 9406 2114.49 10199.7 969.326 -197 1960 9405 -24.6385 7006.12 -3320.27 -198 1970 9404 558.755 5581.66 -3596.73 -199 1980 9403 -2568.32 9615.36 -1615.87 -200 1990 9402 -2333 10130.1 -1498.62 -98000 200 -1 0 9801 396125 370615 374659 -2 10 9800 236754 215457 219392 -3 20 9799 128170 117699 111739 -4 30 9798 85348.9 79015.3 69796.4 -5 40 9797 65346.6 57610.5 50720.7 -6 50 9796 49486.8 40410.8 40566.8 -7 60 9795 36285.3 28021.9 32417.6 -8 70 9794 25758.9 21409.3 24524.1 -9 80 9793 21228.2 16822.9 15628.3 -10 90 9792 13485.7 11580.4 9614.42 -11 100 9791 8288.71 10409.8 4091.91 -12 110 9790 5923.78 6928.42 443.559 -13 120 9789 5935.14 -189.393 678.199 -14 130 9788 6591.58 -2910.89 3672.57 -15 140 9787 5925.53 -5589.12 4641.14 -16 150 9786 5083.23 -6858.42 2786.15 -17 160 9785 7011.89 -8225.95 4234.99 -18 170 9784 11059.2 -6832.39 4936.09 -19 180 9783 8846.75 -5314.25 4130.09 -20 190 9782 6904.13 -1917.43 -53.604 -21 200 9781 1476.1 3030.1 -1517.84 -22 210 9780 -42.4699 2466.78 -968.989 -23 220 9779 2068.36 -887.714 466.316 -24 230 9778 3993.71 -2991.69 1848.81 -25 240 9777 -131.277 -3254.07 1007.27 -26 250 9776 -2790.51 -2157.86 -982 -27 260 9775 -1194.53 168.855 -612.329 -28 270 9774 1414.62 4383.61 3027.13 -29 280 9773 4714.86 6127.84 9357.94 -30 290 9772 6870.64 3120.73 9270.02 -31 300 9771 7136.63 -2650.06 7647.6 -32 310 9770 7208.02 -8133.83 8587.37 -33 320 9769 7611.4 -9109.96 9268.65 -34 330 9768 8281.14 -11706.4 12367.4 -35 340 9767 6767.02 -11678 13489.6 -36 350 9766 11205.6 -8645.55 13338.1 -37 360 9765 13772.7 -7575.1 14330.6 -38 370 9764 11310.5 -6830.86 10124.1 -39 380 9763 7906.87 -7117.51 9652.18 -40 390 9762 3164.75 -1803.61 9402.72 -41 400 9761 5133.71 1593.66 5102.7 -42 410 9760 -3019.21 2607.49 6876.56 -43 420 9759 -8177.17 3856.13 9816.98 -44 430 9758 -10379.3 6302.21 6252.39 -45 440 9757 -8045.09 4164.12 2403.53 -46 450 9756 -10096.9 4086.75 2131.51 -47 460 9755 -11580.7 7672.47 -2199.03 -48 470 9754 -11218.5 8161.03 -6458.74 -49 480 9753 -11318.3 7961.16 -5952.64 -50 490 9752 -9278.21 5290.74 -6320.96 -51 500 9751 -5215.08 5830.57 -4273.7 -52 510 9750 -229.405 5045.44 -2743.34 -53 520 9749 4321.83 4471.15 -1306.04 -54 530 9748 2008.09 7540.17 1191.62 -55 540 9747 1009.83 6063.16 3049.27 -56 550 9746 -951.852 3592.78 5605.51 -57 560 9745 -3241.71 1743.68 4206.52 -58 570 9744 794.926 -1804.33 -510.947 -59 580 9743 3552.76 -1663.61 -918.237 -60 590 9742 2501.32 -3922.01 617.684 -61 600 9741 661.726 -6981.79 -2898.12 -62 610 9740 3212.57 -10627.6 -4759.03 -63 620 9739 7143.69 -10855.2 -371.439 -64 630 9738 4082.31 -10942.1 6699.7 -65 640 9737 6368.86 -9911.57 7392.27 -66 650 9736 6120.88 -6912.76 9216.28 -67 660 9735 1560.53 -6635.85 9419.96 -68 670 9734 -4124.61 -4623.75 10075.1 -69 680 9733 -4300.42 -5903.51 9065.87 -70 690 9732 -2420.94 -13375.7 5984.92 -71 700 9731 -2437.32 -12710.4 4429.12 -72 710 9730 -3103.71 -9539.86 1140.4 -73 720 9729 -2699.83 -9631.53 4041.77 -74 730 9728 204.696 -9019.5 4640.78 -75 740 9727 2349.77 -4833.6 2267.27 -76 750 9726 4884.23 -4601.84 -1483.22 -77 760 9725 5214.49 -3856.18 -5842.23 -78 770 9724 4675.67 -1920.13 -7500 -79 780 9723 2091.74 -2043.83 -1852.75 -80 790 9722 -509.354 -1323.63 -314.098 -81 800 9721 -2974.5 -2797.3 -207.747 -82 810 9720 -2918.98 -1400.89 -2763.46 -83 820 9719 -2394.43 121.164 -3398.75 -84 830 9718 1326.5 1455.45 -2167.33 -85 840 9717 2101.8 2573.02 -1335.45 -86 850 9716 -1046 4718.92 2165 -87 860 9715 376.26 1919.94 3819.07 -88 870 9714 10.7714 -1633.67 1516.39 -89 880 9713 1166.77 705.86 -1220.42 -90 890 9712 1421.57 1952.67 1328.22 -91 900 9711 -3236.53 -2592.42 5279.41 -92 910 9710 -4394.04 -2287.09 4906.83 -93 920 9709 -7940.11 3692.83 4605.68 -94 930 9708 -2309.8 8856.27 8230.3 -95 940 9707 1034.57 10085.6 6713.65 -96 950 9706 1128.48 9001.04 7464.47 -97 960 9705 3128.19 3884.86 6083.06 -98 970 9704 178.35 2151.26 7097.34 -99 980 9703 -2116.93 4987.84 9941.65 -100 990 9702 -3544.84 6819.91 6965.33 -101 1000 9701 -7072.69 6113.99 5457.26 -102 1010 9700 -3416.87 4057.68 6483.57 -103 1020 9699 -400.735 1483.55 3176.17 -104 1030 9698 635.853 414.272 -814.251 -105 1040 9697 1914.66 -1593.87 495.064 -106 1050 9696 2779.98 -711.254 1369.55 -107 1060 9695 1686.19 -497.061 6409.59 -108 1070 9694 831.827 -1951.56 8649.45 -109 1080 9693 -488.877 -4260.41 10421.1 -110 1090 9692 -687.611 -2842.66 11318.3 -111 1100 9691 -4087.32 -3613.02 8588.68 -112 1110 9690 -6159.28 -3438.78 2054.29 -113 1120 9689 -6190.09 978.686 -1391.36 -114 1130 9688 -11182.7 4542.25 -5041.16 -115 1140 9687 -9814.71 1272.65 -9002.01 -116 1150 9686 -6526.49 3491.2 -6902.98 -117 1160 9685 -6504.32 3576.67 -5540.22 -118 1170 9684 -6819.32 978.908 -2917.16 -119 1180 9683 -10164.2 -4.07219 654.171 -120 1190 9682 -1214.62 3123.08 1572.86 -121 1200 9681 4982.45 4345.89 1330.14 -122 1210 9680 3895.08 5845.39 2532.2 -123 1220 9679 310.181 3209.95 2637.61 -124 1230 9678 -1533.56 1907.6 2560.22 -125 1240 9677 329.962 -408.941 1674.59 -126 1250 9676 3297.4 2743.05 -2273.41 -127 1260 9675 6084.84 2605.32 -3553.61 -128 1270 9674 5620.06 479.048 -2892.57 -129 1280 9673 3728.2 1522.17 -129.983 -130 1290 9672 -4618.9 -2944.84 1188.8 -131 1300 9671 -7074.33 -3636.01 2014.3 -132 1310 9670 -7650.88 -3081.9 -4406.05 -133 1320 9669 -5599.82 -1620.63 -4005.45 -134 1330 9668 -3242.15 -1827.12 -2543.75 -135 1340 9667 -1884.45 2209.95 -322.258 -136 1350 9666 -4198.58 5048.15 53.3392 -137 1360 9665 -6983.79 2276.53 2024.76 -138 1370 9664 -9727.85 -1302.52 -1874.99 -139 1380 9663 -5452.62 454.685 -1632.64 -140 1390 9662 -7824.82 3106.45 226.723 -141 1400 9661 -8823.36 -258.729 4622.53 -142 1410 9660 -7066.72 188.554 2250.87 -143 1420 9659 -410.597 2133.88 3236.39 -144 1430 9658 3635.91 2365.36 2768.07 -145 1440 9657 3099.61 5545.9 601.046 -146 1450 9656 5280.5 8240.24 -1073.6 -147 1460 9655 1845.01 7478.09 -2435.32 -148 1470 9654 -841.493 7859.32 -2109.37 -149 1480 9653 -540.342 7799.97 -555.348 -150 1490 9652 2118.52 9648.31 -4904.88 -151 1500 9651 2721.35 7532.11 -5961.88 -152 1510 9650 -952.131 7405.09 -5255.89 -153 1520 9649 -1950.08 6695.72 -3723.25 -154 1530 9648 -2044.69 5799.98 -842.915 -155 1540 9647 641.953 4650.87 -1038.84 -156 1550 9646 647.563 2487.76 -2528.81 -157 1560 9645 2661.91 -4165.11 -4554.99 -158 1570 9644 6741.09 -9624.22 -4981.68 -159 1580 9643 8585.11 -13524.3 -2209.7 -160 1590 9642 5479.1 -10985.3 846.329 -161 1600 9641 247.458 -7694.14 6792.16 -162 1610 9640 -547.522 -10315 6258.74 -163 1620 9639 1685.88 -8754.51 2052.28 -164 1630 9638 883.435 -5594.86 2375.74 -165 1640 9637 -4245.64 -6685.81 913.198 -166 1650 9636 -6503.98 -8747.32 -498.454 -167 1660 9635 -7195.56 -5184.24 -1440.04 -168 1670 9634 -7048.6 243.553 -2323.51 -169 1680 9633 -4416.11 5250.78 -2393.15 -170 1690 9632 -2930.24 6570.13 -4916.19 -171 1700 9631 1701.07 5353.49 -5110.51 -172 1710 9630 3758.71 6130.41 -50.9598 -173 1720 9629 6366.74 5711.08 2045.43 -174 1730 9628 6883.42 3902.8 2672.99 -175 1740 9627 8868.2 6299.35 3615.61 -176 1750 9626 6368.23 3002.78 3616.91 -177 1760 9625 1812.76 -17.1449 3165.57 -178 1770 9624 4390.45 -930.439 2516.41 -179 1780 9623 6427.91 -560.594 2809.53 -180 1790 9622 3759.04 -1064.1 4171.99 -181 1800 9621 4193.51 -3080.11 3221.5 -182 1810 9620 6359.89 1075.89 2915.7 -183 1820 9619 7002.84 2428.03 1959.36 -184 1830 9618 3373.37 -1368 -399.007 -185 1840 9617 1620.78 -6428.63 -5485.94 -186 1850 9616 1116.34 -4548.84 -8967.05 -187 1860 9615 2518.4 -2810.93 -9207.8 -188 1870 9614 4104.14 -2775.73 -4994.84 -189 1880 9613 4370.52 -1281.68 -4597.95 -190 1890 9612 -1342.21 1960.75 -4851.21 -191 1900 9611 -5316.92 1186.88 -1573.83 -192 1910 9610 -5318.56 5617.23 1692.53 -193 1920 9609 -2314.02 8970.78 2754.02 -194 1930 9608 -5153.94 9120.66 3599.41 -195 1940 9607 -468.904 10706.7 3240.81 -196 1950 9606 1684.34 10865.3 579.765 -197 1960 9605 -275.842 8035.68 -3627.74 -198 1970 9604 -109.616 6494.51 -4934.5 -199 1980 9603 -2594.04 10301.9 -2639.4 -200 1990 9602 -1939.22 10786.8 -2363.1 -100000 200 -1 0 10001 395176 370916 374014 -2 10 10000 236251 215129 218856 -3 20 9999 128051 116500 110847 -4 30 9998 85423.5 77950.6 69288.6 -5 40 9997 65438.5 56199.2 50420.4 -6 50 9996 49692.4 40002.2 39923.3 -7 60 9995 36776.7 28181.4 32559.8 -8 70 9994 26558.7 21441.1 25349.4 -9 80 9993 22040.9 17074.7 15805.4 -10 90 9992 14211.8 11871.8 9559.81 -11 100 9991 8917.62 10621.4 4121.46 -12 110 9990 6159.37 7113.38 587.641 -13 120 9989 5674.66 -703.52 786.489 -14 130 9988 6936.67 -3743.85 4006.85 -15 140 9987 6644.95 -5621.64 5228.92 -16 150 9986 5980.19 -6073.62 3263.74 -17 160 9985 7621.44 -7270.44 4775.36 -18 170 9984 11128.1 -6376.81 5774.16 -19 180 9983 8872.68 -5387.16 4508.51 -20 190 9982 6665.92 -2505.86 -214.559 -21 200 9981 735.764 2167.26 -2022.2 -22 210 9980 -603.131 1643.15 -1297.22 -23 220 9979 1376.1 -1106.72 91.3038 -24 230 9978 3783.15 -2818.27 1306.12 -25 240 9977 489.346 -3054.96 755.114 -26 250 9976 -1632.63 -1719.56 -664.931 -27 260 9975 -117.911 239.838 -215.665 -28 270 9974 2982.32 4412.22 2661.51 -29 280 9973 5753.49 6758.02 8768.91 -30 290 9972 6987.1 3743.04 9032.97 -31 300 9971 6436.32 -1916.91 7317.55 -32 310 9970 6371.36 -7168.42 7879.64 -33 320 9969 7666.62 -8350.26 8964.31 -34 330 9968 8987.09 -10776.2 12361.4 -35 340 9967 7646.14 -10570.6 13228.1 -36 350 9966 11325.2 -8707.47 13003.2 -37 360 9965 13727.1 -8260.56 13962.4 -38 370 9964 11200.4 -8008.34 9822.54 -39 380 9963 7977.83 -8488.67 9393.37 -40 390 9962 3386.08 -2112.06 9437.41 -41 400 9961 5369.08 1904.78 5900.82 -42 410 9960 -2954.31 2986.7 7841.27 -43 420 9959 -8113.02 4142.66 10297 -44 430 9958 -10799.5 5453.16 6420.99 -45 440 9957 -8834.4 2960.65 2338.92 -46 450 9956 -11127 3364.95 1550.37 -47 460 9955 -12330.4 6866.64 -2345.43 -48 470 9954 -11404.6 7598.72 -5798.87 -49 480 9953 -10874.6 7665.48 -5651.49 -50 490 9952 -8452.15 4985.91 -6760.33 -51 500 9951 -4441.86 5605.6 -4683.84 -52 510 9950 321.354 5071.04 -3087.04 -53 520 9949 4714.48 3842.07 -2039.9 -54 530 9948 2481.84 6177.25 110.227 -55 540 9947 1457.31 4800.5 2935.27 -56 550 9946 -963.958 3073.34 5785.77 -57 560 9945 -3549.27 1908.39 3608.24 -58 570 9944 300.172 -1477.59 -1146.24 -59 580 9943 2305.22 -1207.57 -921.744 -60 590 9942 1061.44 -3355.22 332.993 -61 600 9941 -296.515 -6944.8 -3341.14 -62 610 9940 2704.06 -10603.3 -4980.38 -63 620 9939 6309.2 -10483 -974.669 -64 630 9938 3050.3 -10299.6 5949.43 -65 640 9937 5819.34 -9466.39 6896.72 -66 650 9936 5957.48 -6989.32 9344.71 -67 660 9935 1181.4 -6510.8 9851.02 -68 670 9934 -4041.76 -4006.8 10358.5 -69 680 9933 -4133.37 -5728.59 9463.9 -70 690 9932 -3026.05 -13961 6683.62 -71 700 9931 -3972.26 -13204.1 4313.73 -72 710 9930 -4434.15 -10209.1 707.042 -73 720 9929 -4116.24 -10097.8 4163.24 -74 730 9928 -1192.44 -8744.73 5145.18 -75 740 9927 1555.02 -4370.83 2252.87 -76 750 9926 4323 -3993.46 -1896.87 -77 760 9925 4654.35 -3474.91 -6115 -78 770 9924 3990.69 -2282.36 -7582.34 -79 780 9923 1792.42 -2305.94 -2101.16 -80 790 9922 -513.256 -1126.01 -448.882 -81 800 9921 -2365.71 -3014.77 166.903 -82 810 9920 -2390.89 -1120.36 -2433.95 -83 820 9919 -1745.16 1228.67 -3552.04 -84 830 9918 1839.34 2353.42 -2368.72 -85 840 9917 2774.15 2437.44 -1469.63 -86 850 9916 -314.383 4181.65 1820.25 -87 860 9915 1029.76 1874.93 3978.56 -88 870 9914 1376.24 -1817.91 1504.7 -89 880 9913 2325.68 537.965 -1577.43 -90 890 9912 2317.79 1568.59 1073.36 -91 900 9911 -2467.58 -2983.67 5460.28 -92 910 9910 -4045.62 -2554.53 4951.48 -93 920 9909 -7218.54 3473.35 4323.09 -94 930 9908 -1489.56 8894.02 7664.5 -95 940 9907 1385.2 9238.7 5949.11 -96 950 9906 1366.32 7977.56 6953.66 -97 960 9905 3221.85 3387.45 6004.3 -98 970 9904 -371.463 1945 7614.43 -99 980 9903 -2632.46 4789.2 10779.8 -100 990 9902 -4039.77 5730.79 7626.22 -101 1000 9901 -7345.52 4470.94 5146.62 -102 1010 9900 -3327.73 2894.95 5213.01 -103 1020 9899 -308.46 740.048 2179.24 -104 1030 9898 716.121 -194.789 -1547.25 -105 1040 9897 2077.57 -2291.84 -324.417 -106 1050 9896 3123.72 -1659.23 781.373 -107 1060 9895 1848.53 -1107.43 6095.11 -108 1070 9894 662.469 -1369.18 7960.65 -109 1080 9893 -625.725 -3048.56 9363.55 -110 1090 9892 -733.702 -2071.29 10360.5 -111 1100 9891 -4410.55 -3382.82 8262.46 -112 1110 9890 -6835.75 -2980.36 1997.62 -113 1120 9889 -6712.91 1396.18 -1330.46 -114 1130 9888 -11636.4 5061.23 -4974.5 -115 1140 9887 -9786.78 1706.16 -8839.16 -116 1150 9886 -6172.28 3857.12 -6787.49 -117 1160 9885 -5862.75 3934.61 -5331.91 -118 1170 9884 -5964.96 1452.28 -2914.59 -119 1180 9883 -8738.88 964.327 242.7 -120 1190 9882 200.876 3276.02 1226.94 -121 1200 9881 6141.05 3620.08 897.303 -122 1210 9880 4866.42 5610.08 1870.99 -123 1220 9879 1207.28 3360.16 1834.17 -124 1230 9878 -966.862 2113.31 2019.36 -125 1240 9877 251.419 116.63 854.459 -126 1250 9876 2904.04 3143.23 -3271.09 -127 1260 9875 5726.62 2895.02 -4146.26 -128 1270 9874 5278.69 1088.82 -2926.84 -129 1280 9873 4062.48 1462.71 264.639 -130 1290 9872 -3570.47 -3027.86 1891.28 -131 1300 9871 -5977.11 -3638.23 2497.59 -132 1310 9870 -6706.79 -3348.32 -3654.22 -133 1320 9869 -3874.63 -1796.24 -3234.44 -134 1330 9868 -997.47 -1896.2 -2032.83 -135 1340 9867 5.84403 2341.33 -381.895 -136 1350 9866 -2454.44 4639.8 -326.582 -137 1360 9865 -5207.04 1482.66 1962.13 -138 1370 9864 -8804.62 -1911.78 -1794.61 -139 1380 9863 -5676.09 628.104 -1338.77 -140 1390 9862 -7825.47 3205.95 684.812 -141 1400 9861 -8335.07 570.028 5045.65 -142 1410 9860 -6474 1606.1 2477.41 -143 1420 9859 780.157 3390.71 3258.67 -144 1430 9858 5035.85 3038.21 2734.88 -145 1440 9857 3653.9 5734.29 680.654 -146 1450 9856 5092.38 8634.6 -622.809 -147 1460 9855 943.957 7833.37 -1853.2 -148 1470 9854 -1824.36 7974.33 -1765.51 -149 1480 9853 -1259.67 8186.57 -383.153 -150 1490 9852 1755.12 10323.7 -4715.65 -151 1500 9851 2180.29 7556.44 -5874.21 -152 1510 9850 -1626.72 6845.01 -4695.87 -153 1520 9849 -2520.11 6322.85 -3145.43 -154 1530 9848 -2542.46 5350.64 -244.972 -155 1540 9847 -177.804 4046.64 -518.918 -156 1550 9846 -291.115 2074.82 -1987.84 -157 1560 9845 1787.71 -3923.89 -4264.67 -158 1570 9844 6226.5 -8868.14 -5138.17 -159 1580 9843 8032.5 -12823.3 -2399.96 -160 1590 9842 4820.65 -11551.4 771.788 -161 1600 9841 -450.223 -9394.78 6840.61 -162 1610 9840 -1403.38 -11912.8 6161.47 -163 1620 9839 467.061 -10032.1 2045.13 -164 1630 9838 -1014.6 -5757.57 2338.39 -165 1640 9837 -6089.43 -6280.49 772.944 -166 1650 9836 -8029.39 -8764.8 -828.432 -167 1660 9835 -7908.22 -5492.04 -2247.9 -168 1670 9834 -6387.91 -148.676 -3010.03 -169 1680 9833 -2794.75 5226.21 -2595.52 -170 1690 9832 -1103.34 7017.36 -5130.09 -171 1700 9831 3477.37 5423.28 -5087.12 -172 1710 9830 4613.54 6298.73 -101.923 -173 1720 9829 7313.88 6261.81 1879.33 -174 1730 9828 7803.03 4387.09 1781.98 -175 1740 9827 9880.86 7211.55 2508.14 -176 1750 9826 7491.35 4096.28 2955.2 -177 1760 9825 2911.65 655.284 2633.03 -178 1770 9824 4999.44 -506.166 2172.5 -179 1780 9823 6274.87 -246.137 2774.45 -180 1790 9822 3138.67 -372.547 4550.02 -181 1800 9821 3819.22 -2087.64 3234.67 -182 1810 9820 6158.3 1587.24 2754.63 -183 1820 9819 7446.04 2697.82 1726.39 -184 1830 9818 4424.5 -1273.86 -435.022 -185 1840 9817 2950.84 -6143.35 -4934.75 -186 1850 9816 2448.87 -4533.15 -8298.03 -187 1860 9815 3544.87 -2662.98 -8782.12 -188 1870 9814 4387.43 -2804.19 -4531.32 -189 1880 9813 3781.25 -2197.08 -4562.37 -190 1890 9812 -1824.8 1443.75 -5156.84 -191 1900 9811 -5751.77 1623.42 -2127.05 -192 1910 9810 -5641.41 6444.67 1246.83 -193 1920 9809 -2450.36 9240.04 2340.72 -194 1930 9808 -4637.92 9122.96 3211.54 -195 1940 9807 -426.827 11151.3 3307.03 -196 1950 9806 961.088 11393.6 830.586 -197 1960 9805 -1056.09 8363.03 -3556.04 -198 1970 9804 -316.952 7184.06 -4610.36 -199 1980 9803 -3105.54 10198.7 -2248.42 -200 1990 9802 -2595.17 10483.5 -2806.51 diff --git a/examples/KAPPA/profile.heat.7Jun16 b/examples/KAPPA/profile.heat.7Jun16 new file mode 100644 index 0000000000..32ddbec13d --- /dev/null +++ b/examples/KAPPA/profile.heat.7Jun16 @@ -0,0 +1,423 @@ +# Chunk-averaged data for fix 2 and group all +# Timestep Number-of-chunks Total-count +# Chunk Coord1 Ncount v_temp +12000 20 8000 + 1 0.025 326.75 1.76011 + 2 0.075 330.61 1.63635 + 3 0.125 350.4 1.54636 + 4 0.175 366.28 1.52687 + 5 0.225 387.83 1.42461 + 6 0.275 401.89 1.3514 + 7 0.325 419.9 1.32411 + 8 0.375 432.38 1.26508 + 9 0.425 442.47 1.21776 + 10 0.475 460.36 1.13062 + 11 0.525 473.38 1.09967 + 12 0.575 467.33 1.14472 + 13 0.625 443.61 1.19478 + 14 0.675 439.36 1.26366 + 15 0.725 425.36 1.32373 + 16 0.775 400.31 1.41125 + 17 0.825 366.52 1.53434 + 18 0.875 362.38 1.58774 + 19 0.925 356.68 1.58572 + 20 0.975 346.2 1.63678 +13000 20 8000 + 1 0.025 318.55 1.78446 + 2 0.075 339.57 1.6873 + 3 0.125 352.13 1.60227 + 4 0.175 371.22 1.50409 + 5 0.225 391.7 1.43235 + 6 0.275 403.96 1.37436 + 7 0.325 411.42 1.37362 + 8 0.375 433.7 1.27575 + 9 0.425 454.72 1.17224 + 10 0.475 465.31 1.11717 + 11 0.525 469.77 1.07014 + 12 0.575 463.38 1.1317 + 13 0.625 450.42 1.19345 + 14 0.675 431.46 1.2564 + 15 0.725 416.59 1.30352 + 16 0.775 401.69 1.36855 + 17 0.825 375.83 1.50988 + 18 0.875 364.35 1.54229 + 19 0.925 348.01 1.57123 + 20 0.975 336.22 1.68615 +14000 20 8000 + 1 0.025 319.25 1.81747 + 2 0.075 330.82 1.71274 + 3 0.125 347.34 1.60095 + 4 0.175 376.89 1.49722 + 5 0.225 388.07 1.42925 + 6 0.275 403.57 1.37239 + 7 0.325 413.7 1.34564 + 8 0.375 432.5 1.24231 + 9 0.425 454.45 1.18194 + 10 0.475 469.33 1.13752 + 11 0.525 469.94 1.08635 + 12 0.575 469.52 1.13378 + 13 0.625 451.41 1.19001 + 14 0.675 429.75 1.27268 + 15 0.725 420.06 1.32601 + 16 0.775 407.93 1.37822 + 17 0.825 379.47 1.50346 + 18 0.875 360.53 1.5774 + 19 0.925 345.93 1.6271 + 20 0.975 329.54 1.70301 +15000 20 8000 + 1 0.025 322.43 1.79905 + 2 0.075 340.11 1.69857 + 3 0.125 350.03 1.62191 + 4 0.175 364.41 1.58429 + 5 0.225 390.55 1.45217 + 6 0.275 406.7 1.40234 + 7 0.325 424.92 1.30617 + 8 0.375 441.54 1.25242 + 9 0.425 448.57 1.21286 + 10 0.475 465.2 1.12839 + 11 0.525 476.34 1.06977 + 12 0.575 466.6 1.09034 + 13 0.625 445.15 1.18607 + 14 0.675 426.93 1.24344 + 15 0.725 420.07 1.29251 + 16 0.775 398.46 1.37042 + 17 0.825 373.88 1.50286 + 18 0.875 361.55 1.55703 + 19 0.925 346.41 1.62695 + 20 0.975 330.15 1.72757 +16000 20 8000 + 1 0.025 306.33 1.8508 + 2 0.075 334.86 1.68695 + 3 0.125 356.87 1.59134 + 4 0.175 364.2 1.52883 + 5 0.225 383.43 1.45981 + 6 0.275 406.97 1.35464 + 7 0.325 420.1 1.28596 + 8 0.375 434.18 1.26101 + 9 0.425 446.62 1.20148 + 10 0.475 466.11 1.12534 + 11 0.525 483.91 1.07673 + 12 0.575 475.77 1.12051 + 13 0.625 449.05 1.20793 + 14 0.675 428.75 1.29484 + 15 0.725 418.25 1.34228 + 16 0.775 400.21 1.40828 + 17 0.825 392.3 1.44318 + 18 0.875 365.76 1.54801 + 19 0.925 343.74 1.64342 + 20 0.975 322.59 1.75857 +17000 20 8000 + 1 0.025 310.93 1.82241 + 2 0.075 329.92 1.75204 + 3 0.125 350.13 1.60837 + 4 0.175 373.94 1.52827 + 5 0.225 388.63 1.47066 + 6 0.275 401.74 1.42567 + 7 0.325 428.12 1.30522 + 8 0.375 427.11 1.28586 + 9 0.425 453.97 1.20607 + 10 0.475 467.21 1.10887 + 11 0.525 484.58 1.04962 + 12 0.575 463.16 1.12469 + 13 0.625 448.74 1.18792 + 14 0.675 424.58 1.28373 + 15 0.725 419.94 1.31273 + 16 0.775 404.58 1.37026 + 17 0.825 388.97 1.44704 + 18 0.875 362.68 1.5453 + 19 0.925 346.29 1.6109 + 20 0.975 324.78 1.75026 +18000 20 8000 + 1 0.025 317.81 1.81751 + 2 0.075 334.67 1.69028 + 3 0.125 347.24 1.65479 + 4 0.175 370.6 1.53592 + 5 0.225 384.31 1.49562 + 6 0.275 407.08 1.38014 + 7 0.325 421.73 1.29883 + 8 0.375 433.41 1.27181 + 9 0.425 447.79 1.18853 + 10 0.475 471.17 1.10893 + 11 0.525 478.19 1.06085 + 12 0.575 471.56 1.12156 + 13 0.625 452.58 1.19406 + 14 0.675 432.91 1.25675 + 15 0.725 408.06 1.3457 + 16 0.775 397.54 1.37446 + 17 0.825 381.4 1.46095 + 18 0.875 369.25 1.54246 + 19 0.925 345.61 1.63271 + 20 0.975 327.09 1.75129 +19000 20 8000 + 1 0.025 315.61 1.79908 + 2 0.075 329.82 1.70308 + 3 0.125 343.96 1.63278 + 4 0.175 372.3 1.53323 + 5 0.225 384.82 1.45132 + 6 0.275 402.05 1.37734 + 7 0.325 426.21 1.2951 + 8 0.375 437.2 1.25041 + 9 0.425 448.66 1.19301 + 10 0.475 460.07 1.15046 + 11 0.525 477.48 1.08566 + 12 0.575 466.92 1.12916 + 13 0.625 450 1.21173 + 14 0.675 432.43 1.26854 + 15 0.725 422.77 1.30946 + 16 0.775 404.66 1.38438 + 17 0.825 392.04 1.44156 + 18 0.875 360.65 1.57203 + 19 0.925 346.34 1.63047 + 20 0.975 326.01 1.71263 +20000 20 8000 + 1 0.025 317.33 1.87602 + 2 0.075 333.96 1.71854 + 3 0.125 345.85 1.68538 + 4 0.175 370.59 1.55097 + 5 0.225 380.61 1.45728 + 6 0.275 403.48 1.36314 + 7 0.325 423.92 1.29723 + 8 0.375 437.69 1.21691 + 9 0.425 445.13 1.20635 + 10 0.475 457.07 1.16643 + 11 0.525 470.23 1.10249 + 12 0.575 460.96 1.11255 + 13 0.625 452.73 1.15892 + 14 0.675 438.27 1.23227 + 15 0.725 416.93 1.29087 + 16 0.775 405.97 1.35751 + 17 0.825 393.18 1.44766 + 18 0.875 375.9 1.50591 + 19 0.925 346.29 1.61577 + 20 0.975 323.91 1.77921 +21000 20 8000 + 1 0.025 307.58 1.79848 + 2 0.075 325.01 1.71065 + 3 0.125 350.24 1.61243 + 4 0.175 365.42 1.54134 + 5 0.225 386.17 1.47103 + 6 0.275 403.83 1.36486 + 7 0.325 426.21 1.30362 + 8 0.375 436.69 1.24808 + 9 0.425 444.23 1.25963 + 10 0.475 462.32 1.16034 + 11 0.525 472.1 1.09771 + 12 0.575 470.26 1.13665 + 13 0.625 454.16 1.19576 + 14 0.675 445.95 1.22857 + 15 0.725 427.33 1.32477 + 16 0.775 404.5 1.38979 + 17 0.825 382.25 1.47878 + 18 0.875 372.91 1.50944 + 19 0.925 340.86 1.61304 + 20 0.975 321.98 1.74402 +22000 20 8000 + 1 0.025 318.14 1.82641 + 2 0.075 330.97 1.77621 + 3 0.125 339 1.67839 + 4 0.175 366.72 1.56607 + 5 0.225 390.88 1.45595 + 6 0.275 405.22 1.35061 + 7 0.325 424.26 1.29091 + 8 0.375 430.23 1.24841 + 9 0.425 449.76 1.18526 + 10 0.475 459.29 1.11561 + 11 0.525 472.2 1.07012 + 12 0.575 460.38 1.11959 + 13 0.625 451.95 1.16339 + 14 0.675 438.03 1.22565 + 15 0.725 424.58 1.30695 + 16 0.775 406.55 1.40099 + 17 0.825 390.12 1.46227 + 18 0.875 362.32 1.54729 + 19 0.925 346.31 1.64909 + 20 0.975 333.09 1.71265 +23000 20 8000 + 1 0.025 305.23 1.85561 + 2 0.075 316.24 1.7503 + 3 0.125 342.29 1.63776 + 4 0.175 361.32 1.51963 + 5 0.225 387.91 1.46099 + 6 0.275 408.48 1.3798 + 7 0.325 424.77 1.35815 + 8 0.375 435.94 1.25237 + 9 0.425 461.41 1.16863 + 10 0.475 470.9 1.13807 + 11 0.525 474.68 1.09466 + 12 0.575 464.69 1.14285 + 13 0.625 450.09 1.20136 + 14 0.675 433.29 1.26397 + 15 0.725 421.43 1.33433 + 16 0.775 410.74 1.39007 + 17 0.825 379.41 1.49507 + 18 0.875 360.62 1.55625 + 19 0.925 356.87 1.60279 + 20 0.975 333.69 1.67823 +24000 20 8000 + 1 0.025 313.08 1.84953 + 2 0.075 322.69 1.75898 + 3 0.125 342.02 1.66484 + 4 0.175 364.41 1.58799 + 5 0.225 390.21 1.42313 + 6 0.275 407.48 1.36668 + 7 0.325 421.23 1.32315 + 8 0.375 433.8 1.24529 + 9 0.425 452.64 1.16974 + 10 0.475 469.09 1.10316 + 11 0.525 479.85 1.04586 + 12 0.575 466.74 1.13969 + 13 0.625 451.65 1.19762 + 14 0.675 430.04 1.24855 + 15 0.725 417.52 1.33226 + 16 0.775 405.4 1.37658 + 17 0.825 376.39 1.48678 + 18 0.875 368.15 1.57185 + 19 0.925 354.02 1.62554 + 20 0.975 333.59 1.75438 +25000 20 8000 + 1 0.025 313.64 1.80634 + 2 0.075 324.05 1.71933 + 3 0.125 343.33 1.61348 + 4 0.175 362.61 1.54935 + 5 0.225 378.09 1.47967 + 6 0.275 414.43 1.36693 + 7 0.325 426.07 1.3185 + 8 0.375 437.75 1.25993 + 9 0.425 452.65 1.19176 + 10 0.475 471.59 1.12704 + 11 0.525 481.75 1.07074 + 12 0.575 470.23 1.11916 + 13 0.625 454.89 1.19264 + 14 0.675 435.34 1.25786 + 15 0.725 414.67 1.34818 + 16 0.775 394.04 1.42967 + 17 0.825 380.43 1.48823 + 18 0.875 370.28 1.55129 + 19 0.925 351.59 1.6162 + 20 0.975 322.57 1.74431 +26000 20 8000 + 1 0.025 308.4 1.84473 + 2 0.075 325.48 1.75272 + 3 0.125 352.47 1.62619 + 4 0.175 365.99 1.57145 + 5 0.225 391.95 1.43775 + 6 0.275 404.62 1.39548 + 7 0.325 425.2 1.28537 + 8 0.375 437.1 1.25101 + 9 0.425 451.1 1.18608 + 10 0.475 462.46 1.12661 + 11 0.525 472.15 1.07181 + 12 0.575 465.21 1.09039 + 13 0.625 453.32 1.17063 + 14 0.675 441.42 1.24972 + 15 0.725 426.69 1.2962 + 16 0.775 399.87 1.42231 + 17 0.825 381.98 1.5052 + 18 0.875 366.7 1.55646 + 19 0.925 348.6 1.65512 + 20 0.975 319.29 1.77302 +27000 20 8000 + 1 0.025 316.89 1.80217 + 2 0.075 321.88 1.73459 + 3 0.125 345.89 1.63671 + 4 0.175 370.85 1.56358 + 5 0.225 385.03 1.51454 + 6 0.275 401.79 1.42111 + 7 0.325 427.07 1.29632 + 8 0.375 439.6 1.25415 + 9 0.425 460.68 1.16856 + 10 0.475 462.89 1.14373 + 11 0.525 478.74 1.08743 + 12 0.575 471.03 1.13158 + 13 0.625 452.29 1.17223 + 14 0.675 441.54 1.23337 + 15 0.725 419.13 1.30045 + 16 0.775 407.11 1.37184 + 17 0.825 373 1.4903 + 18 0.875 355.4 1.56997 + 19 0.925 343.35 1.66031 + 20 0.975 325.84 1.74216 +28000 20 8000 + 1 0.025 321.78 1.81229 + 2 0.075 324.74 1.73651 + 3 0.125 331.52 1.62837 + 4 0.175 356.73 1.54322 + 5 0.225 381.28 1.46292 + 6 0.275 400.35 1.38037 + 7 0.325 422 1.30288 + 8 0.375 439.97 1.23362 + 9 0.425 452.44 1.17339 + 10 0.475 468.53 1.12737 + 11 0.525 475.51 1.07379 + 12 0.575 470.06 1.09663 + 13 0.625 453.01 1.17756 + 14 0.675 436.94 1.25999 + 15 0.725 420.08 1.31529 + 16 0.775 413.04 1.37827 + 17 0.825 383.82 1.50271 + 18 0.875 357.85 1.61812 + 19 0.925 346.4 1.67671 + 20 0.975 343.95 1.7339 +29000 20 8000 + 1 0.025 313.72 1.80333 + 2 0.075 328.8 1.75365 + 3 0.125 344.37 1.64779 + 4 0.175 359.25 1.56358 + 5 0.225 376.97 1.51736 + 6 0.275 405.82 1.3928 + 7 0.325 421.01 1.32598 + 8 0.375 438.17 1.23454 + 9 0.425 455.16 1.17988 + 10 0.475 470.1 1.14151 + 11 0.525 480 1.09958 + 12 0.575 472.1 1.13539 + 13 0.625 452.87 1.20604 + 14 0.675 436.55 1.23619 + 15 0.725 422.97 1.30866 + 16 0.775 405.26 1.35304 + 17 0.825 376 1.46238 + 18 0.875 367.09 1.55544 + 19 0.925 346.8 1.60587 + 20 0.975 326.99 1.68799 +30000 20 8000 + 1 0.025 321.81 1.8543 + 2 0.075 331.9 1.76078 + 3 0.125 347.94 1.66013 + 4 0.175 370.04 1.53588 + 5 0.225 381.88 1.46325 + 6 0.275 397.98 1.3956 + 7 0.325 413.72 1.3412 + 8 0.375 436.53 1.25271 + 9 0.425 452.86 1.17908 + 10 0.475 463.63 1.10328 + 11 0.525 478.33 1.05537 + 12 0.575 468.82 1.10703 + 13 0.625 448.79 1.18322 + 14 0.675 433.19 1.23552 + 15 0.725 420.5 1.27843 + 16 0.775 399.18 1.38097 + 17 0.825 385.02 1.44688 + 18 0.875 364.12 1.5531 + 19 0.925 345.41 1.63361 + 20 0.975 338.35 1.75235 +31000 20 8000 + 1 0.025 310.01 1.8588 + 2 0.075 325.87 1.67311 + 3 0.125 346.92 1.60961 + 4 0.175 359.66 1.57966 + 5 0.225 383.88 1.48165 + 6 0.275 402.2 1.39282 + 7 0.325 414.39 1.33445 + 8 0.375 435.04 1.25763 + 9 0.425 454.62 1.19412 + 10 0.475 463.43 1.14685 + 11 0.525 480.51 1.09661 + 12 0.575 472.75 1.11081 + 13 0.625 462.84 1.1498 + 14 0.675 443.69 1.22548 + 15 0.725 419.56 1.35579 + 16 0.775 402.69 1.42284 + 17 0.825 384.78 1.4833 + 18 0.875 356.57 1.56438 + 19 0.925 351.55 1.60594 + 20 0.975 329.04 1.69805 diff --git a/examples/README b/examples/README index 9eac6498c4..841eb0c20f 100644 --- a/examples/README +++ b/examples/README @@ -157,7 +157,7 @@ The HEAT directory has example scripts for heat exchange algorithms methods. See the HEAT/README file for more info. The KAPPA directory has example scripts for computing the thermal -conductivity (kappa) of a LJ liquid using 4 different methods. See +conductivity (kappa) of a LJ liquid using 5 different methods. See the KAPPA/README file for more info. The MC directory has an example script for using LAMMPS as an diff --git a/examples/USER/dpd/README b/examples/USER/dpd/README index 7c8c2b2e69..668effbe23 100644 --- a/examples/USER/dpd/README +++ b/examples/USER/dpd/README @@ -1,8 +1,10 @@ This directory contains input files for DPD simulations under -isothermal, isoenergetic, isobaric and isoenthalpic conditions. All -the DPD scenarios use the Shardlow splitting algorithm to integrate -the equations of motion. The compute dpd command is used in the -isoenergetic and isenthalpic case to demonstrate how one can access -the particle internal energies. +isothermal, isoenergetic, isobaric and isoenthalpic conditions. In +addition, there is also an example for a reaction DPD simulation under +isoenergetic conditions. All the DPD scenarios use the Shardlow +splitting algorithm to integrate the equations of motion. The compute +dpd command is used in the isoenergetic and isenthalpic case to +demonstrate how one can access the particle internal energies. + diff --git a/examples/USER/dpd/dpdrx-shardlow/in.dpdrx b/examples/USER/dpd/dpdrx-shardlow/in.dpdrx new file mode 100755 index 0000000000..c4fc40596d --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/in.dpdrx @@ -0,0 +1,64 @@ +# Example for running DPD-RX + +log log.dpdrx +boundary p p p +units metal # ev, ps +atom_style dpd +atom_modify map array +fix 4 all rx kinetics.dpdrx none lammps_rk4 1 + +lattice hcp 6.6520898 origin 0.0833333333333 0.25 0.25 orient z 1 0 0 orient x 0 1 0 orient y 0 0 1 +region box block 0 6.0 0 6.0 0.0 6.0 units lattice +create_box 2 box +region atoms block 0 6.0 0 6.0 0.0 6.0 units lattice +create_atoms 1 region atoms + +comm_modify mode single vel yes +mass * 222.12 + +#Set concentrations +set atom * d_rdx 1.00 +set atom * d_h2 0.0 +set atom * d_no2 0.0 +set atom * d_n2 0.0 +set atom * d_hcn 0.0 +set atom * d_no 0.0 +set atom * d_h2o 0.0 +set atom * d_co 0.0 +set atom * d_co2 0.0 + +#Set the internal temperature of the particles +set atom * dpd/theta 2065.00 + +#Set the kinetic temperature of the particles +velocity all create 2065.0 875661 dist gaussian + +timestep 0.001 + +pair_style hybrid/overlay dpd/fdt/energy 16.00 234324 exp6/rx 16.00 +pair_coeff * * dpd/fdt/energy 0.0 0.05 10.0 16.00 +pair_coeff * * exp6/rx params.exp6 1fluid 1fluid 1.0 1.0 16.00 + +fix 1 all shardlow +fix 2 all nve +fix 3 all eos/table/rx linear table.eos 4001 KEYWORD thermo.dpdrx +#fix 4 all rx lammps_rk4 kinetics.dpdrx + +compute dpdU all dpd +compute dpdUatom all dpd/atom +compute crdx all property/atom d_rdx + +variable totEnergy equal pe+c_dpdU[1]+c_dpdU[2]+c_dpdU[3] + +thermo 1 +thermo_style custom step temp press vol pe ke c_dpdU[1] c_dpdU[2] c_dpdU[3] v_totEnergy c_dpdU[4] +thermo_modify format float %15.8f flush yes + +dump 2 all custom 1 dump.dpdrx id x y z vx vy vz c_dpdUatom[1] c_dpdUatom[2] c_dpdUatom[3] c_dpdUatom[4] c_crdx +dump_modify 2 sort id + +restart 10 restart.dpdrx + +write_data data.dpdrx.initial +run 10 +write_data data.dpdrx.final diff --git a/examples/USER/dpd/dpdrx-shardlow/kinetics.dpdrx b/examples/USER/dpd/dpdrx-shardlow/kinetics.dpdrx new file mode 100755 index 0000000000..ebc76294be --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/kinetics.dpdrx @@ -0,0 +1,12 @@ +# reaction equations and parameters +# multiple entries can be added to this file +# these entries are in LAMMPS "metal" units: +# Arr = 1/picosec or Angstroms^3/mol/picosec; Ern = eV + +# format of a single entry (one or more lines): +# rxn equation, Arn, Ern + +1.0 rdx = 3.0 hcn + 1.5 no2 + 1.5 no + 1.5 h2o 2.51000000000000E+04 0.0 1.912325921964536 +1.0 hcn + 1.0 no2 = 1.0 no + 0.5 n2 + 0.5 h2 + 1.0 co 2.49081028001241E+01 0.0 1.344265387322009 +1.0 hcn + 1.0 no = 1.0 co + 1.0 n2 + 0.5 h2 4.98162056E+00 0.0 1.517718985686140 +1.0 no + 1.0 co = 0.5 n2 + 1.0 co2 1.66054018667494E+06 0.0 6.938245245 diff --git a/examples/USER/dpd/dpdrx-shardlow/params.exp6 b/examples/USER/dpd/dpdrx-shardlow/params.exp6 new file mode 100755 index 0000000000..04864bb9db --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/params.exp6 @@ -0,0 +1,16 @@ +# rx parameters for various molecules +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# these entries are in LAMMPS "metal" units: +# alpha = unitless; epsilon = eV; rho = Angstroms; + +# format of a single entry (one or more lines): +# species, exp6, alpha, epsilon, rm + +hcn exp6 13.57 0.030862657941745 5.3725 +no2 exp6 13.57 0.029126283357001 4.2744 +no exp6 13.10 0.013090454747817 3.7142 +h2o exp6 11.01 0.022473771300313 3.5348 +co exp6 13.24 0.0086353397713660428 4.1759 +co2 exp6 14.09 0.019672305322873507 4.1757 +h2 exp6 11.23 0.002618780329051 3.4925 +n2 exp6 12.97 0.008635339808299 4.1778 diff --git a/examples/USER/dpd/dpdrx-shardlow/table.eos b/examples/USER/dpd/dpdrx-shardlow/table.eos new file mode 100755 index 0000000000..d4a4085261 --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/table.eos @@ -0,0 +1,4006 @@ +# EOS TABLE FROM MARTIN + +KEYWORD +N 4001 rdx h2 no2 n2 hcn no h2o co co2 + +1 0.00 -4.69225982859849288786e-01 -8.95260588880977536963e-02 -1.18526952517906569717e-01 -9.15809242071203427615e-02 -1.12576258266148046538e-01 -9.41081115411522145520e-02 -1.01883310117228328973e-01 -9.24290185576487621777e-02 -1.23100093449991648820e-01 +2 5.00 -4.61827796466670492670e-01 -8.80246995238731788636e-02 -1.16539245784660905336e-01 -9.00451045825909901499e-02 -1.10688345163954912631e-01 -9.25299107774215923161e-02 -1.00174718634446741072e-01 -9.08789763211378803787e-02 -1.21035694766854343141e-01 +3 10.00 -4.54429610073491863087e-01 -8.65233401596486040308e-02 -1.14551539051415268711e-01 -8.85092849581652907354e-02 -1.08800432061761737090e-01 -9.09517100136909700803e-02 -9.84661271516651531721e-02 -8.93289340847306795323e-02 -1.18971296084753458411e-01 +4 15.00 -4.47031423680313066971e-01 -8.50219807954240430758e-02 -1.12563832317133197258e-01 -8.69734653336359520015e-02 -1.06912518959568603183e-01 -8.93735092499603617222e-02 -9.67575356689871768356e-02 -8.77788918483234370527e-02 -1.16906897401616166610e-01 +5 20.00 -4.39633237288170719559e-01 -8.35206214311994682431e-02 -1.10576125583887546755e-01 -8.54376457092102525870e-02 -1.05024605858411876347e-01 -8.77953084862297256086e-02 -9.50489441862055750576e-02 -8.62288496119162223286e-02 -1.14842498718478874808e-01 +6 25.00 -4.32235050894991978954e-01 -8.20192620669748934104e-02 -1.08588418850641882374e-01 -8.39018260847845531725e-02 -1.03136692756218700806e-01 -8.62171077224991033727e-02 -9.33403527034239732796e-02 -8.46788073755089937267e-02 -1.12778100036377990079e-01 +7 30.00 -4.24836864501813182837e-01 -8.05179027027503185776e-02 -1.06600712117396231871e-01 -8.23660064602552144386e-02 -1.01248779654336484857e-01 -8.46389069587684811369e-02 -9.16317612206423715016e-02 -8.31287651391017928804e-02 -1.10713701353240698277e-01 +8 35.00 -4.17438678108634386721e-01 -7.90165433385257298671e-02 -1.04613005383114174296e-01 -8.08301868358295289019e-02 -9.93608665524542550296e-02 -8.30607061950378727788e-02 -8.99231697378607836013e-02 -8.15787229026945504007e-02 -1.08649302671139799670e-01 +9 40.00 -4.10040491715455701627e-01 -7.75151839744048082315e-02 -1.02625298650179441751e-01 -7.92943672113001901680e-02 -9.74729534505720529580e-02 -8.14825054313072505430e-02 -8.82145782550791957011e-02 -8.00286806662873356766e-02 -1.06584903988002507869e-01 +10 45.00 -4.02642305323313354215e-01 -7.60138246101802333987e-02 -1.00637591916622887167e-01 -7.77585475868744907535e-02 -9.55850403486898092531e-02 -7.99043046675766283071e-02 -8.65059867724012193646e-02 -7.84786384298801209525e-02 -1.04520505305901623139e-01 +11 50.00 -3.95244118930134558099e-01 -7.45124652459556724438e-02 -9.86498851831699441473e-02 -7.62227279623451520196e-02 -9.36971272468075933038e-02 -7.83261039038460199491e-02 -8.47973952896196314644e-02 -7.69285961934728784728e-02 -1.02456106622660692018e-01 +12 55.00 -3.87845932536955761982e-01 -7.30111058817310837332e-02 -9.66621784496133618081e-02 -7.46869083379194526051e-02 -9.18092141449253634766e-02 -7.67479031401153838354e-02 -8.30888038068380296863e-02 -7.53785539569620383071e-02 -1.00391707940041582936e-01 +13 60.00 -3.80447746143777021377e-01 -7.15097465175065089005e-02 -9.46744717161604187883e-02 -7.31510887134937531906e-02 -8.99213010430431336495e-02 -7.51697023763847615996e-02 -8.13802123240564140305e-02 -7.38285117205547958275e-02 -9.83273092573188761678e-02 +14 65.00 -3.73049559750598225261e-01 -7.00083871532819479455e-02 -9.26867649827074896463e-02 -7.16152690889644144567e-02 -8.80333879411609177001e-02 -7.35915016126541532415e-02 -7.96716208412748122525e-02 -7.22784694841475949811e-02 -9.62629105745961277663e-02 +15 70.00 -3.65651373358455877849e-01 -6.85070277890573731128e-02 -9.06990582491509211849e-02 -7.00794494645387150422e-02 -8.61454748391750485537e-02 -7.20133008489235171279e-02 -7.79630293584932104745e-02 -7.07284272477403525015e-02 -9.41985118918733932425e-02 +16 75.00 -3.58253186965277192755e-01 -6.70056684248328121578e-02 -8.87113515156979781651e-02 -6.85436298400093624306e-02 -8.42575617372928326043e-02 -7.04351000851929087698e-02 -7.62544378758152757714e-02 -6.91783850113331377774e-02 -9.21341132091506587187e-02 +17 80.00 -3.50855000572098396638e-01 -6.55043090606082234473e-02 -8.67236447822450490230e-02 -6.70078102155836630160e-02 -8.23696486354106027772e-02 -6.88568993214623004118e-02 -7.45458463930336601155e-02 -6.76283427749259230533e-02 -9.00697145264279380728e-02 +18 85.00 -3.43456814178919600522e-01 -6.40029496964872879339e-02 -8.47359380486884666839e-02 -6.54719905911579636015e-02 -8.04817355335283729501e-02 -6.72786985577316642981e-02 -7.28372549102520583375e-02 -6.60783005385186944514e-02 -8.80053158437052035490e-02 +19 90.00 -3.36058627785740859917e-01 -6.25015903322627269789e-02 -8.27482313152355236641e-02 -6.39361709666286248677e-02 -7.85938224316461570007e-02 -6.57004977940010559401e-02 -7.11286634274704565595e-02 -6.45282583021114797273e-02 -8.59409171610861222224e-02 +20 95.00 -3.28660441393598512505e-01 -6.10002309680381452073e-02 -8.07605245817825945220e-02 -6.24003513422029254532e-02 -7.67059093297639271736e-02 -6.41222970302704337042e-02 -6.94200719446888547814e-02 -6.29782160657042511254e-02 -8.38765184783633738208e-02 +21 100.00 -3.21262255000419716389e-01 -5.94988716038135773134e-02 -7.87728178482260260607e-02 -6.08645317176735867193e-02 -7.48179962278817112242e-02 -6.25440962665397975906e-02 -6.77114804619072530034e-02 -6.14281738292970294624e-02 -8.18121197956406531748e-02 +22 105.00 -3.13864068607240920272e-01 -5.79975122395890024807e-02 -7.67851111147730830409e-02 -5.93287120932478873048e-02 -7.29300831259994813971e-02 -6.09658955028091892325e-02 -6.60028889792292905447e-02 -5.98781315927861615411e-02 -7.97477211129179186511e-02 +23 110.00 -3.06465882214062179667e-01 -5.64961528753644276479e-02 -7.47974043812165284573e-02 -5.77928924687185485709e-02 -7.10421700241172515700e-02 -5.93876947390785600578e-02 -6.42942974964477026445e-02 -5.83280893563789468170e-02 -7.76833224301951841273e-02 +24 115.00 -2.99067695820883439062e-01 -5.49947935111398458763e-02 -7.28096976477635854375e-02 -5.62570728442928491564e-02 -6.91542569222350356206e-02 -5.78094939753479378219e-02 -6.25857060136661008665e-02 -5.67780471199717320929e-02 -7.56189237474724496035e-02 +25 120.00 -2.91669509428741091650e-01 -5.34934341469152779824e-02 -7.08219909143106424176e-02 -5.47212532198671497419e-02 -6.72663438203528196713e-02 -5.62312932116173294639e-02 -6.08771145308844990884e-02 -5.52280048835645034910e-02 -7.35545250648533543991e-02 +26 125.00 -2.84271323035562295534e-01 -5.19920747826907031497e-02 -6.88342841807540739563e-02 -5.31854335953378110080e-02 -6.53784307184705898441e-02 -5.46530924478867002891e-02 -5.91685230481028973104e-02 -5.36779626471572818280e-02 -7.14901263821306198754e-02 +27 130.00 -2.76873136642383610440e-01 -5.04907154184661283169e-02 -6.68465774473011309365e-02 -5.16496139709121046546e-02 -6.34905176165883738948e-02 -5.30748916841560849922e-02 -5.74599315653213024713e-02 -5.21279204107500601650e-02 -6.94257276994078853516e-02 +28 135.00 -2.69474950249204814323e-01 -4.89893560543451928035e-02 -6.48588707138481879166e-02 -5.01137943463827659207e-02 -6.16026045147061371288e-02 -5.14966909204254627563e-02 -5.57513400826433400126e-02 -5.05778781743428385020e-02 -6.73613290166851647056e-02 +29 140.00 -2.62076763857062411400e-01 -4.74879966901206249097e-02 -6.28711639802916333331e-02 -4.85779747219570665062e-02 -5.97146914127202679823e-02 -4.99184901566948474594e-02 -5.40427485998617382346e-02 -4.90278359379356029613e-02 -6.52969303339624163041e-02 +30 145.00 -2.54678577463883670795e-01 -4.59866373258960500769e-02 -6.08834572468386833743e-02 -4.70421550975313740306e-02 -5.78267783108380450940e-02 -4.83402893929642252235e-02 -5.23341571170801364565e-02 -4.74777937015283882372e-02 -6.32325316512396956581e-02 +31 150.00 -2.47280391070704930190e-01 -4.44852779616714752442e-02 -5.88957505132821149130e-02 -4.55063354730020352967e-02 -5.59388652089558222058e-02 -4.67620886292336099266e-02 -5.06255656342985416174e-02 -4.59277514650175203159e-02 -6.11681329686206143315e-02 +32 155.00 -2.39882204677526134073e-01 -4.29839185974469004115e-02 -5.69080437798291788321e-02 -4.39705158485763358822e-02 -5.40509521070735993176e-02 -4.51838878655029807518e-02 -4.89169741515169329005e-02 -4.43777092286103055918e-02 -5.91037342858978728688e-02 +33 160.00 -2.32484018284347421224e-01 -4.14825592332223325176e-02 -5.49203370463762427511e-02 -4.24346962240469971483e-02 -5.21630390051913764293e-02 -4.36056871017723585160e-02 -4.72083826687353380613e-02 -4.28276669922030839288e-02 -5.70393356031751452839e-02 +34 165.00 -2.25085831892205046056e-01 -3.99811998689977576849e-02 -5.29326303128196673509e-02 -4.08988765996212907949e-02 -5.02751259033091535411e-02 -4.20274863380417432190e-02 -4.54997911860573825416e-02 -4.12776247557958622658e-02 -5.49749369204524038213e-02 +35 170.00 -2.17687645499026277696e-01 -3.84798405047731828521e-02 -5.09449235793667312699e-02 -3.93630569750919520611e-02 -4.83872128014269306528e-02 -4.04492855744147672414e-02 -4.37911997032757807635e-02 -3.97275825193886406028e-02 -5.29105382377296831753e-02 +36 175.00 -2.10289459105847509335e-01 -3.69784811405486080194e-02 -4.89572168459137951890e-02 -3.78272373506662526466e-02 -4.64992996995447077646e-02 -3.88710848106841450056e-02 -4.20826082204941789855e-02 -3.81775402829814189398e-02 -5.08461395550069417126e-02 +37 180.00 -2.02891272712668768730e-01 -3.54771217763240331866e-02 -4.69695101123572197888e-02 -3.62914177262405532320e-02 -4.46113865976624709986e-02 -3.72928840469535158308e-02 -4.03740167377125772075e-02 -3.66274980465741972768e-02 -4.87817408723878603860e-02 +38 185.00 -1.95493086319490000369e-01 -3.39757624122031046121e-02 -4.49818033789042837078e-02 -3.47555981017112144982e-02 -4.27234734957802481103e-02 -3.57146832832229005339e-02 -3.86654252549309823683e-02 -3.50774558101669756138e-02 -4.67173421896651189233e-02 +39 190.00 -1.88094899927347625201e-01 -3.24744030479785367183e-02 -4.29940966454513476269e-02 -3.32197784772855150837e-02 -4.08355603938980252221e-02 -3.41364825194922852369e-02 -3.69568337721493736514e-02 -3.35274135737597539508e-02 -4.46529435069423913385e-02 +40 195.00 -1.80696713534168912352e-01 -3.09730436837539584161e-02 -4.10063899118947722267e-02 -3.16839588527561763498e-02 -3.89476472920158023339e-02 -3.25582817557616630011e-02 -3.52482422894714181316e-02 -3.19773713373525322878e-02 -4.25885448242196568147e-02 +41 200.00 -1.73298527140990143991e-01 -2.94716843195293835833e-02 -3.90186831784418430846e-02 -3.01481392283304734658e-02 -3.70597341901335794456e-02 -3.09800809920310372958e-02 -3.35396508066898163536e-02 -3.04273291008416643666e-02 -4.05241461414969292298e-02 +42 205.00 -1.65811172377804627587e-01 -2.79703249553048122200e-02 -3.70309764448852607455e-02 -2.86123196039047775208e-02 -3.51718210882513565574e-02 -2.94018802283004219988e-02 -3.18310593239082215145e-02 -2.88772868644344461730e-02 -3.84597474587741947061e-02 +43 210.00 -1.58154791588288129445e-01 -2.64689655910802373873e-02 -3.50432697114323246645e-02 -2.70764999793754387869e-02 -3.32839079862654874109e-02 -2.78236794645697997630e-02 -3.01224678411266162670e-02 -2.73272446280272245100e-02 -3.63953487761551064406e-02 +44 215.00 -1.50340439338397219293e-01 -2.49676062268556694934e-02 -3.30555629779793885836e-02 -2.55406803549497359029e-02 -3.13959948843832645227e-02 -2.62454787008391775271e-02 -2.84138763583450179584e-02 -2.57772023916200028471e-02 -3.43309500934323719168e-02 +45 220.00 -1.42376056062532813096e-01 -2.34662468626310877218e-02 -3.10678562444228166528e-02 -2.40048607304203971691e-02 -2.95080817825010416344e-02 -2.46672779371085622302e-02 -2.67052848755634196498e-02 -2.42271601552127777146e-02 -3.22665514107096373930e-02 +46 225.00 -1.34267237829176822039e-01 -2.19648874984065163585e-02 -2.90801495109698805719e-02 -2.24690411059946977546e-02 -2.76201686806188187462e-02 -2.30890771733779399943e-02 -2.49966933928854571911e-02 -2.26771179188055560516e-02 -3.02021527279869063387e-02 +47 230.00 -1.26017825248816162098e-01 -2.04635281342855843145e-02 -2.70924427775169444910e-02 -2.09332214814653555512e-02 -2.57322555787365958579e-02 -2.15108764096473177585e-02 -2.32881019101038554131e-02 -2.11270756823983343886e-02 -2.81377540452641752844e-02 +48 235.00 -1.17630354545539328459e-01 -1.89621687700610129512e-02 -2.51047360439603725601e-02 -1.93974018570396561367e-02 -2.38443424768543695003e-02 -1.99326756459166989921e-02 -2.15795104273222571045e-02 -1.95770334459911127256e-02 -2.60733553625414407606e-02 +49 240.00 -1.09106403190484924082e-01 -1.74608094058364381185e-02 -2.31170293105074364792e-02 -1.78615822326139636611e-02 -2.19564293749721431426e-02 -1.83544748821860802257e-02 -1.98709189445406553265e-02 -1.80269912095838910626e-02 -2.40089566798187097063e-02 +50 245.00 -1.00446854660062659392e-01 -1.59594500416118667552e-02 -2.11293225770544969289e-02 -1.63257626080846214578e-02 -2.00685162730899202543e-02 -1.67762741184554579899e-02 -1.81623274617590570179e-02 -1.64769489730730300803e-02 -2.19445579971996214408e-02 +51 250.00 -9.16521009660378610517e-02 -1.44580906773872936572e-02 -1.91416158434979284675e-02 -1.47899429836589220433e-02 -1.81806031712076973661e-02 -1.51980733547248392235e-02 -1.64537359789774552399e-02 -1.49269067366658049478e-02 -1.98801593144768834476e-02 +52 255.00 -8.27221972261519278291e-02 -1.29567313131627188244e-02 -1.71539091100449889171e-02 -1.32541233591295798400e-02 -1.62926900693254710084e-02 -1.36198725909942169876e-02 -1.47451444962994979854e-02 -1.33768645002585850196e-02 -1.78157606317541558627e-02 +53 260.00 -7.36569791833917436596e-02 -1.14553719489381457264e-02 -1.51662023764884117821e-02 -1.17183037347038821602e-02 -1.44047769674432481202e-02 -1.20416718272635964865e-02 -1.30365530135178962073e-02 -1.18268222638513616218e-02 -1.57513619490314213389e-02 +54 265.00 -6.44561520809560639655e-02 -9.95401258473430083917e-03 -1.31784956430354791707e-02 -1.01824841102263613513e-02 -1.25168638655610252319e-02 -1.04634710635329759854e-02 -1.13279615307362961640e-02 -1.02767800274545031969e-02 -1.36869632663086885499e-02 +55 270.00 -5.51193573673731812557e-02 -8.45265322052009097920e-03 -1.11907889095825430897e-02 -8.64666448575920724984e-03 -1.06289507636787988742e-02 -8.88527029979199224619e-03 -9.61937004796505935877e-03 -8.72673779103691829584e-03 -1.16225645835859574956e-02 +56 275.00 -4.56462222443668463878e-02 -6.95129385630588198658e-03 -9.20308217606742411110e-03 -7.11084486129205054633e-03 -8.74103766174475285688e-03 -7.30706953606137174506e-03 -7.91077856519382255351e-03 -7.17669555461933166007e-03 -9.55816590092540933898e-03 +57 280.00 -3.60363959413143100652e-02 -5.44993449209167299396e-03 -7.21537544257303247591e-03 -5.57502523682489471019e-03 -6.85312455986252996865e-03 -5.72886877233075124394e-03 -6.20218708243295158838e-03 -5.62665331820174589167e-03 -7.49376721822340649548e-03 +58 285.00 -2.62895757362916586419e-02 -3.94857512787746313399e-03 -5.22766870907864170809e-03 -4.03920561235773974140e-03 -4.96521145796994210764e-03 -4.15066800861049484822e-03 -4.49359559967207975589e-03 -4.07661108178415925590e-03 -5.42936853552140191725e-03 +59 290.00 -1.64055250719009546034e-02 -2.44721576367361737941e-03 -3.23996197559461417831e-03 -2.50338598788022023353e-03 -3.07729835607735337927e-03 -2.57246724487987478078e-03 -2.78500411690084295063e-03 -2.52656884535620894841e-03 -3.36496985280903410098e-03 +60 295.00 -6.38408559813819290185e-03 -9.45856399454226442515e-04 -1.25225524210022297680e-03 -9.67566363415137175100e-04 -1.18938525419512875630e-03 -9.94266481149254496494e-04 -1.07641263413997133498e-03 -9.76526608943804799029e-04 -1.30057117010702995644e-03 +61 300.00 3.77481542963863407267e-03 5.55521125744531008191e-04 7.36001358439332159685e-04 5.68333322483155706575e-04 6.98934715242172793781e-04 5.84030483983836220391e-04 6.32409567063508030148e-04 5.73580723415302996641e-04 7.64322600467006309059e-04 +62 305.00 1.40711612823087878904e-02 2.05711328752400564313e-03 2.73068109353704962725e-03 2.10517042091724329231e-03 2.59202581329693411069e-03 2.16345316630547727932e-03 2.34393349051529274740e-03 2.12445081778977248183e-03 2.83500220094126762632e-03 +63 310.00 2.45048445477054378794e-02 3.55897860218330102169e-03 4.73333105496186526406e-03 3.64317671717093128844e-03 4.49108703746311632016e-03 3.74427807477491778401e-03 4.05882803276921486080e-03 3.67627384698855511416e-03 4.91286827442896385093e-03 +64 315.00 3.50756679016529723802e-02 5.06112330759926967727e-03 6.74390107437382660405e-03 5.18235184370106124335e-03 6.39613796199276635202e-03 5.32650263432652478629e-03 5.77709314392938193955e-03 5.22905134017156731502e-03 6.99788379263920762297e-03 +65 320.00 4.57833463292944484180e-02 6.56355359734844736458e-03 8.76234124758905157104e-03 6.72269541618602996941e-03 8.30719688912173563622e-03 6.91012426206044465260e-03 7.49872872275925486663e-03 6.78278480496315953202e-03 9.09001188164403582659e-03 +66 325.00 5.66275103859694914354e-02 8.06627562093921446351e-03 1.07886019335267265007e-02 8.26420703364912773159e-03 1.02242808730718896110e-02 8.49514036735556782309e-03 9.22373461699982008510e-03 8.33747572746144915978e-03 1.11892158213187480065e-02 +67 330.00 6.76077101780656192220e-02 9.56929548398798186792e-03 1.28226337529757910411e-02 9.80688627854143894769e-03 1.21474057436812676175e-02 1.00815483519317121430e-02 1.09521106237219761209e-02 9.89312557238340023469e-03 1.32954590450102549948e-02 +68 335.00 7.87234198157470144164e-02 1.10726192485197470067e-02 1.48643875879523549438e-02 1.13507327168765933395e-02 1.40765861298269498447e-02 1.16693456099221763711e-02 1.26838564896374524082e-02 1.14497357830959448077e-02 1.54087051385213939791e-02 +69 340.00 8.99740421510070165212e-02 1.25762529328851888066e-02 1.69138145802176266541e-02 1.28957458982514715923e-02 1.60118354826406482372e-02 1.32585295281535606171e-02 1.44189719114201000266e-02 1.30073077817817756713e-02 1.75289178404529517874e-02 +70 345.00 1.01358913651905066522e-01 1.40802025125690618429e-02 1.89708661307389919726e-02 1.44419253560846057999e-02 1.79531660980920722281e-02 1.48490974856690383099e-02 1.61574565362759096920e-02 1.45658429693564604041e-02 1.96560610407215882733e-02 +71 350.00 1.12877309307273826500e-01 1.55844739196719962726e-02 2.10354938982390340940e-02 1.59892706076161621176e-02 1.99005891398728734787e-02 1.64410468547543757445e-02 1.78993099618704708254e-02 1.61253427256964412817e-02 2.17900987807671288332e-02 +72 355.00 1.24528447479398743369e-01 1.70890730435945166488e-02 2.31076497980554837475e-02 1.75377811541255861083e-02 2.18541146610576123011e-02 1.80343750001295509422e-02 1.96445317368471768227e-02 1.76858084097426711268e-02 2.39309952527234290343e-02 +73 360.00 1.36311494639168612197e-01 1.85940057311407003215e-02 2.51872860019339388227e-02 1.90874564807243241038e-02 2.38137516269047930240e-02 1.96290792795705930363e-02 2.13931213612417805980e-02 1.92472413595006150433e-02 2.60787147989001572013e-02 +74 365.00 1.48225569950946683973e-01 2.00992777867254474033e-02 2.72743549359550328803e-02 2.06382960569776834070e-02 2.57795079356886759625e-02 2.12251570435986643137e-02 2.31450782868969744122e-02 2.08096428921439070836e-02 2.82332219116791967306e-02 +75 370.00 1.60269749664462224370e-01 2.16048949724781287618e-02 2.93688092803271738607e-02 2.21902993363865992660e-02 2.77513904407748618342e-02 2.28226056361018926621e-02 2.49004019173587262670e-02 2.23730143038070421191e-02 3.03944812321672655497e-02 +76 375.00 1.72443071310198564605e-01 2.31108630084498507806e-02 3.14706019679355381014e-02 2.37434657571131378651e-02 2.97294049714520794425e-02 2.44214223939208316394e-02 2.66590916088090684744e-02 2.39373568705181713479e-02 3.25624575506104976808e-02 +77 380.00 1.84744537662625690766e-01 2.46171875731316866509e-02 3.35796861834093476884e-02 2.52977947416695922445e-02 3.17135563535567988058e-02 2.60216046470557148262e-02 2.84211466696515265007e-02 2.55026718470590281485e-02 3.47371158052543899108e-02 +78 385.00 1.97173120496150239278e-01 2.61238743031437410658e-02 3.56960153623963466485e-02 2.68532856970220834558e-02 3.37038484308232466624e-02 2.76231497191846732397e-02 3.01865663616511618883e-02 2.70689604682086380760e-02 3.69184210822401798202e-02 +79 390.00 2.09727764105800879024e-01 2.76309287937533468171e-02 3.78195431901118123141e-02 2.84099380149015028063e-02 3.57002840843679281058e-02 2.92260549269382635673e-02 3.19553498995200357946e-02 2.86362239479141730825e-02 3.91063386148793185049e-02 +80 395.00 2.22407388606121664276e-01 2.91383565992896428898e-02 3.99502236006131355994e-02 2.99677510719071650558e-02 3.77028652534178165823e-02 3.08303175807285723131e-02 3.37274964519535744301e-02 3.02044634801200972962e-02 4.13008337831353225522e-02 +81 400.00 2.35210893021746969556e-01 3.06461632326253570480e-02 4.20880107758669769202e-02 3.15267242291958835199e-02 3.97115929544839749155e-02 3.24359349845419475677e-02 3.55030051412160568836e-02 3.17736802383535993366e-02 4.35018721133127866940e-02 +82 405.00 2.48137158158257736806e-01 3.21543541662132337233e-02 4.42328591442983434789e-02 3.30868568332074036720e-02 4.17264673017787926512e-02 3.40429044357316856750e-02 3.72818750438660487245e-02 3.33438753756209391166e-02 4.57094192774355895237e-02 +83 410.00 2.61185049274046510170e-01 3.36629348317750917707e-02 4.63847233805832689923e-02 3.46481482152499464799e-02 4.37474875254568185134e-02 3.56512232258472325230e-02 3.90641051913783107774e-02 3.49150500253402260031e-02 4.79234410928322876466e-02 +84 415.00 2.74353418564592665962e-01 3.51719106206127493652e-02 4.85435584038869452628e-02 3.62105976919146477222e-02 4.57746519915138705414e-02 3.72608886398049857225e-02 4.08496945695218729999e-02 3.64872053005122903846e-02 5.01439035213070288810e-02 +85 420.00 2.87641107452928812549e-01 3.66812868838153199880e-02 5.07093193772418862619e-02 3.77742045647647545215e-02 4.78079582201314315371e-02 3.88718979568210831754e-02 4.26386421197074427791e-02 3.80603422943425473424e-02 5.23707726693468170187e-02 +86 425.00 3.01046948716354234588e-01 3.81910689324664806565e-02 5.28819617067187303094e-02 3.93389681210609964968e-02 4.98474029044357266893e-02 4.04842484498931926007e-02 4.44309467386764314623e-02 3.96344620800336625011e-02 5.46040147868777983597e-02 +87 430.00 3.14569768442140851317e-01 3.97012620378517713804e-02 5.50614410399753728687e-02 4.09048876333471186917e-02 5.18929819284275894997e-02 4.20979373860078387448e-02 4.62266072790192203423e-02 4.12095657109928931172e-02 5.68435962671616501485e-02 +88 435.00 3.28208387835032533442e-01 4.12118714315622067246e-02 5.72477132657386589276e-02 4.24719623596571116408e-02 5.39446903855341983181e-02 4.37129620265548982094e-02 4.80256225493823560302e-02 4.27856542210393320236e-02 5.90894836464846487378e-02 +89 440.00 3.41961624871355562849e-01 4.27229023059088816594e-02 5.94407345126644129363e-02 4.40401915438261570834e-02 5.60025225960208011822e-02 4.53293196269130768683e-02 4.98279913149867956235e-02 4.43627286241966567459e-02 6.13416436031212486402e-02 +90 445.00 3.55828295828760132746e-01 4.42343598139229229882e-02 6.16404611481973160880e-02 4.56095744152833146301e-02 5.80664721246096637852e-02 4.69470074370717666001e-02 5.16337122977316084760e-02 4.59407899149003595696e-02 6.36000429573341102829e-02 +91 450.00 3.69807216680191730429e-01 4.57462490693555309806e-02 6.38468497778454796565e-02 4.71801101893624952321e-02 6.01365317978917249264e-02 4.85660227012164325000e-02 5.34427841764011438142e-02 4.75198390683087557029e-02 6.58646486707521877646e-02 +92 455.00 3.83897204372821598817e-01 4.72585751475070661720e-02 6.60598572440403847272e-02 4.87517980673024056704e-02 6.22126937214274727816e-02 5.01863626579359470292e-02 5.52552055872869776754e-02 4.90998770396810363392e-02 6.81354278458526502193e-02 +93 460.00 3.98097078000225923500e-01 4.87713430848125406580e-02 6.82794406254113306343e-02 5.03246372362465763106e-02 6.42949492963293400827e-02 5.18080245405334802178e-02 5.70709751244987614771e-02 5.06809047655173844360e-02 7.04123477254425117478e-02 +94 465.00 4.12405659862634110802e-01 5.02845578790488620391e-02 7.05055572356454579586e-02 5.18986268697615923950e-02 6.63832892364663029738e-02 5.34310055770265204811e-02 5.88900913398606382088e-02 5.22629231627298601603e-02 7.26953756922442267951e-02 +95 470.00 4.26821776446336176303e-01 5.17982244902675942333e-02 7.27381646223476813207e-02 5.34737661272151956759e-02 6.84777035840098413644e-02 5.50553029899395682256e-02 6.07125527434294112727e-02 5.38459331289532494580e-02 7.49844792683773547770e-02 +96 475.00 4.41344259296339691545e-01 5.33123478397585504052e-02 7.49772205665224927840e-02 5.50500541546054406039e-02 7.05781817263276128882e-02 5.66809139967187208820e-02 6.25383578040127618980e-02 5.54299355429597115363e-02 7.72796261148404606267e-02 +97 480.00 4.55971945827879199253e-01 5.48269328113971943228e-02 7.72226830813302067558e-02 5.66274900842497763698e-02 7.26847124116330733923e-02 5.83078358096280474632e-02 6.43675049492729023370e-02 5.70149312642441591370e-02 7.95807840314073644539e-02 +98 485.00 4.70703680041539285206e-01 5.63419842513335905609e-02 7.94745104112579009437e-02 5.82060730348886654073e-02 7.47972837644281102198e-02 5.99360656359567908757e-02 6.61999925658301735520e-02 5.86009211336461222075e-02 8.18879209554872200538e-02 +99 490.00 4.85538313183447645116e-01 5.78575069677852646399e-02 8.17326610307720496928e-02 5.97858021117892643459e-02 7.69158833015673587541e-02 6.15656006781231390779e-02 6.80358190000922291585e-02 6.01879059728315443656e-02 8.42010049621243900075e-02 +100 495.00 5.00474704330846953404e-01 5.93735057320734713193e-02 8.39970936443185517417e-02 6.13666764070562864575e-02 7.90404979469751800547e-02 6.31964381333631752824e-02 6.98749825577358180118e-02 6.17758865847073540545e-02 8.65200042635839577931e-02 +101 500.00 5.15511720920663885082e-01 6.08899852782087483427e-02 8.62677671843535276430e-02 6.29486949994247924067e-02 8.11711140470882525078e-02 6.48285751942491716981e-02 7.17174815050540537253e-02 6.33648637537323755620e-02 8.88448872085225993533e-02 +102 505.00 5.30648239226257589785e-01 6.24069503033054251429e-02 8.85446408109287208532e-02 6.45318569545710318813e-02 8.33077173852616315042e-02 6.64620090487931525214e-02 7.35633140683346620214e-02 6.49548382452954792265e-02 9.11756222816776235041e-02 +103 510.00 5.45883144771984629706e-01 6.39244054674779627057e-02 9.08276739108624941998e-02 6.61161613251125268587e-02 8.54502931971075629924e-02 6.80967368801360523056e-02 7.54124784344817750137e-02 6.65458108064410774896e-02 9.35121781035560123430e-02 +104 515.00 5.61215332712523551351e-01 6.54423553944628588752e-02 9.31168260962887128773e-02 6.77016071506079952780e-02 8.75988261839690113275e-02 6.97327558668586061641e-02 7.72649727515341278039e-02 6.81377821656618670731e-02 9.58545234298127379891e-02 +105 520.00 5.76643708162455137511e-01 6.69608046715149951567e-02 9.54120572044494935637e-02 6.92881934578683661430e-02 8.97533005279473050653e-02 7.13700631830849474557e-02 7.91207951284578631101e-02 6.97307530332096775494e-02 9.82026271508360248941e-02 +106 525.00 5.92167186479200746696e-01 6.84797578497184505908e-02 9.77133272959334331365e-02 7.08759192609566684995e-02 9.19136999052721087589e-02 7.30086559985863303712e-02 8.09799436360790908518e-02 7.13247241005773857658e-02 1.00556458291229167124e-01 +107 530.00 6.07784693526271402320e-01 6.99992194440903353625e-02 1.00020596654571761186e-01 7.24647835610844615051e-02 9.40800075007073438593e-02 7.46485314785737680277e-02 8.28424163066696084279e-02 7.29196960414315170640e-02 1.02915986009292442782e-01 +108 535.00 6.23495165878476753640e-01 7.15191939335806103895e-02 1.02333825786091153764e-01 7.40547853469227385093e-02 9.62522060205064089455e-02 7.62896867841126591347e-02 8.47082111347758071052e-02 7.45156695107833250136e-02 1.05281179597437574147e-01 +109 540.00 6.39297551020915788555e-01 7.30396857617977152133e-02 1.04652975417388258150e-01 7.56459235947056080063e-02 9.84302777061963757310e-02 7.79321190720191070422e-02 8.65773260773223946041e-02 7.61126451459213648754e-02 1.07652008478871213937e-01 +110 545.00 6.55190807495110716374e-01 7.45606993365938719442e-02 1.06978006494145849725e-01 7.72381972682301826127e-02 1.00614204347740474055e-01 7.95758254950671983785e-02 8.84497590537160899293e-02 7.77106235659970334684e-02 1.10028442211326099587e-01 +111 550.00 6.71173905036849482997e-01 7.60822390305834206359e-02 1.09308880183734788427e-01 7.88316053188567594789e-02 1.02803967296285811428e-01 8.12208032018854331202e-02 9.03255079463636950665e-02 7.93096053719209576061e-02 1.12410450483951693257e-01 +112 555.00 6.87245824679826977643e-01 7.76043091812463614598e-02 1.11645557870550291013e-01 8.04261466857158768828e-02 1.04999547477429566733e-01 8.28670493371639060864e-02 9.22045706008794846431e-02 8.09095911468810796707e-02 1.14798003117521627003e-01 +113 560.00 7.03405558837520872295e-01 7.91269140910320495363e-02 1.13988001155597290515e-01 8.20218202960194542328e-02 1.07200925402308494538e-01 8.45145610415507092528e-02 9.40869448264997632059e-02 8.25105814564464218330e-02 1.17191070063397212442e-01 +114 565.00 7.19652111369522562434e-01 8.06500580276700712590e-02 1.16336171856490352972e-01 8.36186250645424428152e-02 1.09408081184077826675e-01 8.61633354519628913426e-02 9.59726283960827819541e-02 8.41125768480488061885e-02 1.19589621403527315846e-01 +115 570.00 7.35984497625066236282e-01 8.21737452241703136835e-02 1.18690032008490264914e-01 8.52165598943483426631e-02 1.11620994543300683377e-01 8.78133697015864439495e-02 9.78616190463161284008e-02 8.57155778517083577484e-02 1.21993627349412173122e-01 +116 575.00 7.52401744464792576750e-01 8.36979798792374940497e-02 1.21049543859321831474e-01 8.68156236764783539872e-02 1.13839644827432528995e-01 8.94646609198761627590e-02 9.97539144787530779324e-02 8.73195849797226281153e-02 1.24403058244176134561e-01 +117 580.00 7.68902890278369444133e-01 8.52227661571674371954e-02 1.23414669871246759913e-01 8.84158152901585586703e-02 1.16064011017039614426e-01 9.11172062326595505466e-02 1.01649512358983437621e-01 8.89245987268737908549e-02 1.26817884557385518463e-01 +118 585.00 7.85486984979308133781e-01 8.67481081883654664422e-02 1.25785372718990845486e-01 9.00171336030072405388e-02 1.18294071740308801011e-01 9.27710027620329835685e-02 1.03548410317877342957e-01 9.05306195705323640821e-02 1.29238076891267095192e-01 +119 590.00 8.02153089985272460538e-01 8.82740100690352635926e-02 1.28161615291816827211e-01 9.16195774709312737993e-02 1.20529805284447941172e-01 9.44260476268799220367e-02 1.05450605950652365195e-01 9.21376479705535156306e-02 1.31663605972416969392e-01 +120 595.00 8.18900278191132646732e-01 8.98004758619045523327e-02 1.30543360686269316329e-01 9.32231457382297346026e-02 1.22771189605013736346e-01 9.60823379425600754278e-02 1.07356096820397386993e-01 9.37456843696916342079e-02 1.34094442658018869752e-01 +121 600.00 8.35727633932689339957e-01 9.13275095959140414958e-02 1.32930572211357178602e-01 9.48278372378011796817e-02 1.25018202339384931765e-01 9.77398708211166533655e-02 1.09264880451128601480e-01 9.53547291933930923902e-02 1.36530557931698492968e-01 +122 605.00 8.52634252932781500078e-01 9.28551152668393164902e-02 1.35323213385444007795e-01 9.64336507911436602303e-02 1.27270820816090063365e-01 9.93986433711726569129e-02 1.11176954338879169226e-01 9.69647828496925379138e-02 1.38971922903523670279e-01 +123 610.00 8.69619242244283996435e-01 9.43832968370835745375e-02 1.37721247934175533567e-01 9.80405852085619866632e-02 1.29529022067244370398e-01 1.01058652698345588505e-01 1.13092315940298629440e-01 9.85758457298348128583e-02 1.41418508810004256437e-01 +124 615.00 8.86681720185849009397e-01 9.59120582358848755566e-02 1.40124639793588551262e-01 9.96486392888568106585e-02 1.31792782836841065874e-01 1.02719895905039951267e-01 1.15010962680944225922e-01 1.00187918207963980177e-01 1.43870287017201281543e-01 +125 620.00 9.03820816263140369706e-01 9.74414033598343248821e-02 1.42533353102856447103e-01 1.01257811819946544341e-01 1.34062079593188276938e-01 1.04382370090654791328e-01 1.16932891955280976459e-01 1.01801000641330588459e-01 1.46327229011399467806e-01 +126 625.00 9.21035671096283481418e-01 9.89713360726689334035e-02 1.44947352209470914364e-01 1.02868101578763540549e-01 1.36336888538236805646e-01 1.06046072350754361224e-01 1.18858101121499387665e-01 1.03415093369980795601e-01 1.48789306409471133730e-01 +127 630.00 9.38325436325552986183e-01 1.00501860205478660282e-01 1.47366601665096491613e-01 1.04479507331047008489e-01 1.38617185616907556689e-01 1.07710999780281035942e-01 1.20786587505661374697e-01 1.05030196717896415204e-01 1.51256490948512178907e-01 +128 635.00 9.55689274524313625570e-01 1.02032979557224859346e-01 1.49791066225570507209e-01 1.06092027831757473866e-01 1.40902946530565287286e-01 1.09377149468995252257e-01 1.22718348401700122485e-01 1.06646310991440285143e-01 1.53728754493097002909e-01 +129 640.00 9.73126359102634563847e-01 1.03564697894429180725e-01 1.52220710849866658343e-01 1.07705661824558554529e-01 1.43194146742200240086e-01 1.11044518503548142463e-01 1.24653381073492872111e-01 1.08263436479978117366e-01 1.56206069030096289518e-01 +130 645.00 9.90635874203648292280e-01 1.05097018951795517783e-01 1.54655500700095038802e-01 1.09320408043993538838e-01 1.45490761486792519186e-01 1.12713103970590824976e-01 1.26591682748642547773e-01 1.09881573458158549039e-01 1.58688406671786547131e-01 +131 650.00 1.00821701460405499517e+00 1.06629946432106312293e-01 1.57095401139429269310e-01 1.10936265213205098590e-01 1.47792765784785284922e-01 1.14382902951592396734e-01 1.28533250626769013358e-01 1.11500722183011366506e-01 1.61175739650667587677e-01 +132 655.00 1.02586898560426331706e+00 1.08163484005600746274e-01 1.59540377732106636310e-01 1.12553232041862669166e-01 1.50100134447266914117e-01 1.16053912526985519849e-01 1.30478081875363388642e-01 1.13120882894983676437e-01 1.63668040325681496405e-01 +133 660.00 1.04359100291334883082e+00 1.09697635312151195452e-01 1.61990396242391421211e-01 1.14171307234453581203e-01 1.52412842086335015290e-01 1.17726129773057283656e-01 1.32426173628751642219e-01 1.14742055817940044604e-01 1.66165281173921014490e-01 +134 665.00 1.06138229255992277977e+00 1.11232403960537656884e-01 1.64445422631466026120e-01 1.15790489480955438584e-01 1.54730863123387712976e-01 1.19399551765058245523e-01 1.34377522993276821150e-01 1.16364241159162537520e-01 1.68667434796848064726e-01 +135 670.00 1.07924209072941490462e+00 1.12767793526375073587e-01 1.66905423061576241306e-01 1.17410777463054560865e-01 1.57054171800524222657e-01 1.21074175576166287449e-01 1.36332127042116585391e-01 1.17987439111423397797e-01 1.71174473916148206509e-01 +136 675.00 1.09716964369256331224e+00 1.14303807556258935074e-01 1.69370363890849418009e-01 1.19032169852073183014e-01 1.59382742186763154413e-01 1.22749998274377145058e-01 1.38289982818392970243e-01 1.19611649849875989471e-01 1.73686371376839759906e-01 +137 680.00 1.11516420768000634745e+00 1.15840449563619510287e-01 1.71840211673294468442e-01 1.20654665307933006702e-01 1.61716548184261288412e-01 1.24427016928722961042e-01 1.40251087337244728648e-01 1.21236873534127417851e-01 1.76203100140018997788e-01 +138 685.00 1.13322504873718599150e+00 1.17377723034940484315e-01 1.74314933161911073123e-01 1.22278262481228014447e-01 1.64055563544895727235e-01 1.26105228605126684638e-01 1.42215437581682063728e-01 1.22863110307202330618e-01 1.78724633291151430159e-01 +139 690.00 1.15135144265180033862e+00 1.18915631421467563045e-01 1.76794495299361864582e-01 1.23902960012188187444e-01 1.66399761868191442549e-01 1.27784630366402057744e-01 1.44183030505695586321e-01 1.24490360295542695779e-01 1.81250944033853306214e-01 +140 695.00 1.16954267475688400424e+00 1.20454178147499799123e-01 1.79278865226263878219e-01 1.25528756532752111541e-01 1.68749116616867145257e-01 1.29465219274326359677e-01 1.46153863034256453757e-01 1.26118623613153707508e-01 1.83782005689891586586e-01 +141 700.00 1.18779803989971699529e+00 1.21993366606243949790e-01 1.81768010274969971096e-01 1.27155650663457936433e-01 1.71103601122017612290e-01 1.31146992386531213715e-01 1.48127932062279948910e-01 1.27747900353312210386e-01 1.86317791701256812997e-01 +142 705.00 1.20611684224490578465e+00 1.23533200158778014299e-01 1.84261897969568905209e-01 1.28783641015516092665e-01 1.73463188590368216913e-01 1.32829946762721168296e-01 1.50105234457734659781e-01 1.29378190597894654479e-01 1.88858275628090405140e-01 +143 710.00 1.22449839521219971950e+00 1.25073682140269815122e-01 1.86760496027958189380e-01 1.30412726189772870677e-01 1.75827852113602967066e-01 1.34514079457418556096e-01 1.52085767056460485769e-01 1.31009494410121996033e-01 1.91403431147648045441e-01 +144 715.00 1.24294202130030062570e+00 1.26614815851685547088e-01 1.89263772355625498056e-01 1.32042904778783415365e-01 1.78197564674582753508e-01 1.36199387523073089934e-01 1.54069526669423501053e-01 1.32641811838705547810e-01 1.93953232057408830880e-01 +145 720.00 1.26144705201431484021e+00 1.28156604567044835052e-01 1.91771695050830720541e-01 1.33674175363702213426e-01 1.80572299153563847751e-01 1.37885868014207130239e-01 1.56056510078570243039e-01 1.34275142917846868063e-01 1.96507652267820825953e-01 +146 725.00 1.28001282769992608124e+00 1.29699051531347780974e-01 1.94284232398387740615e-01 1.35306536519465309132e-01 1.82952028340634814674e-01 1.39573517978088201819e-01 1.58046714035791374675e-01 1.35909487664128469930e-01 1.99066665809555509714e-01 +147 730.00 1.29863869747084814676e+00 1.31242159958502135897e-01 1.96801352872773394065e-01 1.36939986807535524216e-01 1.85336724935716651297e-01 1.41262334465093175595e-01 1.60040135267067340497e-01 1.37544846080659644016e-01 2.01630246829362314021e-01 +148 735.00 1.31732401903263562915e+00 1.32785933033396252867e-01 1.99323025136054737816e-01 1.38574524784193492399e-01 1.87726361559963028647e-01 1.42952314521453155427e-01 1.62036770471431890162e-01 1.39181218155003422199e-01 2.04198369587995892660e-01 +149 740.00 1.33606815859976846284e+00 1.34330373912935341352e-01 2.01849218035816263539e-01 1.40210148993283018060e-01 1.90120910760942674056e-01 1.44643455192362879735e-01 1.64036616319935629749e-01 1.40818603857103902266e-01 2.06771008462288657936e-01 +150 745.00 1.35487049080237831333e+00 1.35875485726041550505e-01 2.04379900607232684040e-01 1.41846857970356593492e-01 1.92520345020930266910e-01 1.46335753521980693748e-01 1.66039669455646299312e-01 1.42457003145504718100e-01 2.09348137946187506930e-01 +151 750.00 1.37373039848932854134e+00 1.37421271569508396393e-01 2.06915042067886911781e-01 1.43484650242675426668e-01 1.94924636763125352923e-01 1.48029206553428493987e-01 1.68045926496757563884e-01 1.44096415961130486227e-01 2.11929732645571550220e-01 +152 755.00 1.39264727268675847505e+00 1.38967734515255431083e-01 2.09454611821915714920e-01 1.45123524328173020281e-01 1.97333758356833921521e-01 1.49723811327755362832e-01 1.70055384034516587910e-01 1.45736842230396040909e-01 2.14515767283434355406e-01 +153 760.00 1.41162051243225783459e+00 1.40514877604109994502e-01 2.11998579455863950249e-01 1.46763478736491703724e-01 1.99747682121614422712e-01 1.51419564884974017227e-01 1.72068038632187392256e-01 1.47378281864170151971e-01 2.17106216694701537051e-01 +154 765.00 1.43064952470231698811e+00 1.42062703850989069387e-01 2.14546914739721095167e-01 1.48404511965873092683e-01 2.02166380340750906353e-01 1.53116464261987883511e-01 1.74083886829196482493e-01 1.49020734759848200168e-01 2.19701055827267732745e-01 +155 770.00 1.44973372426723212669e+00 1.43611216241790351500e-01 2.17099587623812123605e-01 1.50046622509376892385e-01 2.04589825261253077660e-01 1.54814506498809650870e-01 1.76102925138023919116e-01 1.50664200799279474063e-01 2.22300259745105283082e-01 +156 775.00 1.46887253356673275206e+00 1.45160417733391777784e-01 2.19656568239833593914e-01 1.51689808849698737347e-01 2.07017989099038318690e-01 1.56513688631306435717e-01 1.78125150045239266650e-01 1.52308679847730610302e-01 2.24903803621009673597e-01 +157 780.00 1.48806538264779986136e+00 1.46710311256761261056e-01 2.22217826901890264102e-01 1.53334069459170080352e-01 2.09450844051368656462e-01 1.58214007693272346033e-01 1.80150558014611300583e-01 1.53954171760104202571e-01 2.27511662743854342628e-01 +158 785.00 1.50731170900920208311e+00 1.48260899712810756412e-01 2.24783334099240422743e-01 1.54979402804940352700e-01 2.11888362293741416842e-01 1.59915460721610891426e-01 1.82179145479852672151e-01 1.55600676371611068571e-01 2.30123812511335706921e-01 +159 790.00 1.52661095750822117800e+00 1.49812185978614703652e-01 2.27353060505623039145e-01 1.56625807342758438523e-01 2.14330515994399228852e-01 1.61618044747007111317e-01 1.84210908856020871838e-01 1.57248193507097844268e-01 2.32740228434119011958e-01 +160 795.00 1.54596258024664479080e+00 1.51364172899118937243e-01 2.29926976966821405846e-01 1.58273281522154835033e-01 2.16777277313293270655e-01 1.63321756804291562393e-01 1.86245844528117293626e-01 1.58896722973792287048e-01 2.35360886133765295769e-01 +161 800.00 1.56536603648785477283e+00 1.52916863296468225064e-01 2.32505054509990455314e-01 1.59921823783332223146e-01 2.19228618409338438244e-01 1.65026593924149256321e-01 1.88283948858342431443e-01 1.60546264567521607125e-01 2.37985761343767893150e-01 +162 805.00 1.58482079250136531634e+00 1.54470259963787798219e-01 2.35087264335365753176e-01 1.61571432557165800548e-01 2.21684511446631593579e-01 1.66732553138301681228e-01 1.90325218188168526767e-01 1.62196818065457604163e-01 2.40614829904370414182e-01 +163 810.00 1.60432632152136722681e+00 1.56024365667256387225e-01 2.37673577822481607580e-01 1.63222106269348465890e-01 2.24144928598597303893e-01 1.68439631475360895863e-01 1.92369648829012029889e-01 1.63848383235444400308e-01 2.43248067770857973047e-01 +164 815.00 1.62388210360162887902e+00 1.57579183146105833435e-01 2.40263966521880145688e-01 1.64873843335209213645e-01 2.26609842054206284123e-01 1.70147825967048360596e-01 1.94417237073633841771e-01 1.65500959827707155858e-01 2.45885451003193172825e-01 +165 820.00 1.64348762550149296580e+00 1.59134715114694291760e-01 2.42858402161329672841e-01 1.66526642160749277499e-01 2.29079224020048322075e-01 1.71857133641976272953e-01 1.96467979187848307276e-01 1.67154547578997753066e-01 2.48526955774307167779e-01 +166 825.00 1.66314238064441899390e+00 1.60690964258360463601e-01 2.45456856638569587137e-01 1.68180501147824207342e-01 2.31553046730696043820e-01 1.73567551527720326243e-01 1.98521871416741546579e-01 1.68809146212594657355e-01 2.51172558361808684335e-01 +167 830.00 1.68284586896252230659e+00 1.62247933238605451800e-01 2.48059302027529127166e-01 1.69835418686889089157e-01 2.34031282445596205966e-01 1.75279076652892745747e-01 2.00578909980525854628e-01 1.70464755437266607396e-01 2.53822235157311504317e-01 +168 835.00 1.70259759681366062978e+00 1.63805624688947409906e-01 2.50665710570035948912e-01 1.71491393163216931939e-01 2.36513903460469743223e-01 1.76991706046105756744e-01 2.02639091077648880734e-01 1.72121374948309008301e-01 2.56475962653997580087e-01 +169 840.00 1.72239707691925003630e+00 1.65364041216994189787e-01 2.53276054683070961371e-01 1.73148422951716757234e-01 2.39000882109384776841e-01 1.78705436732862182891e-01 2.04702410882720869933e-01 1.73779004426507649450e-01 2.59133717458017609481e-01 +170 845.00 1.74224382821916745634e+00 1.66923185405479901355e-01 2.55890306949440815565e-01 1.74806506422115315313e-01 2.41492190768902270648e-01 1.80420265739701435326e-01 2.06768865549623814815e-01 1.75437643539174764618e-01 2.61795476279163275013e-01 +171 850.00 1.76213737579920159959e+00 1.68483059812264662769e-01 2.58508440125032490364e-01 1.76465641934811845459e-01 2.43987801860148900701e-01 1.82136190096272132521e-01 2.08838451207365938256e-01 1.77097291940149365042e-01 2.64461215936049320874e-01 +172 855.00 1.78207725081850454352e+00 1.70043666965152800996e-01 2.61130427132595155371e-01 1.78125827842950695823e-01 2.46487687860217269398e-01 1.83853206826004339502e-01 2.10911163966300080341e-01 1.78757949268760818473e-01 2.67130913353004373345e-01 +173 860.00 1.80206299038522321787e+00 1.71605009373293149189e-01 2.63756241062776397577e-01 1.79787062492421267912e-01 2.48991821295947934889e-01 1.85571312956473860600e-01 2.12986999911905117155e-01 1.80419615149828627132e-01 2.69804545560070829779e-01 +174 865.00 1.82209413749431248242e+00 1.73167089513705962922e-01 2.66385855175158448027e-01 1.81449344222894493051e-01 2.51500174756365824091e-01 1.87290505513183630493e-01 2.15065955109968287573e-01 1.82082289198844587963e-01 2.72482089693004969622e-01 +175 870.00 1.84217024091353342996e+00 1.74729909842683300836e-01 2.69019242893076659939e-01 1.83112671364713736066e-01 2.54012720894753574186e-01 1.89010781523709425755e-01 2.17148025605548494754e-01 1.83745971011608832946e-01 2.75163522995349629774e-01 +176 875.00 1.86229085514199321771e+00 1.76293472790606808864e-01 2.71656377807764581878e-01 1.84777042242003808337e-01 2.56529432428650894238e-01 1.90732138012517732362e-01 2.19233207418830955415e-01 1.85410660176666464150e-01 2.77848822811179507752e-01 +177 880.00 1.88245554026505157452e+00 1.77857780760911604601e-01 2.74297233676281448922e-01 1.86442455171634685618e-01 2.59050282148146571171e-01 1.92454572006147961449e-01 2.21321496553418151088e-01 1.87076356263907311872e-01 2.80537966592356025064e-01 +178 885.00 1.90266386190249625621e+00 1.79422836136304497678e-01 2.76941784415293656973e-01 1.88108908463221452534e-01 2.61575242915877637095e-01 1.94178080531139468645e-01 2.23412888990111607734e-01 1.88743058832857107943e-01 2.83230931893345083683e-01 +179 890.00 1.92291539114636278462e+00 1.80988641269436562053e-01 2.79590004111438916734e-01 1.89776400418087853872e-01 2.64104287673248894208e-01 1.95902660615067919503e-01 2.25507380688984709893e-01 1.90410767429568111853e-01 2.85927696374326467676e-01 +180 895.00 1.94320970442619689322e+00 1.82555198494303377865e-01 2.82241867008889313340e-01 1.91444929333412089401e-01 2.66637389444577432851e-01 1.97628309282399994284e-01 2.27604967589382589654e-01 1.92079481586619554845e-01 2.88628237797048103896e-01 +181 900.00 1.96354638348832821748e+00 1.84122510115880988479e-01 2.84897347516605836670e-01 1.93114493497044653614e-01 2.69174521336057015475e-01 1.99355023560711303032e-01 2.29705645613031417263e-01 1.93749200823116918269e-01 2.91332534025862566196e-01 +182 905.00 1.98392501527150288965e+00 1.85690578417381013665e-01 2.87556420204193474710e-01 1.94785091191653964016e-01 2.71715656541976158245e-01 2.01082800478614154294e-01 2.31809410658856268617e-01 1.95419924644692682980e-01 2.94040563028763468623e-01 +183 910.00 2.00434519184469595032e+00 1.87259405657140998169e-01 2.90219059801900547413e-01 1.96456720690580760591e-01 2.74260768350936767757e-01 2.02811637061611427235e-01 2.33916258607126975599e-01 1.97091652545578699396e-01 2.96752302878421803101e-01 +184 915.00 2.02480651032419922686e+00 1.88828994069661276756e-01 2.92885241199582535554e-01 1.98129380261983734091e-01 2.76809830140671897514e-01 2.04541530338315347137e-01 2.36026185320494241715e-01 1.98764384005497118935e-01 2.99467731743894793883e-01 +185 920.00 2.04530857284253064776e+00 1.90399345865604530115e-01 2.95554939446702080730e-01 1.99803068168839470520e-01 2.79362815390483021361e-01 2.06272477338374421452e-01 2.38139186637771560484e-01 2.00438118491733069382e-01 3.02186827900989607443e-01 +186 925.00 2.06585098639297104484e+00 1.91970463232832622147e-01 2.98228129750256254482e-01 2.01477782665833382580e-01 2.81919697677093961108e-01 2.08004475089364454510e-01 2.40255258383262365607e-01 2.02112855460171270128e-01 3.04909569725009321761e-01 +187 930.00 2.08643336281920133146e+00 1.93542348333297031804e-01 3.00904787476849233663e-01 2.03153522000395908575e-01 2.84480450681906027466e-01 2.09737520620934009274e-01 2.42374396360542199158e-01 2.03788594352186658298e-01 3.07635935689715367403e-01 +188 935.00 2.10705531873238749441e+00 1.95115003309257489805e-01 3.03584888149582954320e-01 2.04830284414775465329e-01 2.87045048189961515828e-01 2.11471610962731704220e-01 2.44496596353494632936e-01 2.05465334596717258409e-01 3.10365904373547052408e-01 +189 940.00 2.12771647543863462460e+00 1.96688430274990666557e-01 3.06268407444948487228e-01 2.06508068145002082749e-01 2.89613464096162287476e-01 2.13206743146478944206e-01 2.46621854129420670088e-01 2.07143075610264182362e-01 3.13099454452366032786e-01 +190 945.00 2.14841645883534404504e+00 1.98262631326117849673e-01 3.08955321200080013089e-01 2.08186871419850733078e-01 2.92185672406305885218e-01 2.14942914203897106340e-01 2.48750165434893227845e-01 2.08821816797927967135e-01 3.15836564701529431964e-01 +191 950.00 2.16915489940085137732e+00 1.99837608532349969570e-01 3.11645605401354996999e-01 2.09866692460841830492e-01 2.94761647239158874889e-01 2.16680121165671174532e-01 2.50881526000938992471e-01 2.10501557551335954921e-01 3.18577213997962349623e-01 +192 955.00 2.18993143210114515895e+00 2.01413363942669926265e-01 3.14339236195794458073e-01 2.11547529487422641958e-01 2.97341362829565414305e-01 2.18418361065595423298e-01 2.53015931539929239680e-01 2.12182297248642043330e-01 3.21321381314976395327e-01 +193 960.00 2.21074569629659567482e+00 2.02989899580150262581e-01 3.17036189877589580366e-01 2.13229380707640081560e-01 2.99924793530520650275e-01 2.20157630937464043885e-01 2.55153377745580001168e-01 2.13864035257636003751e-01 3.24069045726414706188e-01 +194 965.00 2.23159733573158636233e+00 2.04567217448171745353e-01 3.19736442898465977880e-01 2.14912244327468276994e-01 3.02511913816279731648e-01 2.21897927816107676247e-01 2.57293860293988096988e-01 2.15546770931597964083e-01 3.26820186402506485113e-01 +195 970.00 2.25248599842051078213e+00 2.06145319527314047070e-01 3.22439971859392326969e-01 2.16596118544589988364e-01 3.05102698283393924950e-01 2.23639248737393325772e-01 2.59437374845704449289e-01 2.17230503615516684635e-01 3.29574782615049299839e-01 +196 975.00 2.27341133661668015620e+00 2.07724207773283209288e-01 3.25146753513689434900e-01 2.18281001551505954295e-01 3.07697121653820293563e-01 2.25381590737188136631e-01 2.61583917041588009944e-01 2.18915232636762074891e-01 3.32332813730153997511e-01 +197 980.00 2.29437300672941058011e+00 2.09303884123129640971e-01 3.27856764765994124211e-01 2.19966891534498443228e-01 3.10295158775958146435e-01 2.27124950853431900599e-01 2.63733482507988115096e-01 2.20600957314412593480e-01 3.35094259211354050798e-01 +198 985.00 2.31537066929293011697e+00 2.10884350490066513339e-01 3.30569982671222728499e-01 2.21653786674667729883e-01 3.12896784628794111249e-01 2.28869326125100885916e-01 2.65886066852598634824e-01 2.22287676956146346141e-01 3.37859098620641784549e-01 +199 990.00 2.33640398885237265958e+00 2.12465608763469426812e-01 3.33286384430425242087e-01 2.23341685145859142336e-01 3.15501974318793565466e-01 2.30614713591171416329e-01 2.68041665668603767969e-01 2.23975390853058786700e-01 3.40627311615359196217e-01 +200 995.00 2.35747263398450979111e+00 2.14047660814058682277e-01 3.36005947399076965176e-01 2.25030585118808856837e-01 3.18110703089227619955e-01 2.32361110294765388362e-01 2.70200274530532136286e-01 2.25664098290026954308e-01 3.43398877949234515583e-01 +201 1000.00 2.37857627717337782869e+00 2.15630508488717120841e-01 3.38728649074641230410e-01 2.26720484755961682044e-01 3.20722946317064772082e-01 2.34108513275895463446e-01 2.72361888997366463627e-01 2.27353798535345180687e-01 3.46173777472382260267e-01 +202 1005.00 2.39971459475845882992e+00 2.17214153614635752110e-01 3.41454467105897274681e-01 2.28411382215616798330e-01 3.23338679515042914936e-01 2.35856919578720014563e-01 2.74526504613579636072e-01 2.29044490849016790790e-01 3.48951990129229949744e-01 +203 1010.00 2.42088726692431821519e+00 2.18798597994131815980e-01 3.44183379285685431270e-01 2.30103275649855054663e-01 3.25957878332706285640e-01 2.37606326248433696868e-01 2.76694116904989129146e-01 2.30736174476535160771e-01 3.51733495961627895543e-01 +204 1015.00 2.44209397759695878705e+00 2.20383843411903590503e-01 3.46915363556088873764e-01 2.31796163205575056487e-01 3.28580518563659940146e-01 2.39356730331267752998e-01 2.78864721384975533525e-01 2.32428848653029568316e-01 3.54518275103666902215e-01 +205 1020.00 2.46333441441273359729e+00 2.21969891629848203873e-01 3.49650398000143025623e-01 2.33490043024493443280e-01 3.31206576137278718708e-01 2.41108128874489652249e-01 2.81038313549300478034e-01 2.34122512603265303666e-01 3.57306307783750942697e-01 +206 1025.00 2.48460826867688755470e+00 2.23556744387061856472e-01 3.52388460849089313331e-01 2.35184913243144916306e-01 3.33836027130107848571e-01 2.42860518927439872350e-01 2.83214888878179305021e-01 2.35817165538534267988e-01 3.60097574327706615449e-01 +207 1030.00 2.50591523528064419324e+00 2.25144403405021814590e-01 3.55129530476157917462e-01 2.36880771991845512359e-01 3.36468847760680422887e-01 2.44613897539458724495e-01 2.85394442839390583000e-01 2.37512806658727759768e-01 3.62892055150491887883e-01 +208 1035.00 2.52725501267011365414e+00 2.26732870382404222420e-01 3.57873585399675953056e-01 2.38577617395729357774e-01 3.39105014393663806160e-01 2.46368261764032203676e-01 2.87576970882057525447e-01 2.39209435152336724606e-01 3.65689730765523635103e-01 +209 1040.00 2.54862730279447236015e+00 2.28322146997157110482e-01 3.60620604276849998637e-01 2.40275447576821288287e-01 3.41744503540895139260e-01 2.48123608653609967201e-01 2.89762468443902743154e-01 2.40907050198524319562e-01 3.68490581774313374908e-01 +210 1045.00 2.57003181104377897981e+00 2.29912234905463863655e-01 3.63370565912056409097e-01 2.41974260648854910816e-01 3.44387291861382227598e-01 2.49879935263750796448e-01 2.91950930946066278260e-01 2.42605650962980423646e-01 3.71294588873722741784e-01 +211 1050.00 2.59146824620751603518e+00 2.31503135745888821706e-01 3.66123449246477994379e-01 2.43674054722454541677e-01 3.47033356165448392261e-01 2.51637238652086425716e-01 2.94142353795178390641e-01 2.44305236599994368696e-01 3.74101732852853585687e-01 +212 1055.00 2.61293632043313683866e+00 2.33094851135231817540e-01 3.68879233363285541358e-01 2.45374827904098896658e-01 3.49682673411623679005e-01 2.53395515875212085088e-01 2.96336732385432621850e-01 2.46005806253491388080e-01 3.76911994593048360613e-01 +213 1060.00 2.63443574918460399203e+00 2.34687382667491645227e-01 3.71637897487638146909e-01 2.47076578291975379464e-01 3.52335220710790708587e-01 2.55154763994904998370e-01 2.98534062095476171450e-01 2.47707359058069009894e-01 3.79725355066853620389e-01 +214 1065.00 2.65596625115948370421e+00 2.36280731922157316571e-01 3.74399420980464692210e-01 2.48779303983235000608e-01 3.54990975326184121652e-01 2.56914980072942500389e-01 3.00734338290482960954e-01 2.49409894133815007722e-01 3.82541795338019963157e-01 +215 1070.00 2.67752754828893824168e+00 2.37874900452807569451e-01 3.77163783344681979859e-01 2.50483003067773990491e-01 3.57649914675463698188e-01 2.58676161172138374678e-01 3.02937556322153578314e-01 2.51113410590453223215e-01 3.85361296560465693695e-01 +216 1075.00 2.69911936566518306790e+00 2.39469889795402263166e-01 3.79930964218976818803e-01 2.52187673631342701430e-01 3.60312016329677853310e-01 2.60438304359451866521e-01 3.05143711527678884732e-01 2.52817907530452301579e-01 3.88183839981386002993e-01 +217 1080.00 2.72074143148966340888e+00 2.41065701469318605099e-01 3.82700943379878533168e-01 2.53893313756582528207e-01 3.62977258016373205418e-01 2.62201406702878836441e-01 3.07352799232849249744e-01 2.54523384039698652437e-01 3.91009406936071113314e-01 +218 1085.00 2.74239347706268876692e+00 2.42662336968023639727e-01 3.85473700741758684707e-01 2.55599921517843331475e-01 3.65645617616484730483e-01 2.63965465270414922916e-01 3.09564814749981542796e-01 2.56229839197859965427e-01 3.93837978849978564977e-01 +219 1090.00 2.76407523672125465808e+00 2.44259797770474545997e-01 3.88249216353722670370e-01 2.57307494987402463060e-01 3.68317073171591180536e-01 2.65730477134201559242e-01 3.11779753374810453259e-01 2.57937272072167322889e-01 3.96669537239770386705e-01 +220 1095.00 2.78578644776648420844e+00 2.45858085333863995992e-01 3.91027470400645005277e-01 2.59016032233391202411e-01 3.70991602876659942734e-01 2.67496439367416738442e-01 3.13997610395815363038e-01 2.59645681718450871411e-01 3.99504063709166690188e-01 +221 1100.00 2.80752685049473038603e+00 2.47457201096729195733e-01 3.93808443202134150773e-01 2.60725531318759307098e-01 3.73669185089374800146e-01 2.69263349047383637735e-01 3.16218381083856969749e-01 2.61355067182177047691e-01 4.02341539954128524226e-01 +222 1105.00 2.82929618808356364568e+00 2.49057146477915630767e-01 3.96592115213567797394e-01 2.62435990301274069125e-01 3.76349798322881123891e-01 2.71031203249352981022e-01 3.18442060700468099199e-01 2.63065427500520809811e-01 4.05181947755602012151e-01 +223 1110.00 2.85109420660213919163e+00 2.50657922877613403845e-01 3.99378467020911676055e-01 2.64147407235593600916e-01 3.79033421249931334884e-01 2.72799999055830355577e-01 3.20668644494744858875e-01 2.64776761696147333591e-01 4.08025268984701539043e-01 +224 1115.00 2.87292065491792136811e+00 2.52259531677357207169e-01 4.02167479344864409185e-01 2.65859780171194215459e-01 3.81720032705994305466e-01 2.74569733546212002562e-01 3.22898127701273462975e-01 2.66489068784467098006e-01 4.10871485601672303822e-01 +225 1120.00 2.89477528473813539023e+00 2.53861974238989929198e-01 4.04959133039821950195e-01 2.67573107153406264391e-01 3.84409611683036778196e-01 2.76340403807148971005e-01 3.25130505545312364912e-01 2.68202347768453530641e-01 4.13720579652781916824e-01 +226 1125.00 2.91665785048540238122e+00 2.55465251905699075596e-01 4.07753409087658558185e-01 2.69287386224451197325e-01 3.87102137336778340249e-01 2.78112006923219634569e-01 3.27365773237610457880e-01 2.69916597641752409320e-01 4.16572533272392353521e-01 +227 1130.00 2.93856810932883139031e+00 2.57069366003053245695e-01 4.10550288604981550300e-01 2.71002615419295211918e-01 3.89797588982545850644e-01 2.79884539984184332884e-01 3.29603925980625322989e-01 2.71631817387645357886e-01 4.19427328681924671550e-01 +228 1135.00 2.96050582110110260814e+00 2.58674317836929179570e-01 4.13349752836913553189e-01 2.72718792772904838895e-01 3.92495946098382286760e-01 2.81658000081876358500e-01 3.31844958961268254871e-01 2.73348005979050012737e-01 4.22284948188821507298e-01 +229 1140.00 2.98247074826738067799e+00 2.60280108694548151238e-01 4.16151783159164623260e-01 2.74435916314028083285e-01 3.95197188322974402030e-01 2.83432384308128837436e-01 3.34088867359195906825e-01 2.75065162379556193972e-01 4.25145374187583968695e-01 +230 1145.00 3.00446265593567574115e+00 2.61886739845512694913e-01 4.18956361076995908999e-01 2.76153984067267099789e-01 3.97901295458761683488e-01 2.85207689759957028208e-01 3.36335646340591321035e-01 2.76783285540316836837e-01 4.28008589158735519575e-01 +231 1150.00 3.02648131174283729905e+00 2.63494212541806160921e-01 4.21763468223147364178e-01 2.77872994053078692378e-01 4.00608247467790945517e-01 2.86983913536448975723e-01 3.38585291060237159044e-01 2.78502374404193675517e-01 4.30874575668821313545e-01 +232 1155.00 3.04852648590637675952e+00 2.65102528016756655571e-01 4.24573086357837137239e-01 2.79592944289846601080e-01 4.03318024475861458544e-01 2.88761052736692724885e-01 3.40837796663588543655e-01 2.80222427904720683411e-01 4.33743316369372411412e-01 +233 1160.00 3.07059795112082545288e+00 2.66711687484000370407e-01 4.27385197370834801767e-01 2.81313832790772599957e-01 4.06030606773562008360e-01 2.90539104464958453100e-01 3.43093158284699772942e-01 2.81943444962995004577e-01 4.36614793996905281581e-01 +234 1165.00 3.09269548254737136617e+00 2.68321692143700329947e-01 4.30199783276278946431e-01 2.83035657564913001316e-01 4.08745974811088264023e-01 2.92318065828625461844e-01 3.45351371046224875361e-01 2.83665424492858642136e-01 4.39488991373958470810e-01 +235 1170.00 3.11481885780349410098e+00 2.69932543172181904634e-01 4.33016826216823247364e-01 2.84758416617178045094e-01 4.11464109202389127784e-01 2.94097933934036659398e-01 3.47612430062526622798e-01 2.85388365395716880890e-01 4.42365891405983591156e-01 +236 1175.00 3.13696785690078083775e+00 2.71544241733333746591e-01 4.35836308457417498374e-01 2.86482107951442133142e-01 4.14184990725165791403e-01 2.95878705893753424228e-01 3.49876330434494231536e-01 2.87112266565720308797e-01 4.45245477083417495745e-01 +237 1180.00 3.15914226221383387383e+00 2.73156788971352593176e-01 4.38658212389453905367e-01 2.88206729566397090725e-01 4.16908600317763333720e-01 2.97660378820337245820e-01 3.52143067256798614206e-01 2.88837126885618633576e-01 4.48127731480646607221e-01 +238 1185.00 3.18134185846990602542e+00 2.74770186012816219900e-01 4.41482520529729915992e-01 2.89932279455553054692e-01 4.19634919084352353558e-01 2.99442949832567917312e-01 3.54412635611673632052e-01 2.90562945229870583930e-01 4.51012637754969802906e-01 +239 1190.00 3.20356643271780905380e+00 2.76384433967719944647e-01 4.44309215518376043885e-01 2.91658755610347097953e-01 4.22363928287674217366e-01 3.01226416047152500965e-01 3.56685030572025829620e-01 2.92289720461534174856e-01 4.53900179148671978346e-01 +240 1195.00 3.22581577424500132167e+00 2.77999533928440012431e-01 4.47138280115746300503e-01 2.93386156020143618051e-01 4.25095609357332426814e-01 3.03010774588052866907e-01 3.58960247202469995287e-01 2.94017451435376164781e-01 4.56790338983841304188e-01 +241 1200.00 3.24808967462940545445e+00 2.79615486968697313230e-01 4.49969697209672947480e-01 2.95114478669124991050e-01 4.27829943881500973646e-01 3.04796022580267333968e-01 3.61238280555184143594e-01 2.95746136996835773392e-01 4.59683100668588084936e-01 +242 1205.00 3.27038792764613583941e+00 2.81232294148739347950e-01 4.52803449804066615592e-01 2.96843721538364246904e-01 4.30566913613143364969e-01 3.06582157149830669685e-01 3.63519125676127985436e-01 2.97475775979951673200e-01 4.62578447690826344285e-01 +243 1210.00 3.29271032927786011513e+00 2.82849956509121924775e-01 4.55639521029279626063e-01 2.98573882605825235981e-01 4.33306500464829935648e-01 3.08369175428996000754e-01 3.65802777599860684532e-01 2.99206367212543844492e-01 4.65476363621382782654e-01 +244 1215.00 3.31505667764224964955e+00 2.84468475073818283239e-01 4.58477894133815011557e-01 3.00304959846362518050e-01 4.36048686513920535912e-01 3.10157074550016620407e-01 3.68089231354722712375e-01 3.00937909509995604740e-01 4.68376832112960383991e-01 +245 1220.00 3.33742677301270918022e+00 2.86087850851255431905e-01 4.61318552486399635626e-01 3.02036951230685191128e-01 4.38793453995309168381e-01 3.11945851651364014501e-01 3.70378481957654270840e-01 3.02670401680435352532e-01 4.71279836900138748845e-01 +246 1225.00 3.35982041776655648846e+00 2.87708084831205024301e-01 4.64161479575983915158e-01 3.03769854727429344798e-01 4.41540785308679184507e-01 3.13735503870473553256e-01 3.72670524417304305231e-01 3.04403842521627276962e-01 4.74185361797300919395e-01 +247 1230.00 3.38223741633320162947e+00 2.89329177991001884607e-01 4.67006659009668700921e-01 3.05503668302121833555e-01 4.44290663012284592348e-01 3.15526028350998910543e-01 3.74965353734030226729e-01 3.06138230824080759263e-01 4.77093390700706443397e-01 +248 1235.00 3.40467757524596592589e+00 2.90951131287252473534e-01 4.69854074513742281383e-01 3.07238389917180443334e-01 4.47043069823986449762e-01 3.17317422237630208937e-01 3.77262964900934694157e-01 3.07873565365868351318e-01 4.80003907585382028067e-01 +249 1240.00 3.42714070299698692068e+00 2.92573945662053580552e-01 4.72703709931607263250e-01 3.08974017530877220761e-01 4.49797988623326039370e-01 3.19109682680239481467e-01 3.79563352900756434405e-01 3.09609844918843912787e-01 4.82916896509267001836e-01 +250 1245.00 3.44962661014085814060e+00 2.94197622040919537501e-01 4.75555549223780571477e-01 3.10710549100447819271e-01 4.52555402449451638081e-01 3.20902806829735431915e-01 3.81866512708979088941e-01 3.11347068245533820097e-01 4.85832341606995343763e-01 +251 1250.00 3.47213510915989598260e+00 2.95822161333818389739e-01 4.78409576468929897963e-01 3.12447982577945815308e-01 4.55315294499045952747e-01 3.22696791840135777107e-01 3.84172439294867940074e-01 3.13085234098100406719e-01 4.88750227096113543102e-01 +252 1255.00 3.49466601449523173173e+00 2.97447564435172007169e-01 4.81265775859728073272e-01 3.14186315914388392123e-01 4.58077648128398740024e-01 3.24491634871676870588e-01 3.86481127616287833959e-01 3.14824341220414416487e-01 4.91670537270862684220e-01 +253 1260.00 3.51721914252608414131e+00 2.99073832221783464380e-01 4.84124131704925741992e-01 3.15925547057683442365e-01 4.60842446852370579702e-01 3.26287333083558506175e-01 3.88792572626957599891e-01 3.16564388348055503197e-01 4.94593256505287237612e-01 +254 1265.00 3.53979431150757273272e+00 3.00700965555945887164e-01 4.86984628429351529277e-01 3.17665673951593396929e-01 4.63609674341283584109e-01 3.28083883642235396572e-01 3.91106769271268861488e-01 3.18305374207275781906e-01 4.97518369252198999764e-01 +255 1270.00 3.56239134159144876790e+00 3.02328965284406447900e-01 4.89847250570802861258e-01 3.19406694538844126985e-01 4.66379314424030633202e-01 3.29881283713125805779e-01 3.93423712485321819265e-01 3.20047297517072226736e-01 5.00445860042140422408e-01 +256 1275.00 3.58501005475354661556e+00 3.03957832237329639291e-01 4.92711982782118584900e-01 3.21148606759052268611e-01 4.69151351084965917426e-01 3.31679530469939420900e-01 3.95743397201070767899e-01 3.21790156985041431170e-01 5.03375713485457620955e-01 +257 1280.00 3.60765027482487266042e+00 3.05587567231406509460e-01 4.95578809828069899446e-01 3.22891408548725222794e-01 4.71925768467014672414e-01 3.33478621085349424824e-01 3.98065818339069843468e-01 3.23533951311525180827e-01 5.06307914268154579673e-01 +258 1285.00 3.63031182742942304387e+00 3.07218171064673029047e-01 4.98447716587433087287e-01 3.24635097842297715154e-01 4.74702550863381478319e-01 3.35278552738247359599e-01 4.00390970816763724915e-01 3.25278679189610175904e-01 5.09242447153965938078e-01 +259 1290.00 3.65299453995309209020e+00 3.08849644522727950768e-01 5.01318688048843941196e-01 3.26379672571095125200e-01 4.77481682724805123197e-01 3.37079322609597720195e-01 4.02718849542269441422e-01 3.27024339302019184661e-01 5.12179296986430276917e-01 +260 1295.00 3.67569824157476299220e+00 3.10481988374587625223e-01 5.04191709315979674777e-01 3.28125130664369935030e-01 4.80263148655413307786e-01 3.38880927883474347695e-01 4.05049449418522111710e-01 3.28770930323183774302e-01 5.15118448682670870831e-01 +261 1300.00 3.69842276317303175759e+00 3.12115203374758676258e-01 5.07066765599267887943e-01 3.29871470049302006888e-01 4.83046933413758705633e-01 3.40683365748096322889e-01 4.07382765340165375889e-01 3.30518450920280315586e-01 5.18059887237542038285e-01 +262 1305.00 3.72116793737802709074e+00 3.13749290262201385726e-01 5.09943842223141152736e-01 3.31618688650998194589e-01 4.85833021906600770468e-01 3.42486633395828854454e-01 4.09718792197697245783e-01 3.32266899751157918086e-01 5.21003597723628808502e-01 +263 1310.00 3.74393359847813522734e+00 3.15384249762402923967e-01 5.12822924620855213895e-01 3.33366784389383385978e-01 4.88621399197196715214e-01 3.44290728022146053089e-01 4.12057524873324698689e-01 3.34016275465374046227e-01 5.23949565287101126643e-01 +264 1315.00 3.76671958247181670743e+00 3.17020082583231499473e-01 5.15703998334488877830e-01 3.35115755185418973117e-01 4.91412050494937580059e-01 3.46095646824594815882e-01 4.14398958244072523893e-01 3.35766576706267860786e-01 5.26897775151859981690e-01 +265 1320.00 3.78952572697433520688e+00 3.18656789420118158329e-01 5.18587049013907508410e-01 3.36865598956956835419e-01 4.94204961164676215279e-01 3.47901387005904394467e-01 4.16743087180746818454e-01 3.37517802104741693192e-01 5.29848212615391278568e-01 +266 1325.00 3.81235187125920660378e+00 3.20294370952947993203e-01 5.21472062420908932801e-01 3.38616313619776343469e-01 4.97000116715326067940e-01 3.49707945771913053523e-01 4.19089906547935486802e-01 3.39269950287551969037e-01 5.32800863052911855000e-01 +267 1330.00 3.83519785619602204818e+00 3.21932827849169156398e-01 5.24359024419895236591e-01 3.40367897085511073030e-01 4.99797502806080373716e-01 3.51515320331568292822e-01 4.21439411205044411890e-01 3.41023019871091237487e-01 5.35755711912187071455e-01 +268 1335.00 3.85806352424007803492e+00 3.23572160757574278644e-01 5.27247920986164908541e-01 3.42120347265794655378e-01 5.02597105246411657298e-01 3.53323507900036137830e-01 4.23791596004224391248e-01 3.42777009465533688548e-01 5.38712744715603930601e-01 +269 1340.00 3.88094871943237862411e+00 3.25212370317628618466e-01 5.30138738200729764394e-01 3.43873662069151320164e-01 5.05398909988817091055e-01 3.55132505692482614013e-01 4.26146455795553547041e-01 3.44531917671725362862e-01 5.41671947062243641646e-01 +270 1345.00 3.90385328736854386733e+00 3.26853457149105242063e-01 5.33031462251352339266e-01 3.45627839403069181401e-01 5.08202903132964123323e-01 3.56942310930292105997e-01 4.28503985419782351673e-01 3.46287743083257826271e-01 5.44633304622700098463e-01 +271 1350.00 3.92677707516771690166e+00 3.28495421862449676897e-01 5.35926079428399093629e-01 3.47382877172963344670e-01 5.11009070923617580995e-01 3.58752920836921895820e-01 4.30864179714551931433e-01 3.48044484284395105878e-01 5.47596803141151777794e-01 +272 1355.00 3.94971993146219801929e+00 3.30138265052561497015e-01 5.38822576131060215765e-01 3.49138773282176129165e-01 5.13817399749603276327e-01 3.60564332642047735700e-01 4.33227033512321335618e-01 3.49802139853182092466e-01 5.50562428438471918035e-01 +273 1360.00 3.97268170638708406628e+00 3.31781987297757485766e-01 5.41720938860093981226e-01 3.50895525629904170284e-01 5.16627876143808117959e-01 3.62376543576381882072e-01 4.35592541639331309877e-01 3.51560708359373086385e-01 5.53530166403936596531e-01 +274 1365.00 3.99566225156990251222e+00 3.33426589165990383545e-01 5.44621154221972103571e-01 3.52653132116380552130e-01 5.19440486780070598272e-01 3.64189550876854728489e-01 4.37960698919749757962e-01 3.53320188365467191538e-01 5.56500003004552934449e-01 +275 1370.00 4.01866142005806015192e+00 3.35072071210703203992e-01 5.47523208925771220912e-01 3.54411590639765627930e-01 5.22255218473181237471e-01 3.66003351782469954490e-01 4.40331500169453049498e-01 3.55080578426708703965e-01 5.59471924276767174078e-01 +276 1375.00 4.04167906639139573599e+00 3.36718433969792785287e-01 5.50427089784208956047e-01 3.56170899095110293775e-01 5.25072058179918754739e-01 3.67817943537412872512e-01 4.42704940201208652084e-01 3.56841877087977710215e-01 5.62445916328537798279e-01 +277 1380.00 4.06471504650890480548e+00 3.38365677968719080759e-01 5.53332783711571241092e-01 3.57931055376429274606e-01 5.27890992994903940350e-01 3.69633323387941803428e-01 4.45081013824674576185e-01 3.58604082890008890594e-01 5.65421965343481769395e-01 +278 1385.00 4.08776921773836665608e+00 3.40013803720505047856e-01 5.56240277722675258154e-01 3.59692057376700846660e-01 5.30712010151637159083e-01 3.71449488586533427270e-01 4.47459715843290639636e-01 3.60367194363172604898e-01 5.68400057574655170889e-01 +279 1390.00 4.11084143884817532211e+00 3.41662811722627635103e-01 5.59149558937016344373e-01 3.61453902985793940061e-01 5.33535097021460957833e-01 3.73266436388773992228e-01 4.49841041056350587901e-01 3.62131210032657246956e-01 5.71380179346626326797e-01 +280 1395.00 4.13393156995405597343e+00 3.43312702460126739634e-01 5.62060614572548189471e-01 3.63216590092541036228e-01 5.36360241110451219093e-01 3.75084164053358481983e-01 4.52224984261075824143e-01 3.63896128416396402727e-01 5.74362317055475912753e-01 +281 1400.00 4.15703947250870253782e+00 3.44963476406641766925e-01 5.64973431948793014534e-01 3.64980116585774838622e-01 5.39187430062526562580e-01 3.76902668845200683467e-01 4.54611540246396106379e-01 3.65661948021959448685e-01 5.77346457168796955983e-01 +282 1405.00 4.18016500935360113544e+00 3.46615134018193160603e-01 5.67887998482695555147e-01 3.66744480351218649083e-01 5.42016651654266046201e-01 3.78721948030250721295e-01 4.57000703803314201057e-01 3.67428667351733739821e-01 5.80332586223622159949e-01 +283 1410.00 4.20330804462574736391e+00 3.48267675743546556433e-01 5.70804301692768634169e-01 3.68509679272522927551e-01 5.44847893794908944010e-01 3.80541998880677079242e-01 4.59392469713505058326e-01 3.69196284901888271968e-01 5.83320690827459409356e-01 +284 1415.00 4.22646844377837815898e+00 3.49921102012812068605e-01 5.73722329195984093175e-01 3.70275711233338411521e-01 5.47681144527391805532e-01 3.82362818671757476174e-01 4.61786832757607512701e-01 3.70964799159264058126e-01 5.86310757660366332900e-01 +285 1420.00 4.24964607356024526297e+00 3.51575413247808721273e-01 5.76642068706736288242e-01 3.72042574116278945695e-01 5.50516392025238610053e-01 3.84184404684988267675e-01 4.64183787713150664000e-01 3.72734208605520533908e-01 5.89302773468729945705e-01 +286 1425.00 4.27284080201560989565e+00 3.53230609853772858919e-01 5.79563508037878705181e-01 3.73810265800849639284e-01 5.53353624590488424317e-01 3.86006754201865753817e-01 4.66583329354554765533e-01 3.74504511712988985561e-01 5.92296725071486340752e-01 +287 1430.00 4.29605249843242908980e+00 3.54886692226613176260e-01 5.82486635097614224854e-01 3.75578784166555157409e-01 5.56192830656804138023e-01 3.87829864513213717903e-01 4.68985452448985262741e-01 3.76275706948819010922e-01 5.95292599354938278822e-01 +288 1435.00 4.31928103336307778193e+00 3.56543660746692081531e-01 5.85411437894677866289e-01 3.77348127090827822894e-01 5.59033998782218044532e-01 3.89653732908819661063e-01 4.71390151766716503090e-01 3.78047792771868507167e-01 5.98290383275864368073e-01 +289 1440.00 4.34252627858289574903e+00 3.58201515784007940013e-01 5.88337904530044975004e-01 3.79118292452136018689e-01 5.61877117656386482203e-01 3.91478356687799011748e-01 4.73797422069731688499e-01 3.79820767634777345378e-01 6.01290063857373269229e-01 +290 1445.00 4.36578810711091325203e+00 3.59860257694049612276e-01 5.91266023202113411017e-01 3.80889278123765995243e-01 5.64722176089189398240e-01 3.93303733149266865343e-01 4.76207258118977794226e-01 3.81594629983966704412e-01 6.04291628195122831890e-01 +291 1450.00 4.38906639313730639884e+00 3.61519886821941638377e-01 5.94195782205667377696e-01 3.82661081981077177971e-01 5.67569163019021161176e-01 3.95129859598556898437e-01 4.78619654674365069269e-01 3.83369378256530168869e-01 6.07295063449027727742e-01 +292 1455.00 4.41236101209594178130e+00 3.63180403498298665088e-01 5.97127169926694678637e-01 3.84433701897355928345e-01 5.70418067506573422953e-01 3.96956733345148360392e-01 4.81034606489585625511e-01 3.85145010886451921728e-01 6.10300356849479030963e-01 +293 1460.00 4.43567184055037522228e+00 3.64841808044408077993e-01 6.00060174850679195480e-01 3.86207135745888774370e-01 5.73268878732760556183e-01 3.98784351704739192801e-01 4.83452108317294904083e-01 3.86921526297352269541e-01 6.13307495693197646247e-01 +294 1465.00 4.45899875625603048235e+00 3.66504100767047147347e-01 6.02994785551199119489e-01 3.87981381395816393720e-01 5.76121586001830277013e-01 4.00612711991990555482e-01 4.85872154909112008436e-01 3.88698922908705724044e-01 6.16316467344271590179e-01 +295 1470.00 4.48234163811874974925e+00 3.68167281961592651740e-01 6.05930990699255489496e-01 3.89756436719388754675e-01 5.78976178737217184178e-01 4.02441811532964544007e-01 4.88294741013546862440e-01 3.90477199131695540402e-01 6.19327259236227889438e-01 +296 1475.00 4.50570036618442504306e+00 3.69831351910984817977e-01 6.08868779057053277626e-01 3.91532299584710419271e-01 5.81832646482579485259e-01 4.04271647651650134492e-01 4.90719861374963761680e-01 3.92256353372323007811e-01 6.22339858867887785188e-01 +297 1480.00 4.52907482161827079636e+00 3.71496310888835612474e-01 6.11808139476965218151e-01 3.93308967859885616480e-01 5.84690978896617030713e-01 4.06102217681363897306e-01 4.93147510736690664057e-01 3.94036384028298103388e-01 6.25354253803365955910e-01 +298 1485.00 4.55246488670482740702e+00 3.73162159152175043619e-01 6.14749060907750055627e-01 3.95086439414055190511e-01 5.87551165756180382438e-01 4.07933518956459351124e-01 4.95577683842055194408e-01 3.95817289492148616237e-01 6.28370431675180696196e-01 +299 1490.00 4.57587044481686078257e+00 3.74828896950777812336e-01 6.17691532386261732412e-01 3.96864712112214190753e-01 5.90413196952125129968e-01 4.09765548817507818669e-01 4.98010375429203344666e-01 3.97599068150184031811e-01 6.31388380181143737957e-01 +300 1495.00 4.59929138044646457217e+00 3.76496524520945341497e-01 6.20635543039521397901e-01 3.98643783822467068223e-01 5.93277062492421292106e-01 4.11598304610263143744e-01 5.00445580236280718189e-01 3.99381718381458972189e-01 6.34408087086433369883e-01 +301 1500.00 4.62272757912213982934e+00 3.78165042087578673335e-01 6.23581082087827476279e-01 4.00423652408772534628e-01 5.96142752493861838303e-01 4.13431783682551734493e-01 5.02883292999360520525e-01 4.01165238558809478242e-01 6.37429540219449419780e-01 +302 1505.00 4.64617892747098260031e+00 3.79834449863142020742e-01 6.26528138837500137015e-01 4.02204315735089412698e-01 5.99010257188281491914e-01 4.15265983388418469247e-01 5.05323508453479175451e-01 4.02949627047816893999e-01 6.40452727474921434947e-01 +303 1510.00 4.66964531314613662261e+00 3.81504748049735220583e-01 6.29476702689173328586e-01 4.03985771666412696312e-01 6.01879566917374209112e-01 4.17100901087090580877e-01 5.07766221331600431377e-01 4.04734882210952939818e-01 6.43477636813909459335e-01 +304 1515.00 4.69312662484751896841e+00 3.83175936839094233299e-01 6.32426763127429736322e-01 4.05768018064628477326e-01 6.04750672129584332382e-01 4.18936534140904093260e-01 5.10211426364615361351e-01 4.06521002401362241407e-01 6.46504256261730803068e-01 +305 1520.00 4.71662275231145411425e+00 3.84848016409481463729e-01 6.35378309728056200889e-01 4.07551052794731749618e-01 6.07623563386324949676e-01 4.20772879916340936113e-01 5.12659118283414594330e-01 4.08307985967006847883e-01 6.49532573905887700150e-01 +306 1525.00 4.74013358628995185029e+00 3.86520986928795495796e-01 6.38331332153898589610e-01 4.09334873716535596611e-01 6.10498231351613407369e-01 4.22609935787137902530e-01 5.15109291817853032214e-01 4.10095831249630726756e-01 6.52562577902285223530e-01 +307 1530.00 4.76365901851961215385e+00 3.88194848555607041618e-01 6.41285820155896746364e-01 4.11119478692962447841e-01 6.13374666798290668623e-01 4.24447699128068123287e-01 5.17561941693639115947e-01 4.11884536584759208822e-01 6.55594256469012814925e-01 +308 1535.00 4.78719894176307825262e+00 3.89869601435013479751e-01 6.44241763572049652709e-01 4.12904865584861724415e-01 6.16252860601801843998e-01 4.26286167322196041241e-01 5.20017062640627858450e-01 4.13674100303771830056e-01 6.58627597886345172995e-01 +309 1540.00 4.81075324974685614166e+00 3.91545245702784538988e-01 6.47199152324305138073e-01 4.14691032252046620776e-01 6.19132803743306148192e-01 4.28125337755695334341e-01 5.22474649382455025304e-01 4.15464520728720698717e-01 6.61662590500886604872e-01 +310 1545.00 4.83432183717167784920e+00 3.93221781482253007756e-01 6.50157976425815298249e-01 4.16477976556402951225e-01 6.22014487302421370529e-01 4.29965207817848804606e-01 5.24934696646902398953e-01 4.17255796178548632458e-01 6.64699222721426341565e-01 +311 1550.00 4.85790459970213550633e+00 3.94899208887424080228e-01 6.53118225969535726172e-01 4.18265696356707461501e-01 6.24897902464479626516e-01 4.31805774904158001792e-01 5.27397199157605856001e-01 4.19047924965979867729e-01 6.67737483019974709109e-01 +312 1555.00 4.88150143395631896936e+00 3.96577528020902236872e-01 6.56079891138589776922e-01 4.20054189513809683731e-01 6.27783040511198930922e-01 4.33647036416342557263e-01 5.29862151638201717141e-01 4.20840905395447439918e-01 6.70777359930726291282e-01 +313 1560.00 4.90511223747472424606e+00 3.98256738975964585947e-01 6.59042962196940584896e-01 4.21843453884413355226e-01 6.30669892823792599401e-01 4.35488989759231504006e-01 5.32329548814398645362e-01 4.22634735768275204837e-01 6.73818842052133382126e-01 +314 1565.00 4.92873690876170744701e+00 3.99936841832414513576e-01 6.62007429495610311143e-01 4.23633487330404345794e-01 6.33558450881933188370e-01 4.37331632340763276634e-01 5.34799385406723559733e-01 4.24429414379568659133e-01 6.76861918042760191128e-01 +315 1570.00 4.95237534721293748419e+00 4.01617836662800875569e-01 6.64973283467496623089e-01 4.25424287709523230028e-01 6.36448706259606145075e-01 4.39174961577167455307e-01 5.37271656140885345287e-01 4.26224939517177991988e-01 6.79906576626464254076e-01 +316 1575.00 4.97602745313612437883e+00 4.03299723526198861112e-01 6.67940514629447035233e-01 4.27215852879510082918e-01 6.39340650628219875351e-01 4.41018974886746240038e-01 5.39746355738447425310e-01 4.28021309465844546072e-01 6.82952806584106175691e-01 +317 1580.00 4.99969312776138519183e+00 4.04982502475465577785e-01 6.70909113582258354036e-01 4.29008180699141483672e-01 6.42234275751423222545e-01 4.42863669695057027287e-01 5.42223478923045454358e-01 4.29818522503054800676e-01 6.86000596762876613255e-01 +318 1585.00 5.02337227317905288260e+00 4.06666173548948073346e-01 6.73879071006530327992e-01 4.30801269028230737757e-01 6.45129573486141638661e-01 4.44709043429729777852e-01 5.44703020417279359933e-01 4.31616576900076542866e-01 6.89049936070077806427e-01 +319 1590.00 5.04706479238114091856e+00 4.08350736776702305519e-01 6.76850377667849167906e-01 4.32595115723481637993e-01 6.48026535778432055679e-01 4.46555093525649593467e-01 5.47184974943748736464e-01 4.33415470924032153466e-01 6.92100813472087961209e-01 +320 1595.00 5.07077058920951895260e+00 4.10036192179456471241e-01 6.79823024410567633424e-01 4.34389718643670763587e-01 6.50925154668664851521e-01 4.48401817420810477888e-01 5.49669337226089682602e-01 4.35215202836861769775e-01 6.95153217998505379427e-01 +321 1600.00 5.09448956839736855073e+00 4.11722539765501827080e-01 6.82797002161951493981e-01 4.36185075647574915791e-01 6.53825422283232260412e-01 4.50249212559425127100e-01 5.52156101987938185971e-01 4.37015770894287169934e-01 6.98207138739041277553e-01 +322 1605.00 5.11822163550699560375e+00 4.13409779536911214937e-01 6.85772301930106520373e-01 4.37981184592934336131e-01 6.56727330837657774509e-01 4.52097276390888258568e-01 5.54645263952930345219e-01 4.38817173346848055093e-01 7.01262564842481173066e-01 +323 1610.00 5.14196669695057018146e+00 4.15097911481247694443e-01 6.88748914800869305175e-01 4.39778043337489266129e-01 6.59630872632450682147e-01 4.53946006366667431653e-01 5.57136817844702258995e-01 4.40619408438865767241e-01 7.04319485519795840389e-01 +324 1615.00 5.16572465996938401389e+00 4.16786935580892303754e-01 6.91726831942989228708e-01 4.41575649740016507039e-01 6.62536040056214803329e-01 4.55795399947557577924e-01 5.59630758391035487698e-01 4.42422474411552246742e-01 7.07377890041031465174e-01 +325 1620.00 5.18949543264422352706e+00 4.18476851803716409783e-01 6.94706044602946160005e-01 4.43374001659292638067e-01 6.65442825580467300917e-01 4.57645454596427025962e-01 5.62127080314529736782e-01 4.44226369497828177391e-01 7.10437767735309089190e-01 +326 1625.00 5.21327892385391145069e+00 4.20167660113445418091e-01 6.97686544105987405118e-01 4.45173096953057845226e-01 6.68351221757565006065e-01 4.59496167781325737245e-01 5.64625778344003181886e-01 4.46031091928541512104e-01 7.13499107991862002720e-01 +327 1630.00 5.23707504328566830765e+00 4.21859360458259113891e-01 7.00668321855091091876e-01 4.46972933482161827179e-01 6.71261221226922999428e-01 4.61347536976522198948e-01 5.67126847205164597021e-01 4.47836639928321844639e-01 7.16561900258998907276e-01 +328 1635.00 5.26088370144548100882e+00 4.23551952781154761318e-01 7.03651369333038956277e-01 4.48773509103308321233e-01 6.74172816703614619094e-01 4.63199559660430582042e-01 5.69630281627868662042e-01 4.49643011715580021015e-01 7.19626134045139753681e-01 +329 1640.00 5.28470480959591348835e+00 4.25245437014765692574e-01 7.06635678099306718813e-01 4.50574821677346804005e-01 6.77086000984589597707e-01 4.65052233316647078976e-01 5.72136076339896937348e-01 4.51450205505617874202e-01 7.22691798914671279519e-01 +330 1645.00 5.30853827982866022239e+00 4.26939813081361307923e-01 7.09621239789028357414e-01 4.52376869064090580963e-01 6.80000766945564549815e-01 4.66905555433950125721e-01 5.74644226073176667136e-01 4.53258219506482262773e-01 7.25758884493128086923e-01 +331 1650.00 5.33238402496090113658e+00 4.28635080892846576095e-01 7.12608046117141236131e-01 4.54179649121279616075e-01 6.82917107538950851620e-01 4.68759523505263342447e-01 5.77154725558599146495e-01 4.55067051923110810208e-01 7.28827380463047180825e-01 +332 1655.00 5.35624195860785246026e+00 4.30331240355944721898e-01 7.15596088872168190065e-01 4.55983159711836560923e-01 6.85835015791781077432e-01 4.70614135030765767809e-01 5.79667569530164072944e-01 4.56876700954222836337e-01 7.31897276565005139304e-01 +333 1660.00 5.38011199512058091443e+00 4.32028291363905359024e-01 7.18585359919325816769e-01 4.57787398695574221374e-01 6.88754484808818623343e-01 4.72469387514781735682e-01 5.82182752721872143198e-01 4.58687164796464652561e-01 7.34968562598653285534e-01 +334 1665.00 5.40399404961709883821e+00 4.33726233802723404320e-01 7.21575851199489304300e-01 4.59592363933342185067e-01 6.91675507767375630230e-01 4.74325278464744926055e-01 5.84700269869795730138e-01 4.60498441637154809492e-01 7.38041228419609174338e-01 +335 1670.00 5.42788803795126550966e+00 4.35425067549066235895e-01 7.24567554729191209972e-01 4.61398053285990095151e-01 6.94598077914203804184e-01 4.76181805396380164463e-01 5.87220115711044599038e-01 4.62310529662575908638e-01 7.41115263942566215860e-01 +336 1675.00 5.45179387670243276176e+00 4.37124792472345979899e-01 7.27560462597513279981e-01 4.63204464617476496802e-01 6.97522188573785673071e-01 4.78038965829558182286e-01 5.89742284985837472711e-01 4.64123427051755188533e-01 7.44190659137147103586e-01 +337 1680.00 5.47571148318579936642e+00 4.38825408429538155186e-01 7.30554566970231133993e-01 4.65011595788651033168e-01 7.00447833134860697868e-01 4.79896757287258668434e-01 5.92266772434392629876e-01 4.65937131981647212342e-01 7.47267404031013438015e-01 +338 1685.00 5.49964077543169072015e+00 4.40526915270363084165e-01 7.33549860083596794169e-01 4.66819444663472415957e-01 7.03375005058717750472e-01 4.81755177300752679415e-01 5.94793572799001690754e-01 4.67751642622988184073e-01 7.50345488709866281773e-01 +339 1690.00 5.52358167217518580827e+00 4.42229312838323174173e-01 7.36546334251592660358e-01 4.68628009104862908174e-01 7.06303697874011815472e-01 4.83614223405457122063e-01 5.97322680826101737317e-01 4.69566957140295726525e-01 7.53424903312263083421e-01 +340 1695.00 5.54753409287685617102e+00 4.43932600963446832854e-01 7.39543981855567911232e-01 4.70437286977817670230e-01 7.09233905175728485126e-01 4.85473893139897694216e-01 5.99854091261093458343e-01 4.71383073698087518011e-01 7.56505638037909711180e-01 +341 1700.00 5.57149795766057298607e+00 4.45636779471617394677e-01 7.42542795354602547242e-01 4.72247276146295524857e-01 7.12165620625183404258e-01 4.87334184050891849882e-01 6.02387798853523115383e-01 4.73199990451553476056e-01 7.59587683138332803168e-01 +342 1705.00 5.59547318737569554514e+00 4.47341848177317313873e-01 7.45542767277215800981e-01 4.74057974477364252319e-01 7.15098837948985766033e-01 4.89195093689402393800e-01 6.04923798355009756378e-01 4.75017705554847291527e-01 7.62671028922060845190e-01 +343 1710.00 5.61945970351415535760e+00 4.49047806886737954635e-01 7.48543890223439700726e-01 4.75869379837055517246e-01 7.18033550935930131587e-01 4.91056619611574152184e-01 6.07462084517172651310e-01 4.76836217154867680890e-01 7.65755665753589220834e-01 +344 1715.00 5.64345742828300966920e+00 4.50754655399852210973e-01 7.51546156865854131368e-01 4.77681490091400984266e-01 7.20969753436994986728e-01 4.92918759378734250287e-01 6.10002652096813147153e-01 4.78655523397476689862e-01 7.68841584052342819078e-01 +345 1720.00 5.66746628453188971974e+00 4.52462393504195869998e-01 7.54549559946479764250e-01 4.79494303108504882349e-01 7.23907439367416749576e-01 4.94781510556355275110e-01 6.12545495851768428963e-01 4.80475622420245607191e-01 7.71928774293712427479e-01 +346 1725.00 5.69148619578409142861e+00 4.54171020984195761283e-01 7.57554092278848179021e-01 4.81307816757507944683e-01 7.26846602699433796957e-01 4.96644870718201070225e-01 6.15090610542985638531e-01 4.82296512359708939854e-01 7.75017227006982389881e-01 +347 1730.00 5.71551708619511966702e+00 4.55880537610805158799e-01 7.60559746745931297696e-01 4.83122028907551182009e-01 7.29787237466433258426e-01 4.98508837440108432126e-01 6.17637990933484259948e-01 4.84118191347219117837e-01 7.78106932776366555515e-01 +348 1735.00 5.73955888060451613342e+00 4.57590943150831819253e-01 7.63566516301176667625e-01 4.84936937428811498663e-01 7.32729337758804444292e-01 5.00373408306205358365e-01 6.20187631788356674711e-01 4.85940657509983220397e-01 7.81197882239972551943e-01 +349 1740.00 5.76361150447366465954e+00 4.59302237360719400883e-01 7.66574393965398392936e-01 4.86752540192502747285e-01 7.35672897726012520181e-01 5.02238580903728859539e-01 6.22739527875804776968e-01 4.87763908968989523540e-01 7.84290066091873683263e-01 +350 1745.00 5.78767488387542616834e+00 4.61014419988620194335e-01 7.69583372829886647182e-01 4.88568835070874840643e-01 7.38617911569342533440e-01 5.04104352826134860521e-01 6.25293673969212315811e-01 4.89587943845226636341e-01 7.87383475077963912447e-01 +351 1750.00 5.81174894556670285084e+00 4.62727490777504524289e-01 7.72593446054334775930e-01 4.90385819937214251230e-01 7.41564373551228173120e-01 5.05970721672061141128e-01 6.27850064840926647136e-01 4.91412760251391633748e-01 7.90478099998030758755e-01 +352 1755.00 5.83583361687441559695e+00 4.64441449457905664033e-01 7.75604606865802459481e-01 4.92203492663770947324e-01 7.44512277980741266070e-01 5.07837685045327336120e-01 6.30408695268476759743e-01 4.93238356300181646219e-01 7.93573931707827640025e-01 +353 1760.00 5.85992882575769247211e+00 4.66156295757247929323e-01 7.78616848559752661174e-01 4.94021851127976974194e-01 7.47461619227065998672e-01 5.09705240557008276703e-01 6.32969560033538214405e-01 4.95064730094966265472e-01 7.96670961113892239780e-01 +354 1765.00 5.88403450080788203991e+00 4.67872029390518251457e-01 7.81630164497978507931e-01 4.95840893204155197527e-01 7.50412391706024251015e-01 5.11573385821287640596e-01 6.35532653917785683717e-01 4.96891879741187592057e-01 7.99769179176654909647e-01 +355 1770.00 5.90815057117598296799e+00 4.69588650069594881753e-01 7.84644548109639683453e-01 4.97660616769737662590e-01 7.53364589886295399346e-01 5.13442118458567797745e-01 6.38097971708076472375e-01 4.98719803337033307233e-01 8.02868576910440667760e-01 +356 1775.00 5.93227696665557679978e+00 4.71306157495991695505e-01 7.87659992889190085918e-01 4.99481019702156470164e-01 7.56318208286306248311e-01 5.15311436094433639177e-01 6.40665508194376620565e-01 5.00548498976544964378e-01 8.05969145380357354647e-01 +357 1780.00 5.95641361759990228819e+00 4.73024551361894696200e-01 7.90676492400522734627e-01 5.01302099882989349311e-01 7.59273241473194748785e-01 5.17181336360687304854e-01 6.43235258170798296362e-01 5.02377964751691608036e-01 8.09070875706442982356e-01 +358 1785.00 5.98056045497367971819e+00 4.74743831356380985298e-01 7.93694040268678957517e-01 5.03123855189668178767e-01 7.62229684060737655571e-01 5.19051816893277728759e-01 6.45807216433526121158e-01 5.04208198748223868080e-01 8.12173759057447153253e-01 +359 1790.00 6.00471741028056626988e+00 4.76463997157127061577e-01 7.96712630188139425691e-01 5.04946283505843807049e-01 7.65187530712459373916e-01 5.20922875336444546335e-01 6.48381377781854340014e-01 5.06039199051891985803e-01 8.15277786658085257265e-01 +360 1795.00 6.02888441563569710269e+00 4.78185048436627069268e-01 7.99732255914533562979e-01 5.06769382714130078860e-01 7.68146776134376763068e-01 5.22794509337537016691e-01 6.50957737020258608851e-01 5.07870963741191783214e-01 8.18382949782820223739e-01 +361 1800.00 6.05306140372423584495e+00 4.79906984859084451145e-01 8.02752911271892966028e-01 5.08593150697141282990e-01 7.71107415079145375181e-01 5.24666716548049527624e-01 6.53536288955288258151e-01 5.09703490891509569671e-01 8.21489239756899580769e-01 +362 1805.00 6.07724830775991353704e+00 4.81629806080410893809e-01 8.05774590145397873187e-01 5.10417585341637058960e-01 7.74069442342950164715e-01 5.26539494628804449761e-01 6.56117028399710200404e-01 5.11536778577195372364e-01 8.24596647959463746602e-01 +363 1810.00 6.10144506153685028949e+00 4.83353511751336173408e-01 8.08797286485522848309e-01 5.12242684533340653097e-01 7.77032852765504933323e-01 5.28412841243733555352e-01 6.58699950166291903209e-01 5.13370824866380748297e-01 8.27705165818364951846e-01 +364 1815.00 6.12565159939846726189e+00 4.85078101514298809516e-01 8.11820994304926379925e-01 5.14068446160048653226e-01 7.79997641226943705384e-01 5.30286754061950360573e-01 6.61285049075055808565e-01 5.15205627825124468089e-01 8.30814784813275086783e-01 +365 1820.00 6.14986785623747866936e+00 4.86803575004482458333e-01 8.14845707680524333760e-01 5.15894868111629656404e-01 7.82963802648856899147e-01 5.32161230759823244973e-01 6.63872319948096589748e-01 5.17041185514302892301e-01 8.33925496476723648875e-01 +366 1825.00 6.17409376747517057993e+00 4.88529931849815857170e-01 8.17871420751417943507e-01 5.17721948277952703776e-01 7.85931331995327941975e-01 5.34036269017866604969e-01 6.66461757611655047917e-01 5.18877495993756654435e-01 8.37037292387878384403e-01 +367 1830.00 6.19832926908212389350e+00 4.90257171672009328667e-01 8.20898127718892367533e-01 5.19549684549923340704e-01 7.88900224266713911980e-01 5.35911866523849367283e-01 6.69053356897153839178e-01 5.20714557318143644871e-01 8.40150164179800484909e-01 +368 1835.00 6.22257429754712720893e+00 4.91985294084481883381e-01 8.23925822846417466039e-01 5.21378074823628856471e-01 7.91870474502756382940e-01 5.37788020968649527198e-01 6.71647112639125132283e-01 5.22552367539013018494e-01 8.43264103533225672926e-01 +369 1840.00 6.24682878988753831351e+00 4.93714298694434172710e-01 8.26954500458611518887e-01 5.23207116991011189633e-01 7.94842077780506861551e-01 5.39664730050400609507e-01 6.74243019676246113647e-01 5.24390924704804417544e-01 8.46379102181746945099e-01 +370 1845.00 6.27109268364928240658e+00 4.95444185103884549015e-01 8.29984154941240670489e-01 5.25036808950230526882e-01 7.97815029213292170596e-01 5.41541991472417438835e-01 6.76841072851340430638e-01 5.26230226861884808898e-01 8.49495151904558931655e-01 +371 1850.00 6.29536591687576230214e+00 4.97174952904487543748e-01 8.33014780741219706961e-01 5.26867148597374379548e-01 8.00789323950712450539e-01 5.43419802945270258299e-01 6.79441267013449423651e-01 5.28070272050402689246e-01 8.52612244532677476805e-01 +372 1855.00 6.31964842813894822626e+00 4.98906601683751893539e-01 8.36046372365574885777e-01 5.28698133833712224927e-01 8.03764957175533645284e-01 5.45298162181601764331e-01 6.82043597013687885600e-01 5.29911058310506444258e-01 8.55730371948938084437e-01 +373 1860.00 6.34394015648756415260e+00 5.00639131021931360621e-01 8.39078924381444490876e-01 5.30529762558440531883e-01 8.06741924105759400376e-01 5.47177066903382747221e-01 6.84648057708352131279e-01 5.31752583677162382614e-01 8.58849526080742498024e-01 +374 1865.00 6.36824104150926206813e+00 5.02372540492025287939e-01 8.42112431416078277557e-01 5.32362032673865503973e-01 8.09720219992558387645e-01 5.49056514835692732746e-01 6.87254643958920885538e-01 5.33594846183264248651e-01 8.61969698906276282635e-01 +375 1870.00 6.39255102325807911257e+00 5.04106829660814104166e-01 8.45146888154765019152e-01 5.34194942084365798074e-01 8.12699840118192073923e-01 5.50936503709830049935e-01 6.89863350629981830764e-01 5.35437843857559880867e-01 8.65090882453472986846e-01 +376 1875.00 6.41687004228553270480e+00 5.05841998089896160984e-01 8.48182289344978523893e-01 5.36028488696392968471e-01 8.15680779797050115043e-01 5.52817031264347780173e-01 6.92474172593377845786e-01 5.37281574727760946608e-01 8.68213068798976750351e-01 +377 1880.00 6.44119803961988512953e+00 5.07578045331542382357e-01 8.51218629788085157095e-01 5.37862670416398458428e-01 8.18663034372541842387e-01 5.54698095240908295445e-01 6.95087104723024484798e-01 5.39126036815360420995e-01 8.71336250063998396520e-01 +378 1885.00 6.46553495679724310463e+00 5.09314970933878008452e-01 8.54255904347636874085e-01 5.39697485152906830663e-01 8.21646599219168605188e-01 5.56579693388428831113e-01 6.97702141898019267963e-01 5.40971228141851390170e-01 8.74460418423640972740e-01 +379 1890.00 6.48988073579936752822e+00 5.11052774437773416061e-01 8.57294107943150751616e-01 5.41532930816514990191e-01 8.24631469740451761297e-01 5.58461823462044981703e-01 7.00319279004714689840e-01 5.42817146725617538650e-01 8.77585566095500979600e-01 +380 1895.00 6.51423531909513098270e+00 5.12791455377880178723e-01 8.60333235552183661632e-01 5.43369005319893183525e-01 8.27617641366859113639e-01 5.60344483221038247578e-01 7.02938510931535809334e-01 5.44663790578824635880e-01 8.80711685348995465539e-01 +381 1900.00 6.53859864961979209141e+00 5.14531013282632065930e-01 8.63373282210331161046e-01 5.45205706577784110500e-01 8.30605109555804910215e-01 5.62227670431944548390e-01 7.05559832573126488597e-01 5.46511157715710571559e-01 8.83838768498106941429e-01 +382 1905.00 6.56297067076463225277e+00 5.16271447674243710857e-01 8.66414243008118201139e-01 5.47043032503894299801e-01 8.33593869792686903430e-01 5.64111382866482324872e-01 7.08183238828276162558e-01 5.48359246144295209291e-01 8.86966807905529064371e-01 +383 1910.00 6.58735132638731268884e+00 5.18012758069748335821e-01 8.69456113093072691100e-01 5.48880981018148528250e-01 8.36583917587776060287e-01 5.65995618300515368482e-01 7.10808724603029129518e-01 5.50208053870525404250e-01 8.90095795981630688587e-01 +384 1915.00 6.61174056079115413098e+00 5.19754943977887129414e-01 8.72498887671797840326e-01 5.50719550039435401523e-01 8.39575248476217894655e-01 5.67880374517162445080e-01 7.13436284806538534298e-01 5.52057578898275225221e-01 8.93225725183418584052e-01 +385 1920.00 6.63613831873549564477e+00 5.21498004902219758350e-01 8.75542562001680901851e-01 5.52558737487679696443e-01 8.42567858016994963855e-01 5.69765649306797072882e-01 7.16065914353140153814e-01 5.53907819228309672432e-01 8.96356588012465982374e-01 +386 1925.00 6.66054454542533758143e+00 5.23241940342160427591e-01 8.78587131399184761982e-01 5.54398541287988377846e-01 8.45561741792927201722e-01 5.71651440462902171724e-01 7.18697608164424295296e-01 5.55758772858284344487e-01 8.99488377021129270616e-01 +387 1930.00 6.68495918650096498936e+00 5.24986749788831419394e-01 8.81632591235701368326e-01 5.56238959363395402136e-01 8.48556895408599465291e-01 5.73537745785179020608e-01 7.21331361165090667598e-01 5.57610437784818335771e-01 9.02621084803221895854e-01 +388 1935.00 6.70938218803796093681e+00 5.26732432727137100947e-01 8.84678936935480275672e-01 5.58079989642117246795e-01 8.51553314493470048241e-01 5.75424563080583983954e-01 7.23967168287093953971e-01 5.59462811999349107772e-01 9.05754704003341348795e-01 +389 1940.00 6.73381349655756356043e+00 5.28478988639908608960e-01 8.87726163979773441604e-01 5.59921630053406116367e-01 8.54550994694616483649e-01 5.77311890160218554868e-01 7.26605024465497351116e-01 5.61315893494349960058e-01 9.08889227308577574149e-01 +390 1945.00 6.75825305899557271516e+00 5.30226416998576977058e-01 8.90774267899580030061e-01 5.61763878526514992551e-01 8.57549931681917398940e-01 5.79199724842439755967e-01 7.29244924642619807287e-01 5.63169680256076166103e-01 9.12024647453695713750e-01 +391 1950.00 6.78270082272308449944e+00 5.31974717274573016823e-01 8.93823244286011786564e-01 5.63606732995878156878e-01 8.60550121142870105828e-01 5.81088064949749627530e-01 7.31886863768034801048e-01 5.65024170270782888359e-01 9.15160957218026371862e-01 +392 1955.00 6.80715673551538991148e+00 5.33723888928963385858e-01 8.96873088776818483403e-01 5.65450191394893941776e-01 8.63551558787773232417e-01 5.82976908311905517301e-01 7.34530836791315699941e-01 5.66879361521615776631e-01 9.18298149426502341441e-01 +393 1960.00 6.83162074559344301150e+00 5.35473931418669280013e-01 8.99923797067788355797e-01 5.67294251661106252449e-01 8.66554240342471304714e-01 5.84866252763846627971e-01 7.37176838674472922897e-01 5.68735251988611856255e-01 9.21436216950694775285e-01 +394 1965.00 6.85609280156166267517e+00 5.37224844197502382492e-01 9.02975364905494903844e-01 5.69138911734131780484e-01 8.69558161551464370298e-01 5.86756096146730743435e-01 7.39824864381589675233e-01 5.70591839651807597456e-01 9.24575152704667613257e-01 +395 1970.00 6.88057285243903482552e+00 5.38976626709947170824e-01 9.06027788089367569491e-01 5.70984169553586995427e-01 8.72563318176871716148e-01 5.88646436305861220362e-01 7.42474908880894735042e-01 5.72449122485021222317e-01 9.27714949648086983913e-01 +396 1975.00 6.90506084766947569875e+00 5.40729278397378276821e-01 9.09081062469620282407e-01 5.72830023064270776878e-01 8.75569705995321578840e-01 5.90537271095868954163e-01 7.45126967150981034393e-01 5.74307098464143739314e-01 9.30855600788293435777e-01 +397 1980.00 6.92955673708036901104e+00 5.42482798694952306207e-01 9.12135183950360084459e-01 5.74676470208909218051e-01 8.78577320803134886873e-01 5.92428598373457959703e-01 7.47781034173550906985e-01 5.76165765559884190949e-01 9.33997099172012013035e-01 +398 1985.00 6.95406047089293988250e+00 5.44237187032643787710e-01 9.15190148484405496809e-01 5.76523508937482720427e-01 8.81586158409068954001e-01 5.94320416002586893178e-01 7.50437104935488652480e-01 5.78025121741915226536e-01 9.37139437894677795882e-01 +399 1990.00 6.97857199974296982248e+00 5.45992442833172053618e-01 9.18245952079505101118e-01 5.78371137196862949992e-01 8.84596214637427435967e-01 5.96212721854469385185e-01 7.53095174431969605067e-01 5.79885164976799982739e-01 9.40282610092147086434e-01 +400 1995.00 7.00309127463935521263e+00 5.47748565518220487114e-01 9.21302590789008557515e-01 5.80219352941176436111e-01 8.87607485325987211056e-01 5.98105513803428245900e-01 7.55755237663351175925e-01 5.81745893231101707244e-01 9.43426608946913991538e-01 +401 2000.00 7.02761824697445902643e+00 5.49505554500144488550e-01 9.24360060722232645958e-01 5.82068154122476699719e-01 8.90619966327035106346e-01 5.99998789733114046285e-01 7.58417289635173186291e-01 5.83607304466202125859e-01 9.46571427683965294086e-01 +402 2005.00 7.05215286853448475313e+00 5.51263409188190278698e-01 9.27418358034095779985e-01 5.83917538697999338737e-01 8.93633653504257940980e-01 6.01892547530286536883e-01 7.61081325360230098731e-01 5.85469396644518469408e-01 9.49717059571817512342e-01 +403 2010.00 7.07669509148910336194e+00 5.53022128985385497124e-01 9.30477478931336698942e-01 5.85767504624980173134e-01 8.96648542735853149033e-01 6.03786785086887434204e-01 7.63747339857534957019e-01 5.87332167725359566290e-01 9.52863497922515900740e-01 +404 2015.00 7.10124486837073121137e+00 5.54781713291648936881e-01 9.33537419670442236708e-01 5.87618049865836655776e-01 8.99664629910381541400e-01 6.05681500305222830782e-01 7.66415328151282659874e-01 5.89195615663888005997e-01 9.56010736091635227041e-01 +405 2020.00 7.12580215208489331502e+00 5.56542161497571075124e-01 9.36598176555573758151e-01 5.89469172381950179407e-01 9.02681910927804587175e-01 6.07576691087598375063e-01 7.69085285272922969391e-01 5.91059738417339497474e-01 9.59158767477243046073e-01 +406 2025.00 7.15036689593095076134e+00 5.58303472993743166164e-01 9.39659745941677004843e-01 5.91320870137811427369e-01 9.05700381698448020451e-01 6.09472355347720706753e-01 7.71757206261160733085e-01 5.92924533937767672676e-01 9.62307585519899588711e-01 +407 2030.00 7.17493905352954719490e+00 5.60065647163501045824e-01 9.42722124230335856154e-01 5.93173141103092715909e-01 9.08720038144038233519e-01 6.11368491000332636709e-01 7.74431086157809978054e-01 5.94790000177226163558e-01 9.65457183703694488131e-01 +408 2035.00 7.19951857891589330762e+00 5.61828683383961968723e-01 9.45785307871845781769e-01 5.95025983247466694337e-01 9.11740876193555815910e-01 6.13265095969504625550e-01 7.77106920016085167546e-01 5.96656135084659089429e-01 9.68607555553137267168e-01 +409 2040.00 7.22410542643612707536e+00 5.63592581029134565007e-01 9.48849293365213286577e-01 5.96879394541642405159e-01 9.14762891788418852634e-01 6.15162168184489210887e-01 7.79784702890236824935e-01 5.98522936609011124709e-01 9.71758694638339526328e-01 +410 2045.00 7.24869955081985128942e+00 5.65357339467844832726e-01 9.51914077257119850550e-01 5.98733372960474463653e-01 9.17786080876264009909e-01 6.17059705579721118340e-01 7.82464429846953302139e-01 6.00390402696117209125e-01 9.74910594569832866796e-01 +411 2050.00 7.27330090714905352911e+00 5.67122958063737137024e-01 9.54979656138812638133e-01 6.00587916481926553658e-01 9.20810439413018655408e-01 6.18957706094817039499e-01 7.85146095952921951877e-01 6.02258531289739829084e-01 9.78063248997532386220e-01 +412 2055.00 7.29790945084773134965e+00 5.68889436176309937210e-01 9.58046026651286131148e-01 6.02443023086035478464e-01 9.23835963363938361681e-01 6.20856167677684700479e-01 7.87829696288304348606e-01 6.04127320332604633712e-01 9.81216651616955259918e-01 +413 2060.00 7.32252513768190205212e+00 5.70656773160916119814e-01 9.61113185482174170460e-01 6.04298690752837819318e-01 9.26862648699460667245e-01 6.22755088280377844256e-01 7.90515225934297904864e-01 6.05996767765365040859e-01 9.84370796163002381718e-01 +414 2065.00 7.34714792375959824255e+00 5.72424968365653707991e-01 9.64181129363675282207e-01 6.06154917468588960716e-01 9.29890491398314145144e-01 6.24654465861168683993e-01 7.93202679983500247296e-01 6.07866871529710195432e-01 9.87525676412030928297e-01 +415 2070.00 7.37177776556195674118e+00 5.74194021136548049533e-01 9.67249855074626685436e-01 6.08011701219543732044e-01 9.32919487444409445409e-01 6.26554298384547458944e-01 7.95892053530582899157e-01 6.09737629561111327270e-01 9.90681286182890974423e-01 +416 2075.00 7.39641461986031245601e+00 5.75963930813405800002e-01 9.70319359439467898909e-01 6.09869039995066586357e-01 9.35949632827876132346e-01 6.28454583821223322637e-01 7.98583341681616820651e-01 6.11609039797112341574e-01 9.93837619333816313372e-01 +417 2080.00 7.42105844377837797765e+00 5.77734696733960717552e-01 9.73389639329276801227e-01 6.11726931787631156290e-01 9.38980923544025181116e-01 6.30355320146050890351e-01 8.01276539545782817697e-01 6.13481100172147630900e-01 9.96994669765532859351e-01 +418 2085.00 7.44570919478188297802e+00 5.79506318227655747854e-01 9.76460691659696733424e-01 6.13585374590747467671e-01 9.42013355595422652300e-01 6.32256505343212316106e-01 8.03971642241589234956e-01 6.15353808620652142913e-01 1.00015243141711462904e+00 +419 2090.00 7.47036683065784057334e+00 5.81278794623933392494e-01 9.79532513388864156667e-01 6.15444366403107512298e-01 9.45046924985671554786e-01 6.34158137399999266570e-01 8.06668644894799169442e-01 6.17227163072914586373e-01 1.00331089827116426427e+00 +420 2095.00 7.49503130950419116374e+00 5.83052125243944896482e-01 9.82605101522590063112e-01 6.17303905222366888772e-01 9.48081627724592590489e-01 6.36060214309921878595e-01 8.09367542635321290945e-01 6.19101161461296789490e-01 1.00647006434655894580e+00 +421 2100.00 7.51970258975052452399e+00 5.84826309406769162536e-01 9.85678453109178454028e-01 6.19163989052399887925e-01 9.51117459825116084993e-01 6.37962734074781101512e-01 8.12068330604465482558e-01 6.20975801715051511920e-01 1.00962992370674142784e+00 +422 2105.00 7.54438063016844751019e+00 5.86601346427338743439e-01 9.88752565240462510943e-01 6.21024615897080245475e-01 9.54154417305354440870e-01 6.39865694698451226152e-01 8.14771003946649807759e-01 6.22851081761358282840e-01 1.01279047045142922556e+00 +423 2110.00 7.56906538979902876463e+00 5.88377235613331883712e-01 9.91827435053877715099e-01 6.22885783764428047071e-01 9.57192496183419616607e-01 6.41769094194134082088e-01 8.17475557814584141703e-01 6.24726999526360460280e-01 1.01595169872283164203e+00 +424 2115.00 7.59375682804608675980e+00 5.90153976271390212638e-01 9.94903059728315386501e-01 6.24747490665572224877e-01 9.60231692483642818026e-01 6.43672930580213464857e-01 8.20181987370306120333e-01 6.26603552936201735335e-01 1.01911360270150663787e+00 +425 2120.00 7.61845490458290175440e+00 5.91931567702973060463e-01 9.97979436487232862696e-01 6.26609734611641600033e-01 9.63272002229318080602e-01 6.45577201879218853797e-01 8.22890287779999063389e-01 6.28480739915988628752e-01 1.02227617660739422689e+00 +426 2125.00 7.64315957941440782264e+00 5.93710009206431132966e-01 1.00105656259347108872e+00 6.28472513619983574884e-01 9.66313421447885678717e-01 6.47481906121970984813e-01 8.25600454219173718329e-01 6.30358558387718925786e-01 1.02543941469981936265e+00 +427 2130.00 7.66787081284609595144e+00 5.95489300072859606416e-01 1.00413443535650936944e+00 6.30335825707945773821e-01 9.69355946167821835857e-01 6.49387041344472670801e-01 8.28312481869559413816e-01 6.32237006273390411693e-01 1.02860331127645299176e+00 +428 2135.00 7.69258856548401936948e+00 5.97269439593354101170e-01 1.00721305212521072825e+00 6.32199668897021282987e-01 9.72399572419675450874e-01 6.51292605588945194839e-01 8.31026365922213128279e-01 6.34116081493964478533e-01 1.03176786067642334288e+00 +429 2140.00 7.71731279822442139960e+00 5.99050427051755152164e-01 1.01029241029093075355e+00 6.34064041210775752866e-01 9.75444296233996421819e-01 6.53198596902791916996e-01 8.33742101572337745985e-01 6.35995781970402185301e-01 1.03493305727513251746e+00 +430 2145.00 7.74204347228483769072e+00 6.00832261728794225775e-01 1.01337250728751770978e+00 6.35928940675884457612e-01 9.78490113643406544952e-01 6.55105013339634667524e-01 8.36459684025499750071e-01 6.37876105618482958093e-01 1.03809889548736666853e+00 +431 2150.00 7.76678054916263249652e+00 6.02614942903129779950e-01 1.01645334058924063925e+00 6.37794365321095346744e-01 9.81537020678454719125e-01 6.57011852959313635836e-01 8.39179108492448144752e-01 6.39757050359167966924e-01 1.04126536976522188205e+00 +432 2155.00 7.79152399063499778720e+00 6.04398469846165520281e-01 1.01953490771078758570e+00 6.39660313180338446770e-01 9.84585013372799688902e-01 6.58919113827887481527e-01 8.41900370194295755155e-01 6.41638614107199911629e-01 1.04443247460536081661e+00 +433 2160.00 7.81627375879005281689e+00 6.06182841829305263381e-01 1.02261720620830387496e+00 6.41526782286507279984e-01 9.87634087759063583611e-01 6.60826794017633445399e-01 8.44623464357337483399e-01 6.43520794778358440347e-01 1.04760020452517377265e+00 +434 2165.00 7.84102981599574633265e+00 6.07968058116697629423e-01 1.02570023367835427841e+00 6.43393770678713838862e-01 9.90684239867795413126e-01 6.62734891606010734222e-01 8.47348386215123428045e-01 6.45403590289458817253e-01 1.05076855411459990641e+00 +435 2170.00 7.86579212489985657442e+00 6.09754117970418785255e-01 1.02878398775792367914e+00 6.45261276398143124311e-01 9.93735465731617417795e-01 6.64643404676697024946e-01 8.50075131011567397543e-01 6.47286998552135006690e-01 1.05393751795321444220e+00 +436 2175.00 7.89056064841962978562e+00 6.11541020648398880866e-01 1.03186846612234406351e+00 6.47129297487016308388e-01 9.96787761381078607492e-01 6.66552331319588464709e-01 8.52803693996801559507e-01 6.49171017481129486448e-01 1.05710709070350472594e+00 +437 2180.00 7.91533534979359831851e+00 6.13328765405459108706e-01 1.03495366648840403379e+00 6.48997831993773255377e-01 9.99841122845691820942e-01 6.68461669630799670827e-01 8.55534070426140713650e-01 6.51055644988076109847e-01 1.06027726702795921376e+00 +438 2185.00 7.94011619248830591289e+00 6.15117351492274977431e-01 1.03803958660709372275e+00 6.50866877965816992280e-01 1.00289554615186093933e+00 6.70371417711627115565e-01 8.58266255567335933918e-01 6.52940878984608175095e-01 1.06344804166161410741e+00 +439 2190.00 7.96490314026049084362e+00 6.16906778154340140752e-01 1.04112622428536938379e+00 6.52736433455733400244e-01 1.00595102732909835730e+00 6.72281573670622578653e-01 8.61000244692284533166e-01 6.54826717382359646535e-01 1.06661940936023436066e+00 +440 2195.00 7.98969615716744918643e+00 6.18697044638183979437e-01 1.04421357734573283516e+00 6.54606496520252933990e-01 1.00900756239966260530e+00 6.74192135621519583744e-01 8.63736033082211029921e-01 6.56713158090891035990e-01 1.06979136488994863718e+00 +441 2200.00 8.01449520750485255860e+00 6.20488150179972497433e-01 1.04730164365317968134e+00 6.56477065216107047441e-01 1.01206514738684716370e+00 6.76103101683233620456e-01 8.66473616025595139156e-01 6.58600199019763299368e-01 1.07296390311016298647e+00 +442 2205.00 8.03930025583783880450e+00 6.22280094018980767245e-01 1.05039042113488978458e+00 6.58348137605208494350e-01 1.01512377831291078500e+00 6.78014469982971768047e-01 8.69212988821280396756e-01 6.60487838078537059516e-01 1.07613701886991908196e+00 +443 2210.00 8.06411126700101199560e+00 6.24072875387228664934e-01 1.05347990771804256305e+00 6.60219711751543369971e-01 1.01818345119492903450e+00 6.79926238652086456504e-01 8.71954146771219740231e-01 6.62376073174700263912e-01 1.07931070707007892295e+00 +444 2215.00 8.08892820609844420687e+00 6.25866493513627220047e-01 1.05657010141273044468e+00 6.62091785723243231310e-01 1.02124416204997769952e+00 6.81838405828148585996e-01 8.74697085189802936434e-01 6.64264902215741082081e-01 1.08248496266332527860e+00 +445 2220.00 8.11375103848294543241e+00 6.27660947625014231654e-01 1.05966100021868236958e+00 6.63964357589475917543e-01 1.02430590689098721668e+00 6.83750969654947970966e-01 8.77441799397638444447e-01 6.66154323110183743673e-01 1.08565978060234069602e+00 +446 2225.00 8.13857972977678834070e+00 6.29456236943046198995e-01 1.06275260219781131354e+00 6.65837425423554951642e-01 1.02736868172777850994e+00 6.85663928283528623098e-01 8.80188284722589142639e-01 6.68044333762407016586e-01 1.08883515591235680020e+00 +447 2230.00 8.16341424586135389063e+00 6.31252360688342117889e-01 1.06584490546385035614e+00 6.67710987301903147184e-01 1.03043248256809993890e+00 6.87577279869080570940e-01 8.82936536500810054129e-01 6.69934932080935241494e-01 1.09201108363933330203e+00 +448 2235.00 8.18825455284603265227e+00 6.33049318076339906369e-01 1.06893790814089784114e+00 6.69585041304052608346e-01 1.03349730541659012850e+00 6.89491022573012424246e-01 8.85686550079855416939e-01 6.71826115971183690512e-01 1.09518755884995777627e+00 +449 2240.00 8.21310061712004468859e+00 6.34847108319367747775e-01 1.07203160839450739594e+00 6.71459585512644729910e-01 1.03656314627166978859e+00 6.91405154563987323080e-01 8.88438320810389758897e-01 6.73717883337530798471e-01 1.09836457668346687555e+00 +450 2245.00 8.23795240531097938685e+00 6.36645730626644534844e-01 1.07512600443168948594e+00 6.73334618013429753169e-01 1.03963000114005099661e+00 6.93319674016887210755e-01 8.91191844053441428741e-01 6.75610232085391837487e-01 1.10154213227909680839e+00 +451 2250.00 8.26280988428480966945e+00 6.38445184206353322232e-01 1.07822109449054726049e+00 6.75210136895267654111e-01 1.04269786601082614652e+00 6.95234579109702988120e-01 8.93947115180402596124e-01 6.77503160119145686480e-01 1.10472022081754084333e+00 +452 2255.00 8.28767302116660431466e+00 6.40245468260458139298e-01 1.08131687685063981874e+00 6.77086140249090751020e-01 1.04576673686272436647e+00 6.97149868029753205789e-01 8.96704129566811669605e-01 6.79396665343170891305e-01 1.10789883754167650665e+00 +453 2260.00 8.31254178331980853045e+00 6.42046581988850340039e-01 1.08441334983298243166e+00 6.78962626169977379043e-01 1.04883660970556613634e+00 6.99065538968502431239e-01 8.99462882599606716738e-01 6.81290745661846219861e-01 1.11107797769438110258e+00 +454 2265.00 8.33741613834624217816e+00 6.43848524589348381042e-01 1.08751051176895496830e+00 6.80839592757151557123e-01 1.05190748050771643030e+00 7.00981590125706266470e-01 9.02223369671945052417e-01 6.83185398979550551068e-01 1.11425763658071708129e+00 +455 2270.00 8.36229605409646126191e+00 6.45651295255625368164e-01 1.09060836105212199953e+00 6.82717038110873031265e-01 1.05497934524790415445e+00 7.02898019703192877827e-01 9.04985586187347701426e-01 6.85080623198589755418e-01 1.11743780950574644883e+00 +456 2275.00 8.38718149862831197083e+00 6.47454893179281287807e-01 1.09370689608641158408e+00 6.84594960336584401617e-01 1.05805219991522148071e+00 7.04814825911082243337e-01 9.07749527556590551924e-01 6.86976416222305874548e-01 1.12061849185744377699e+00 +457 2280.00 8.41207244027945755249e+00 6.49259317546734382454e-01 1.09680611533793692658e+00 6.86473357540764439477e-01 1.06112604046766945132e+00 7.06732006967785153506e-01 9.10515189197704466473e-01 6.88872775956114069551e-01 1.12379967901342037173e+00 +458 2285.00 8.43696884757412668421e+00 6.51064567543366057301e-01 1.09990601727281123168e+00 6.88352227835073882112e-01 1.06420086287361281840e+00 7.08649561093785740340e-01 9.13282566539084572632e-01 6.90769700300247868618e-01 1.12698136641347157472e+00 +459 2290.00 8.46187068930600716499e+00 6.52870642352485153204e-01 1.10300660042969544961e+00 6.90231569334282646366e-01 1.06727666311177982195e+00 7.10567486516822444109e-01 9.16051655017416810445e-01 6.92667187160122210798e-01 1.13016354951812103558e+00 +460 2295.00 8.48677793446571548941e+00 6.54677541152218545051e-01 1.10610786334725230695e+00 6.92111380155233546496e-01 1.07035343711944297418e+00 7.12485781471888901528e-01 9.18822450075606034225e-01 6.94565234437006573387e-01 1.13334622381898464383e+00 +461 2300.00 8.51169055230295512615e+00 6.56485263119656714537e-01 1.10920980461596330180e+00 6.93991658418914858508e-01 1.07343118087533118121e+00 7.14404444199160715279e-01 9.21594947167957423417e-01 6.96463840035279391216e-01 1.13652938485949905889e+00 +462 2305.00 8.53660851226435823946e+00 6.58293807427744015470e-01 1.11231242284703912837e+00 6.95872402248388199908e-01 1.07650989030635235721e+00 7.16323472945031847203e-01 9.24369141754994627647e-01 6.98363001856210585672e-01 1.13971302820382858201e+00 +463 2310.00 8.56153178403492987059e+00 6.60103173248389074601e-01 1.11541571669314687476e+00 6.97753609771896488034e-01 1.07958956137050732238e+00 7.18242865961078558179e-01 9.27145029307605450519e-01 7.00262717804178591585e-01 1.14289714943686648851e+00 +464 2315.00 8.58646033750695636400e+00 6.61913359748318108622e-01 1.11851968483804542487e+00 6.99635279118719699554e-01 1.08267019001543207679e+00 7.20162621506131972460e-01 9.29922605303932447995e-01 7.02162985782525783662e-01 1.14608174420569008944e+00 +465 2320.00 8.61139414281109516480e+00 6.63724366093220830010e-01 1.12162432599658612453e+00 7.01517408424355948249e-01 1.08575177217839935473e+00 7.22082737844204625155e-01 9.32701865231445936821e-01 7.04063803692521861244e-01 1.14926680816774062777e+00 +466 2325.00 8.63633317027492708462e+00 6.65536191445677993705e-01 1.12472963892507693551e+00 7.03399995825339963140e-01 1.08883430378631684832e+00 7.24003213244492127565e-01 9.35482804584871097120e-01 7.05965169439581874400e-01 1.15245233702191685055e+00 +467 2330.00 8.66127739045403899354e+00 6.67348834966197457241e-01 1.12783562237982581955e+00 7.05283039462351935001e-01 1.09191778077645773593e+00 7.25924045985517185642e-01 9.38265418871370049381e-01 7.07867080924975189404e-01 1.15563832649820841247e+00 +468 2335.00 8.68622677412166765976e+00 6.69162295812177454479e-01 1.13094227520005308207e+00 7.07166537479181123160e-01 1.09500219906536533365e+00 7.27845234346838787509e-01 9.41049703601214204696e-01 7.09769536055153582588e-01 1.15882477236806247234e+00 +469 2340.00 8.71118129225832760199e+00 6.70976573137907705835e-01 1.13404959620425138667e+00 7.09050488023762692791e-01 1.09808755457994822180e+00 7.29766776619416690508e-01 9.43835654298148307717e-01 7.11672532731386198179e-01 1.16201167041328923268e+00 +470 2345.00 8.73614091604145137637e+00 6.72791666096641094441e-01 1.13715758427309809875e+00 7.10934889245068424302e-01 1.10117384324711431454e+00 7.31688671095247156195e-01 9.46623266492135129191e-01 7.13576068859088530338e-01 1.16519901646752033209e+00 +471 2350.00 8.76110561687648825568e+00 6.74607573836448204396e-01 1.14026623830799822557e+00 7.12819739298288124196e-01 1.10426106096267995227e+00 7.33610916076690156018e-01 9.49412535723502259977e-01 7.15480142341602731726e-01 1.16838680639547964901e+00 +472 2355.00 8.78607536635543162618e+00 6.76424295505400174910e-01 1.14337555725181339028e+00 7.14705036340684496388e-01 1.10734920364318889519e+00 7.35533509868179113944e-01 9.52203457538795317028e-01 7.17384751084343963434e-01 1.17157503609298241365e+00 +473 2360.00 8.81105013629829514343e+00 6.78241830247422128330e-01 1.14648554005776937004e+00 7.16590778533666261652e-01 1.11043826719482119358e+00 7.37456450783474104504e-01 9.54996027495960575493e-01 7.19289892992727497578e-01 1.17476370146620934243e+00 +474 2365.00 8.83602989872200161869e+00 6.80060177206439409048e-01 1.14959618572054833585e+00 7.18476964041750654211e-01 1.11352824752375711981e+00 7.39379737139445825100e-01 9.57790241161235234024e-01 7.21195565972168162183e-01 1.17795279849388889737e+00 +475 2370.00 8.86101462581967069809e+00 6.81879335522231455613e-01 1.15270749326592514272e+00 7.20363591031528582853e-01 1.11661914052581212609e+00 7.41303367261255230503e-01 9.60586094108112131806e-01 7.23101767927044947193e-01 1.18114232314438560856e+00 +476 2375.00 8.88600429002278957569e+00 6.83699304330432355847e-01 1.15581946176113015134e+00 7.22250657674772367223e-01 1.11971094208643862089e+00 7.43227339479245352472e-01 9.63383581921483544974e-01 7.25008496764845800087e-01 1.18433227145861241780e+00 +477 2380.00 8.91099886392867901463e+00 6.85520082767712590766e-01 1.15893209026303045661e+00 7.24138162146363950633e-01 1.12280364810145183441e+00 7.45151652128941854869e-01 9.66182700192461330069e-01 7.26915750390985770935e-01 1.18752263946711922316e+00 +478 2385.00 8.93599832035229546534e+00 6.87341669967632795668e-01 1.16204537790104134309e+00 7.26026102624294011889e-01 1.12589725444594024317e+00 7.47076303554161103015e-01 9.68983444523557113648e-01 7.28823526713989200410e-01 1.19071342326263973632e+00 +479 2390.00 8.96100263228479754218e+00 6.89164065058572639089e-01 1.16515932382530662537e+00 7.27914477290699579726e-01 1.12899175702608345340e+00 7.49001292101829307946e-01 9.71785810525573889862e-01 7.30731823641344035991e-01 1.19390461894827182299e+00 +480 2395.00 8.98601177293497777043e+00 6.90987267170983798792e-01 1.16827392717560618607e+00 7.29803284329789803131e-01 1.13208715169624074548e+00 7.50926616126126877937e-01 9.74589793815533456112e-01 7.32640639080538447203e-01 1.19709622267893367464e+00 +481 2400.00 9.01102571568782906297e+00 6.92811275430136097597e-01 1.17138918717463180741e+00 7.31692521930956352172e-01 1.13518343434186386176e+00 7.52852273987453135540e-01 9.77395390023930499268e-01 7.34549970941132834845e-01 1.20028823063027201279e+00 +482 2405.00 9.03604443410452518037e+00 6.94636088959226571937e-01 1.17450510304507660386e+00 7.33582188287736469690e-01 1.13828060084840521071e+00 7.54778264052425651442e-01 9.80202594786442449326e-01 7.36459817131651983679e-01 1.20348063899866186688e+00 +483 2410.00 9.06106790195352829187e+00 6.96461706881452258244e-01 1.17762167403036044355e+00 7.35472281593667065458e-01 1.14137864705985991876e+00 7.56704584692844295368e-01 9.83011403750146395275e-01 7.38370175562692909743e-01 1.20667344402193443820e+00 +484 2415.00 9.08609609320021682777e+00 6.98288128314828226983e-01 1.18073889941536092074e+00 7.37362800049540356717e-01 1.14447756886167972823e+00 7.58631234287763356328e-01 9.85821812571447408935e-01 7.40281044145889133290e-01 1.20986664196901316792e+00 +485 2420.00 9.11112898196542708718e+00 7.00115352378405719769e-01 1.18385677852641135743e+00 7.39253741857184731856e-01 1.14757736209785976556e+00 7.60558211219346858023e-01 9.88633816912969476398e-01 7.42192420789765217037e-01 1.21306022913991440326e+00 +486 2425.00 9.13616654257728022515e+00 7.01943378187090627485e-01 1.18697531067948069960e+00 7.41145105223610656253e-01 1.15067802265385243921e+00 7.62485513879086029831e-01 9.91447412448736575818e-01 7.44104303409063749797e-01 1.21625420185538124507e+00 +487 2430.00 9.16120874954009245528e+00 7.03772204853715832584e-01 1.19009449524235932927e+00 7.43036888359974390106e-01 1.15377954636328849958e+00 7.64413140663654844253e-01 9.94262594862100446136e-01 7.46016689915418473866e-01 1.21944855647761496442e+00 +488 2435.00 9.18625557752399579670e+00 7.05601831490077824327e-01 1.19321433161392875810e+00 7.44929089478467920671e-01 1.15688192910125620116e+00 7.66341089972835676214e-01 9.97079359843667911711e-01 7.47929578223572200102e-01 1.22264328938954403014e+00 +489 2440.00 9.21130700139604385868e+00 7.07432257204864023414e-01 1.19633481920343598404e+00 7.46821706796466533440e-01 1.15998516671175044834e+00 7.68269360216775498706e-01 9.99897703096482515228e-01 7.49842966246195063995e-01 1.22583839700518915095e+00 +490 2445.00 9.23636299620984679848e+00 7.09263481106761628503e-01 1.19945595745121869058e+00 7.48714738536526591695e-01 1.16308925503876681162e+00 7.70197949808730464305e-01 1.00271762032773348317e+00 7.51756851900102440744e-01 1.22903387578002831759e+00 +491 2450.00 9.26142353716411115272e+00 7.11095502299275872282e-01 1.20257774583907228738e+00 7.50608182921204791782e-01 1.16619418993666479345e+00 7.72126857169211477938e-01 1.00553910725912021285e+00 7.53671233100037363251e-01 1.23222972217990189847e+00 +492 2455.00 9.28648859965445971909e+00 7.12928319887984773828e-01 1.20570018385915589398e+00 7.52502038179276189211e-01 1.16929996724943996433e+00 7.74056080721838957182e-01 1.00836215961752317938e+00 7.55586107764888326166e-01 1.23542593270174516640e+00 +493 2460.00 9.31155815924234175895e+00 7.14761932973284386250e-01 1.20882327103472064778e+00 7.54396302543661412265e-01 1.17240658282108767274e+00 7.75985618900596807457e-01 1.01118677314226079744e+00 7.57501473810434422518e-01 1.23862250390467520944e+00 +494 2465.00 9.33663219166539626315e+00 7.16596340654534369463e-01 1.21194700689938206217e+00 7.56290974248317482420e-01 1.17551403250596719907e+00 7.77915470142578890922e-01 1.01401294357886917474e+00 7.59417329156600540152e-01 1.24181943232708258407e+00 +495 2470.00 9.36171067282708868618e+00 7.18431542031094272360e-01 1.21507139103857619844e+00 7.58186051534456839640e-01 1.17862231212734558383e+00 7.79845632891097095829e-01 1.01684066668428552127e+00 7.61333671723311677937e-01 1.24501671456954254857e+00 +496 2475.00 9.38679357880707065931e+00 7.20267536198178182083e-01 1.21819642304810282774e+00 7.60081532642254975585e-01 1.18173141753958299560e+00 7.81776105596718284829e-01 1.01966993822270168835e+00 7.63250499430492612696e-01 1.24821434725335755900e+00 +497 2480.00 9.41188088584046056440e+00 7.22104322248927066319e-01 1.22132210254449047326e+00 7.61977415820178749506e-01 1.18484134457631040682e+00 7.83706886713118611176e-01 1.02250075397074624561e+00 7.65167810202213916071e-01 1.25141232702055904547e+00 +498 2485.00 9.43697257034892800220e+00 7.23941899278554790165e-01 1.22444842917535945404e+00 7.63873699318767696020e-01 1.18795208908152294391e+00 7.85637974703301655843e-01 1.02533310971230307018e+00 7.67085601958400586931e-01 1.25461065056499898596e+00 +499 2490.00 9.46206860889923895286e+00 7.25780266375020688407e-01 1.22757540261942299509e+00 7.65770381390634247154e-01 1.19106364687848809147e+00 7.87569368034417127689e-01 1.02816700123851001436e+00 7.69003872625195761259e-01 1.25780931457016431629e+00 +500 2495.00 9.48716897821362437071e+00 7.27619422629393275415e-01 1.23070302257612151919e+00 7.67667460294609749205e-01 1.19417601381120119797e+00 7.89501065179832761665e-01 1.03100242435501598948e+00 7.70922620126669899676e-01 1.26100831579209193833e+00 +501 2500.00 9.51227365522158763156e+00 7.29459367128594604601e-01 1.23383128874489700344e+00 7.69564934291598112814e-01 1.19728918572365783390e+00 7.91433064618098369714e-01 1.03383937487161459146e+00 7.72841842388966693278e-01 1.26420765098681764371e+00 +502 2505.00 9.53738261695629141457e+00 7.31300098957475053219e-01 1.23696020088737435039e+00 7.71462801646648377307e-01 1.20040315844948897173e+00 7.93365364836055353415e-01 1.03667784860950051851e+00 7.74761537341338457630e-01 1.26740731693110664224e+00 +503 2510.00 9.56249584065816016221e+00 7.33141617201920503533e-01 1.24008975876517935077e+00 7.73361060628955820917e-01 1.20351792782232602796e+00 7.95297964321581396518e-01 1.03951784140644987176e+00 7.76681702909928661782e-01 1.27060731045354335933e+00 +504 2515.00 9.58761330369200415191e+00 7.34983920942635648998e-01 1.24321996217103047933e+00 7.75259709511861072606e-01 1.20663348967580064119e+00 7.97230861574991012120e-01 1.04235934909298566531e+00 7.78602337025026125517e-01 1.27380762840344119446e+00 +505 2520.00 9.61273498359880917974e+00 7.36827009261360799108e-01 1.24635081091837340850e+00 7.77158746570777880791e-01 1.20974983985390749375e+00 7.99164055096598491268e-01 1.04520236752346673548e+00 7.80523437618992788067e-01 1.27700826765084163306e+00 +506 2525.00 9.63786085806466807924e+00 7.38670881237763699012e-01 1.24948230484138256280e+00 7.79058170087338242027e-01 1.21286697419027866829e+00 8.01097543397082945127e-01 1.04804689255225325084e+00 7.82445002623153973431e-01 1.28020922509687840041e+00 +507 2530.00 9.66299090494149837127e+00 7.40515535948403358368e-01 1.25261444379496089674e+00 7.80957978344210435040e-01 1.21598488852890906919e+00 8.03031324989195383068e-01 1.05089292005443213363e+00 7.84367029971944407230e-01 1.28341049766341330773e+00 +508 2535.00 9.68812510222631217971e+00 7.42360972470874180829e-01 1.25574722767546687052e+00 7.82858169630281430784e-01 1.21910357870343011299e+00 8.04965398395015352406e-01 1.05374044590509163832e+00 7.86289517598761977801e-01 1.28661208231376478217e+00 +509 2540.00 9.71326342806121800777e+00 7.44207189879662389664e-01 1.25888065637925983253e+00 7.84758742236510875578e-01 1.22222304055783737020e+00 8.06899762139730802879e-01 1.05658946598968350727e+00 7.88212463441151034438e-01 1.28981397602161540483e+00 +510 2545.00 9.73840586076451586450e+00 7.46054187247180644604e-01 1.26201472982342677298e+00 7.86659694459040492731e-01 1.22534326994648989917e+00 8.08834414756821828973e-01 1.05943997621438756873e+00 7.90135865436654927230e-01 1.29301617580210348457e+00 +511 2550.00 9.76355237876851589363e+00 7.47901963646878442660e-01 1.26514944797687545197e+00 7.88561024597121407176e-01 1.22846426269265562858e+00 8.10769354783913653861e-01 1.06229197247501994106e+00 7.92059721523854509684e-01 1.29621867870146090240e+00 +512 2555.00 9.78870296068170908654e+00 7.49750518149095879217e-01 1.26828481080851385165e+00 7.90462730954150316620e-01 1.23158601467142170272e+00 8.12704580763813466682e-01 1.06514545068812460649e+00 7.93984029644438704665e-01 1.29942148176591865116e+00 +513 2560.00 9.81385758524732487729e+00 7.51599849821063648037e-01 1.27142081829761321998e+00 7.92364811836632654263e-01 1.23470852170605538412e+00 8.14640091247620157233e-01 1.06800040678060947918e+00 7.95908787739060819000e-01 1.30262458209352760541e+00 +514 2565.00 9.83901623136405056869e+00 7.53449957732086006423e-01 1.27455747045453837707e+00 7.94267265555220314255e-01 1.23783177966128055125e+00 8.16575884791614137193e-01 1.07085683670011144741e+00 7.97833993751483339096e-01 1.30582797680306850197e+00 +515 2570.00 9.86417887805494864040e+00 7.55300840948356588811e-01 1.27769476733110898259e+00 7.96170090424710430455e-01 1.24095578440182041646e+00 8.18511959955185552928e-01 1.07371473636317471545e+00 7.99759645626504589444e-01 1.30903166302368512142e+00 +516 2575.00 9.88934550450890093032e+00 7.57152498535034301774e-01 1.28083270897914647257e+00 7.98073284765081991665e-01 1.24408053176130639628e+00 8.20448315308088371722e-01 1.07657410175889167725e+00 8.01685741312032962291e-01 1.31223563794670572413e+00 +517 2580.00 9.91451609004952771897e+00 7.59004929555203822211e-01 1.28397129547119859261e+00 7.99976846897350712950e-01 1.24720601762519045508e+00 8.22384949422149458265e-01 1.07943492881417069107e+00 8.03612278753903286344e-01 1.31543989874273070662e+00 +518 2585.00 9.93969061413518240045e+00 7.60858133071950604176e-01 1.28711052691090710454e+00 8.01880775148750668535e-01 1.25033223784783209531e+00 8.24321860876450540623e-01 1.08229721352846852689e+00 8.05539255903132911385e-01 1.31864444264454561129e+00 +519 2590.00 9.96486905636931119545e+00 7.62712108146287093291e-01 1.29025040341227636986e+00 8.03785067848588719031e-01 1.25345918830431868329e+00 8.26259048257328210241e-01 1.08516095188051431286e+00 8.07466670710738965155e-01 1.32184926689529858024e+00 +520 2595.00 9.99005139650045492772e+00 7.64566853838189341985e-01 1.29339092511004083441e+00 8.05689723332390195232e-01 1.25658686485937454158e+00 8.28196510153191733927e-01 1.08802613985940044294e+00 8.09394521129811361781e-01 1.32505436876923177181e+00 +521 2600.00 1.00152376144015402559e+01 7.66422369205560505279e-01 1.29653209215966080947e+00 8.07594739937753214321e-01 1.25971526338808659240e+00 8.30134245161778250299e-01 1.09089277346458435325e+00 8.11322805115513023821e-01 1.32825974557167847401e+00 +522 2605.00 1.00404276900905706782e+01 7.68278653306303849213e-01 1.29967390475805522065e+00 8.09500116006421577275e-01 1.26284437978627139820e+00 8.32072251886007308030e-01 1.09376084870588652365e+00 8.13251520621970369618e-01 1.33146539460797264098e+00 +523 2610.00 1.00656216037306602828e+01 7.70135705198322195741e-01 1.30281636308141313130e+00 8.11405849884284768869e-01 1.26597420992901610326e+00 8.34010528932943140390e-01 1.09663036160349225412e+00 8.15180665608491783480e-01 1.33467131324563226258e+00 +524 2615.00 1.00908193355989261875e+01 7.71993523934337178005e-01 1.30595946735774481873e+00 8.13311939921377846652e-01 1.26910474972250097991e+00 8.35949074916905843224e-01 1.09950130819831493056e+00 8.17110238035422264957e-01 1.33787749884181161875e+00 +525 2620.00 1.01160208661175765599e+01 7.73852108571215224764e-01 1.30910321782542493629e+00 8.15218384471881551967e-01 1.27223599505217799255e+00 8.37887888457396812214e-01 1.10237368453126771684e+00 8.19040235862070309381e-01 1.34108394881584946923e+00 +526 2625.00 1.01412261758331947448e+01 7.75711458159605071749e-01 1.31224761474355600122e+00 8.17125181894122420978e-01 1.27536794181386259339e+00 8.39826968181172750505e-01 1.10524748663290028894e+00 8.20970657053962771244e-01 1.34429066056635648785e+00 +527 2630.00 1.01664352454374640189e+01 7.77571571751190959709e-01 1.31539265838160401856e+00 8.19032330548499221123e-01 1.27850058594482773877e+00 8.41766312718099429802e-01 1.10812271058558198256e+00 8.22901499575590000823e-01 1.34749763156449220425e+00 +528 2635.00 1.01916480557464268486e+01 7.79432448398694521785e-01 1.31853834902976441157e+00 8.20939828800593573987e-01 1.28163392333052450489e+00 8.43705920705297818252e-01 1.11099935245095426950e+00 8.24832761393515578874e-01 1.35070485927105110591e+00 +529 2640.00 1.02168645877005062061e+01 7.81294087150690930166e-01 1.32168468700932462134e+00 8.22847675022205016226e-01 1.28476794990822584808e+00 8.45645790786106688053e-01 1.11387740830102299761e+00 8.26764440475339035252e-01 1.35391234118828562849e+00 +530 2645.00 1.02420848223748510719e+01 7.83156487056792083301e-01 1.32483167264157097875e+00 8.24755867585133306541e-01 1.28790266160483946045e+00 8.47585921609047443503e-01 1.11675687422852232267e+00 8.28696534793842531919e-01 1.35712007483917496131e+00 +531 2650.00 1.02673087409586170082e+01 7.85019647163500922105e-01 1.32797930627888338684e+00 8.26664404868432955986e-01 1.29103805435763829834e+00 8.49526311828859514996e-01 1.11963774634691337617e+00 8.30629042319734556266e-01 1.36032805777779142176e+00 +532 2655.00 1.02925363247860595095e+01 7.86883566517319943401e-01 1.33112758829436939045e+00 8.28573285252194868811e-01 1.29417412411425791774e+00 8.51466960104428571832e-01 1.12252002073856638198e+00 8.32561961028906338811e-01 1.36353628755820732721e+00 +533 2660.00 1.03177675553054353230e+01 7.88748244165788148230e-01 1.33427651907150091048e+00 8.30482507122728530469e-01 1.29731086681197127497e+00 8.53407865102931095791e-01 1.12540369353767188976e+00 8.34495288897249221094e-01 1.36674476179667903075e+00 +534 2665.00 1.03430024140893728202e+01 7.90613679152299519970e-01 1.33742609900411335566e+00 8.32392068870489110211e-01 1.30044827841914290012e+00 8.55349025494652526191e-01 1.12828876086805562906e+00 8.36429023902726664907e-01 1.36995347809909939762e+00 +535 2670.00 1.03682408828556003044e+01 7.92479870521283213947e-01 1.34057632852749941677e+00 8.34301968889040956867e-01 1.30358635490413710123e+00 8.57290439959206840292e-01 1.13117521886390792751e+00 8.38363164026411866736e-01 1.37316243412318161887e+00 +536 2675.00 1.03934829433840238977e+01 7.94346817315096709322e-01 1.34372720805622325457e+00 8.36212205575057265783e-01 1.30672509224568300645e+00 8.59232107176207238197e-01 1.13406306366978304467e+00 8.40297707250414194213e-01 1.37637162751627406543e+00 +537 2680.00 1.04187285775581965908e+01 7.96214518577133323340e-01 1.34687873806703284352e+00 8.38122777330393975426e-01 1.30986448641214492383e+00 8.61174025837704304465e-01 1.13695229146132792408e+00 8.42232651559952638642e-01 1.37958105598791114232e+00 +538 2685.00 1.04439777676555056729e+01 7.98082973346640911494e-01 1.35003091902631333632e+00 8.40033682562088768186e-01 1.31300453341334399937e+00 8.63116194635748401609e-01 1.13984289838309660325e+00 8.44167994940245636215e-01 1.38279071724762636642e+00 +539 2690.00 1.04692304956424138140e+01 7.99952180665976397833e-01 1.35318375142117730547e+00 8.41944919679251668754e-01 1.31614522923837329316e+00 8.65058612271717763953e-01 1.14273488062109973562e+00 8.46103735380657751008e-01 1.38600060903604527240e+00 +540 2695.00 1.04944867438999480669e+01 8.01822139573351355679e-01 1.35633723574910169951e+00 8.43856487095139273791e-01 1.31928656991778159302e+00 8.67001277451135754504e-01 1.14562823435098426472e+00 8.48039870872626222464e-01 1.38921072910415799306e+00 +541 2700.00 1.05197464948091390369e+01 8.03692849106977136309e-01 1.35949137253865548480e+00 8.45768383229225872988e-01 1.32242855146139004496e+00 8.68944188885744983608e-01 1.14852295578985330593e+00 8.49976399408624239129e-01 1.39242107525477565311e+00 +542 2705.00 1.05450097309582950800e+01 8.05564308306101595214e-01 1.36264616233913593568e+00 8.47680606502022593318e-01 1.32557116989974788090e+00 8.70887345292469694513e-01 1.15141904112371729063e+00 8.51913318984235168330e-01 1.39563164528034344691e+00 +543 2710.00 1.05702764349357263285e+01 8.07436516206863297285e-01 1.36580160567911268465e+00 8.49593155341294981042e-01 1.32871442128413286277e+00 8.72830745394452489627e-01 1.15431648658004326613e+00 8.53850627596077882409e-01 1.39884243701476562727e+00 +544 2715.00 1.05955465895370259943e+01 8.09309471846437089582e-01 1.36895770314933939993e+00 8.51506028174809248554e-01 1.33185830166582186429e+00 8.74774387920018159370e-01 1.15721528836557085995e+00 8.55788323243880766356e-01 1.40205344832303646641e+00 +545 2720.00 1.06208201776614217238e+01 8.11183174260961870061e-01 1.37211445533020537368e+00 8.53419223438622198685e-01 1.33500280709609264740e+00 8.76718271602673571152e-01 1.16011544273885869316e+00 8.57726403929445213592e-01 1.40526467708051572281e+00 +546 2725.00 1.06460971822081535976e+01 8.13057622482430297772e-01 1.37527186282282887220e+00 8.55332739570864086787e-01 1.33814793367804329982e+00 8.78662395184216737931e-01 1.16301694592737447920e+00 8.59664867657682019164e-01 1.40847612118329013065e+00 +547 2730.00 1.06713775863873738814e+01 8.14932815548017441820e-01 1.37842992624905535948e+00 8.57246575012773792679e-01 1.34129367747331507132e+00 8.80606757408518681096e-01 1.16591979418967750526e+00 8.61603712433501200962e-01 1.41168777854817606432e+00 +548 2735.00 1.06966613733055986302e+01 8.16808752489716183298e-01 1.38158864623073185385e+00 8.59160728212845503649e-01 1.34444003460573391351e+00 8.82551357027741456562e-01 1.16882398379469121252e+00 8.63542936266995742045e-01 1.41489964712308102790e+00 +549 2740.00 1.07219485263802649655e+01 8.18685432341592411731e-01 1.38474802342079583717e+00 8.61075197619573184937e-01 1.34758700116803398217e+00 8.84496192797156854937e-01 1.17172951101133926421e+00 8.65482537169294463553e-01 1.41811172488700520944e+00 +550 2745.00 1.07472390290288100090e+01 8.20562854133566221826e-01 1.38790805849291443153e+00 8.62989981688705776186e-01 1.35073457328404145095e+00 8.86441263480327368285e-01 1.17463637212927340947e+00 8.67422513152562579819e-01 1.42132400981894946312e+00 +551 2750.00 1.07725328647723159747e+01 8.22441016899703503107e-01 1.39106875210002600696e+00 8.64905078880138011854e-01 1.35388274710867473338e+00 8.88386567845997676685e-01 1.17754456342778124345e+00 8.69362862232075039870e-01 1.42453649993936992679e+00 +552 2755.00 1.07978300171318579714e+01 8.24319919668887624020e-01 1.39423010495725319124e+00 8.66820487654800797550e-01 1.35703151878648808903e+00 8.90332104666021861838e-01 1.18045408121724282324e+00 8.71303582428288092565e-01 1.42774919326872340442e+00 +553 2760.00 1.08231304700430825960e+01 8.26199561472075516555e-01 1.39739211775899097034e+00 8.68736206480879680214e-01 1.36018088446203577746e+00 8.92277872720545484064e-01 1.18336492181840235993e+00 8.73244671760622370726e-01 1.43096208787928724782e+00 +554 2765.00 1.08484342073379895766e+01 8.28079941339186942351e-01 1.40055479122036263817e+00 8.70652233829670052501e-01 1.36333084034205676005e+00 8.94223870794895403513e-01 1.18627708154163924448e+00 8.75186128251607242667e-01 1.43417518183297421075e+00 +555 2770.00 1.08737412128485821938e+01 8.29961058299105824965e-01 1.40371812609794677229e+00 8.72568568175576042556e-01 1.36648138259183382637e+00 8.96170097678544830266e-01 1.18919055672842644000e+00 8.77127949927917760498e-01 1.43738847324351803891e+00 +556 2775.00 1.08990514708214263351e+01 8.31842911380715754888e-01 1.40688212312759541867e+00 8.74485207999220581776e-01 1.36963250742846942565e+00 8.98116552167185333566e-01 1.19210534372023535532e+00 8.79070134816228865304e-01 1.44060196021428810198e+00 +557 2780.00 1.09243649652958083607e+01 8.33725499610827869290e-01 1.41004678306588759895e+00 8.76402151784335337048e-01 1.37278421107943127133e+00 9.00063233063763012964e-01 1.19502143886890332958e+00 8.81012680948398130276e-01 1.44381564091083869350e+00 +558 2785.00 1.09496816805182888288e+01 8.35608822018325647640e-01 1.41321210670049479674e+00 8.78319398017761931996e-01 1.37593648977218663276e+00 9.02010139174333369638e-01 1.19793883852626614761e+00 8.82955586356282573490e-01 1.44702951348835928691e+00 +559 2790.00 1.09750016010463600225e+01 8.37492877630020227109e-01 1.41637809481908916176e+00 8.80236945191523401100e-01 1.37908933975493042112e+00 9.03957269311170708015e-01 1.20085753907525250028e+00 8.84898849075884896820e-01 1.45024357613313314985e+00 +560 2795.00 1.10003247111265878289e+01 8.39377665471685796561e-01 1.41954474821970633158e+00 8.82154791802824966851e-01 1.38224275728622214565e+00 9.05904622293803529764e-01 1.20377753688842714652e+00 8.86842467146317314786e-01 1.45345782704180548350e+00 +561 2800.00 1.10256509955237458342e+01 8.41263184569096877929e-01 1.42271206772111025174e+00 8.84072936349908578002e-01 1.38539673866607793151e+00 9.07852196944870071249e-01 1.20669882836944708515e+00 8.88786438607728102035e-01 1.45667226446284403529e+00 +562 2805.00 1.10509804388989572033e+01 8.43149433949064608385e-01 1.42588005416279317572e+00 8.85991377339307217831e-01 1.38855128017378492977e+00 9.09799992094263654252e-01 1.20962140991160449488e+00 8.90730761503375156884e-01 1.45988688662398735651e+00 +563 2810.00 1.10763130259133610878e+01 8.45036412635290279383e-01 1.42904870837388275895e+00 8.87910113278590040764e-01 1.39170637813008801764e+00 9.11748006576022174130e-01 1.21254527791855681862e+00 8.92675433879625113143e-01 1.46310169180479410223e+00 +564 2815.00 1.11016487414353672847e+01 8.46924119653548745923e-01 1.43221803122496438299e+00 8.89829142681545337545e-01 1.39486202885573051802e+00 9.13696239230403328690e-01 1.21547042882505307304e+00 8.94620453784917946116e-01 1.46631667830555234566e+00 +565 2820.00 1.11269875705406633415e+01 8.48812554027541521506e-01 1.43538802356589356712e+00 8.91748464064033408150e-01 1.39801822871291325789e+00 9.15644688904918568895e-01 1.21839685905547789879e+00 8.96565819270802588647e-01 1.46953184442654904984e+00 +566 2825.00 1.11523294983049510165e+01 8.50701714779933837463e-01 1.43855868628798311271e+00 8.93668075947097517719e-01 1.40117497405347268824e+00 9.17593354449153131291e-01 1.22132456504458097868e+00 8.98511528391937153160e-01 1.47274718849916386176e+00 +567 2830.00 1.11776745098039196336e+01 8.52591600936500104702e-01 1.44173002029291019710e+00 8.95587976856961898164e-01 1.40433226126033683379e+00 9.19542234719946449673e-01 1.22425354324783985938e+00 9.00457579204016145269e-01 1.47596270887550540252e+00 +568 2835.00 1.12030225903205504778e+01 8.54482211518869383404e-01 1.44490202647198739960e+00 8.97508165321924455959e-01 1.40749008672679898346e+00 9.21491328579320145842e-01 1.22718379012073142142e+00 9.02403969768952984865e-01 1.47917840393877297878e+00 +569 2840.00 1.12283737251378159527e+01 8.56373545550743076049e-01 1.44807470574761953941e+00 8.99428639877537738911e-01 1.41064844686688051212e+00 9.23440634896550704980e-01 1.23011530213946129741e+00 9.04350698146587639314e-01 1.48239427207216722948e+00 +570 2845.00 1.12537278998496166338e+01 8.58265602052713849623e-01 1.45124805904221187980e+00 9.01349399061426859170e-01 1.41380733812569370222e+00 9.25390152542987731721e-01 1.23304807578023534198e+00 9.06297762404015383453e-01 1.48561031168998081142e+00 +571 2850.00 1.12790850998425682405e+01 8.60158380048483217628e-01 1.45442208730926170190e+00 9.03270441414326663576e-01 1.41696675694835239057e+00 9.27339880398271643180e-01 1.23598210752962311965e+00 9.08245160608331159047e-01 1.48882652123759795515e+00 +572 2855.00 1.13044453108142128883e+01 8.62051878558643736028e-01 1.45759679150226606481e+00 9.05191765483189803021e-01 1.42012669981106243178e+00 9.29289817346188873337e-01 1.23891739389492250289e+00 9.10192890830775813704e-01 1.49204289916040422348e+00 +573 2860.00 1.13298085185657324558e+01 8.63946096605860414108e-01 1.46077217257472247169e+00 9.07113369819115278325e-01 1.42328716319002879231e+00 9.31239962275707822137e-01 1.24185393137306698819e+00 9.12140951145699596658e-01 1.49525944392451193288e+00 +574 2865.00 1.13551747086910239659e+01 8.65841033209689525663e-01 1.46394823150085628960e+00 9.09035252977347107972e-01 1.42644814360291372068e+00 9.33190314083051641880e-01 1.24479171648171926812e+00 9.14089339628488373179e-01 1.49847615403749112595e+00 +575 2870.00 1.13805438673021939167e+01 8.67736687391759797805e-01 1.46712496927562163762e+00 9.10957413515202540921e-01 1.42960963757774361937e+00 9.35140871667552664448e-01 1.24773074575926878893e+00 9.16038054358674580513e-01 1.50169302800691073507e+00 +576 2875.00 1.14059159802004188577e+01 8.69633058173700179694e-01 1.47030238689397196872e+00 9.12879849998289860658e-01 1.43277164166327231065e+00 9.37091633934762024971e-01 1.25067101574410610709e+00 9.17987093419935673566e-01 1.50491006436106844468e+00 +577 2880.00 1.14312910336014521562e+01 8.71530144574030107840e-01 1.47348048536122511187e+00 9.14802560992217461688e-01 1.43593415242898259088e+00 9.39042599796448884675e-01 1.25361252297462133498e+00 9.19936454896985944529e-01 1.50812726165935484524e+00 +578 2885.00 1.14566690137210329681e+01 8.73427945613342249231e-01 1.47665926570342675994e+00 9.16725545068812430749e-01 1.43909716644435659028e+00 9.40993768168528532669e-01 1.25655526402029682487e+00 9.21886136878684925300e-01 1.51134461846115897288e+00 +579 2890.00 1.14820499065676244754e+01 8.75326460312228826766e-01 1.47983872893625978406e+00 9.18648800805083376453e-01 1.44226068034106158500e+00 9.42945137974170566331e-01 1.25949923542988728720e+00 9.23836137455965489274e-01 1.51456213337769174387e+00 +580 2895.00 1.15074336987715426517e+01 8.77225687690246003214e-01 1.48301887611686145085e+00 9.20572326781148531083e-01 1.44542469073003676527e+00 9.44896708138617813511e-01 1.26244443380396709209e+00 9.25786454721832519077e-01 1.51777980500979903233e+00 +581 2900.00 1.15328203764448851132e+01 8.79125626765913215088e-01 1.48619970829200642726e+00 9.22496121581271588674e-01 1.44858919426367704908e+00 9.46848477595404136586e-01 1.26539085570165488193e+00 9.27737086776546759914e-01 1.52099763197905590850e+00 +582 2905.00 1.15582099263216040441e+01 8.81026276558786625159e-01 1.48938122651883309011e+00 9.24420183793862038080e-01 1.45175418762547026041e+00 9.48800445283245585948e-01 1.26833849774425311274e+00 9.29688031718295393446e-01 1.52421561293812946047e+00 +583 2910.00 1.15836023349283685491e+01 8.82927636089458789392e-01 1.49256343186484374819e+00 9.26344512011475051949e-01 1.45491966748854006930e+00 9.50752610145004006803e-01 1.27128735653233726488e+00 9.31639287650447789346e-01 1.52743374657077790602e+00 +584 2915.00 1.16089975889991290359e+01 8.84829704375412529060e-01 1.49574632541826924026e+00 9.28269104831847435833e-01 1.45808563057782958339e+00 9.52704971128723099305e-01 1.27423742866648215255e+00 9.33590852681555727344e-01 1.53065203154003248720e+00 +585 2920.00 1.16343956751641925962e+01 8.86732480435167835786e-01 1.49892990825697580703e+00 9.30193960857898738404e-01 1.46125207361828368668e+00 9.54657527188664922768e-01 1.27718871078871831770e+00 9.35542724919134149886e-01 1.53387046656074566009e+00 +586 2925.00 1.16597965803647944938e+01 8.88635963288280539274e-01 1.50211418150028652718e+00 9.32119078692547731180e-01 1.46441899338666692287e+00 9.56610277284273835541e-01 1.28014119953071348057e+00 9.37494902476916469602e-01 1.53708905035813137019e+00 +587 2930.00 1.16852002914385266763e+01 8.90540151954306802295e-01 1.50529914623643201743e+00 9.34044456948041723621e-01 1.46758638663901508359e+00 9.58563220380175939894e-01 1.28309489154486255913e+00 9.39447383471745833816e-01 1.54030778166777038152e+00 +588 2935.00 1.17106067954302606182e+01 8.92445045448656770759e-01 1.50848480360546344237e+00 9.35970094237663419179e-01 1.47075425018318539649e+00 9.60516355446179748157e-01 1.28604978346283260748e+00 9.41400166020464945760e-01 1.54352665926669829766e+00 +589 2940.00 1.17360160793848695704e+01 8.94350642792959393823e-01 1.51167115472670365861e+00 9.37895989179878264430e-01 1.47392258084776273108e+00 9.62469681457275405556e-01 1.28900587196811167168e+00 9.43353248247171372043e-01 1.54674568191122308036e+00 +590 2945.00 1.17614281305545098633e+01 8.96256943003661654679e-01 1.51485820072984012086e+00 9.39822140398333782940e-01 1.47709137548206004276e+00 9.64423197394672193639e-01 1.29196315373382297764e+00 9.45306628276999183491e-01 1.54996484840947323924e+00 +591 2950.00 1.17868429361913360509e+01 8.98163945098246485621e-01 1.51804594277565119143e+00 9.41748546518750062617e-01 1.48026063095611948306e+00 9.66376902243724189567e-01 1.29492162544345390529e+00 9.47260304238191741533e-01 1.55318415759030492573e+00 +592 2955.00 1.18122604834438664767e+01 9.00071648097306442615e-01 1.52123438201455307706e+00 9.43675206174102276790e-01 1.48343034415034602524e+00 9.68330794993931709413e-01 1.29788128379085643260e+00 9.49214274263138313437e-01 1.55640360826184709353e+00 +593 2960.00 1.18376807598751749850e+01 9.01980051017288397830e-01 1.52442351959696087427e+00 9.45602117998401769938e-01 1.48660051199696519042e+00 9.70284874643086103774e-01 1.30084212546988231551e+00 9.51168536487336568896e-01 1.55962319929441184385e+00 +594 2965.00 1.18631037528410576698e+01 9.03889152875675283560e-01 1.52761335671474562936e+00 9.47529280632914860938e-01 1.48977113141784012207e+00 9.72239140193124629086e-01 1.30380414720547554985e+00 9.53123089048357741149e-01 1.56284292955831283223e+00 +595 2970.00 1.18885294500082387970e+01 9.05798952692023484623e-01 1.53080389453905141295e+00 9.49456692722017159269e-01 1.49294219940738082109e+00 9.74193590649093277278e-01 1.30676734571221575543e+00 9.55077930087918747226e-01 1.56606279793422742408e+00 +596 2975.00 1.19139578390434337507e+01 9.07709449482779429097e-01 1.53399513426174971542e+00 9.51384352912156949778e-01 1.49611371291854111654e+00 9.76148225023293236724e-01 1.30973171772541152613e+00 9.57033057752917692973e-01 1.56928280332356018256e+00 +597 2980.00 1.19393889074060819411e+01 9.09620642267499390776e-01 1.53718707708507573706e+00 9.53312259859110278093e-01 1.49928566899755288944e+00 9.78103042334244277001e-01 1.31269725999073449962e+00 9.58988470189217401263e-01 1.57250294464844442288e+00 +598 2985.00 1.19648226430738251480e+01 9.11532530062630241829e-01 1.54037972420090185643e+00 9.55240412217617018698e-01 1.50245806465955489273e+00 9.80058041602538732029e-01 1.31566396925385720174e+00 9.60944165549934559145e-01 1.57572322086210681036e+00 +599 2990.00 1.19902590339206653880e+01 9.13445111886691418768e-01 1.54357307684255573577e+00 9.57168808649671465361e-01 1.50563089697150576107e+00 9.82013221856023910128e-01 1.31863184228118002217e+00 9.62900141991296254496e-01 1.57894363090740830202e+00 +600 2995.00 1.20156980677169631377e+01 9.15358386759238751296e-01 1.54676713621227324147e+00 9.59097447820377646543e-01 1.50880416302109399140e+00 9.83968582127729307629e-01 1.32160087584946750461e+00 9.64856397669528131900e-01 1.58216417376866691491e+00 +601 3000.00 1.20411397326476432568e+01 9.17272353695683051455e-01 1.54996190355374663383e+00 9.61026328401057394757e-01 1.51197785992709898828e+00 9.85924121454829549549e-01 1.32457106672512003875e+00 9.66812930748111809542e-01 1.58538484844056548617e+00 +602 3005.00 1.20665840165867059852e+01 9.19187011715580037929e-01 1.55315738010030379712e+00 9.62955449066142610270e-01 1.51515198481866453228e+00 9.87879838881754790414e-01 1.32754241170563047625e+00 9.68769739391564965736e-01 1.58860565392814989671e+00 +603 3010.00 1.20920309078227194988e+01 9.21102359837449369273e-01 1.55635356709563676958e+00 9.64884808492137313607e-01 1.51832653485602686594e+00 9.89835733455007860115e-01 1.33051490758849122464e+00 9.70726821769587355782e-01 1.59182658925719433540e+00 +604 3015.00 1.21174803945406051042e+01 9.23018397078774310849e-01 1.55955046578343803354e+00 9.66814405363837003904e-01 1.52150150723051513779e+00 9.91791804228346007832e-01 1.33348855119192322150e+00 9.72684176054987803539e-01 1.59504765347420218724e+00 +605 3020.00 1.21429324649252912138e+01 9.24935122459111025428e-01 1.56274807742812726907e+00 9.68744238367073573492e-01 1.52467689916454962606e+00 9.93748050260709003823e-01 1.33646333932378369447e+00 9.74641800421611637084e-01 1.59826884563603943690e+00 +606 3025.00 1.21683871074726202011e+01 9.26852534994906052113e-01 1.56594640330448986454e+00 9.70674306194934222169e-01 1.52785270788055171920e+00 9.95704470615181858051e-01 1.33943926882302144499e+00 9.76599693049522765698e-01 1.60149016483066586325e+00 +607 3030.00 1.21938443105748035578e+01 9.28770633705715442652e-01 1.56914544467694572205e+00 9.72604607541541765769e-01 1.53102893065276202123e+00 9.97661064360032323606e-01 1.34241633652858571857e+00 9.78557852121894167219e-01 1.60471161013567642506e+00 +608 3035.00 1.22193040627276854337e+01 9.30689417609022462408e-01 1.57234520283064327373e+00 9.74535141108274882704e-01 1.53420556476578662242e+00 9.99617830569745735581e-01 1.34539453926906138470e+00 9.80516275826044725328e-01 1.60793318068048618485e+00 +609 3040.00 1.22447663525307586241e+01 9.32608885725419778367e-01 1.57554567904036679771e+00 9.76465905598583816527e-01 1.53738260755605149477e+00 1.00157476832191716376e+00 1.34837387392485408277e+00 9.82474962349292879615e-01 1.61115487557378256334e+00 +610 3045.00 1.22702311684798655023e+01 9.34529037073426493976e-01 1.57874687461199370020e+00 9.78396899722138280175e-01 1.54056005634961845630e+00 1.00353187670139654131e+00 1.35135433735564092217e+00 9.84433909887248881354e-01 1.61437669397607330701e+00 +611 3050.00 1.22956984993817801666e+01 9.36449870670526207661e-01 1.58194879084103634526e+00 9.80328122190680661951e-01 1.54373790852436965082e+00 1.00548915479717959620e+00 1.35433592643146361034e+00 9.86393116636558819899e-01 1.61759863503750245251e+00 +612 3055.00 1.23211683340432731626e+01 9.38371385537311253344e-01 1.58515142903337125091e+00 9.82259571723207991489e-01 1.54691616147891575217e+00 1.00744660170240729613e+00 1.35731863804309171861e+00 9.88352580796978630318e-01 1.62082069793930583224e+00 +613 3060.00 1.23466406611674734961e+01 9.40293580692301178559e-01 1.58835479050523931122e+00 9.84191247039753691617e-01 1.55009481263259574213e+00 1.00940421651643896794e+00 1.36030246909165897229e+00 9.90312300573445658536e-01 1.62404288187308321056e+00 +614 3065.00 1.23721154697684347923e+01 9.42216455155052035053e-01 1.59155887657288164228e+00 9.86123146867605826493e-01 1.55327385943584039829e+00 1.01136199834381645957e+00 1.36328741647829909667e+00 9.92272274174007096192e-01 1.62726518605116332594e+00 +615 3070.00 1.23975927487565655838e+01 9.44140007945119985600e-01 1.59476368856290329212e+00 9.88055269936126023822e-01 1.55645329938053755825e+00 1.01331994629322741375e+00 1.36627347711450974899e+00 9.94232499809818537351e-01 1.63048760969623840467e+00 +616 3075.00 1.24230724872495628119e+01 9.46064238082060748880e-01 1.59796922779154448868e+00 9.89987614980893715355e-01 1.55963312995857439347e+00 1.01527805947854044000e+00 1.36926064793251733853e+00 9.96192975697218874309e-01 1.63371015205172920304e+00 +617 3080.00 1.24485546742614783255e+01 9.47989144586467102904e-01 1.60117549562686733999e+00 9.91920180740597956515e-01 1.56281334870329535747e+00 1.01723633701880755709e+00 1.37224892586454738641e+00 9.98153700053582393359e-01 1.63693281237142018725e+00 +618 3085.00 1.24740392989100072896e+01 9.49914726477894766354e-01 1.60438249337474814205e+00 9.93852965958072931407e-01 1.56599395317913603343e+00 1.01919477803826219464e+00 1.37523830784282630191e+00 1.00011467110250196200e+00 1.64015558992982457553e+00 +619 3090.00 1.24995263505201243959e+01 9.51840982776936517240e-01 1.60759022241361249073e+00 9.95785969381335567263e-01 1.56917494098162513261e+00 1.02115338166631941519e+00 1.37822879083067229011e+00 1.00207588707068007139e+00 1.64337848401181907398e+00 +620 3095.00 1.25250158184167990072e+01 9.53767912503147963221e-01 1.61079868408042936601e+00 9.97719189761511526804e-01 1.57235630971665574229e+00 1.02311214703654074221e+00 1.38122037179140377816e+00 1.00403734618689166602e+00 1.64660149393337329471e+00 +621 3100.00 1.25505076918213767101e+01 9.55695514679194779717e-01 1.61400787973289649990e+00 9.99652625855945053956e-01 1.57553805703157623341e+00 1.02507107328766911003e+00 1.38421304768833897114e+00 1.00599904668613038261e+00 1.64982461900009202971e+00 +622 3105.00 1.25760019601624684071e+01 9.57623788325668967580e-01 1.61721781074943837808e+00 1.00158627642405329006e+00 1.57872018059446417304e+00 1.02703015956362975203e+00 1.38720681550552460415e+00 1.00796098680649892643e+00 1.65304785855903735303e+00 +623 3110.00 1.26014986129723318697e+01 9.59552732463163304821e-01 1.62042847848775295461e+00 1.00352014023250823982e+00 1.58190267810448892405e+00 1.02898940501456670482e+00 1.39020167223737090012e+00 1.00992316478920973744e+00 1.65627121194690674066e+00 +624 3115.00 1.26269976397832230930e+01 9.61482346113306518554e-01 1.62363988432626604741e+00 1.00545421604798157489e+00 1.58508554728154793523e+00 1.03094880879269612528e+00 1.39319761488865312415e+00 1.01188557887858343598e+00 1.65949467855221799439e+00 +625 3120.00 1.26524990302310467172e+01 9.63412628297727446913e-01 1.62685202963303821022e+00 1.00738850264647306076e+00 1.58826878590772402333e+00 1.03290837005748947774e+00 1.39619464045378172123e+00 1.01384822732516011179e+00 1.66271825773239645407e+00 +626 3125.00 1.26780027738480551847e+01 9.65343578039091210208e-01 1.63006491581758750087e+00 1.00932299880501896716e+00 1.59145239173400732113e+00 1.03486808797152751715e+00 1.39919274596862375226e+00 1.01581110838051591472e+00 1.66594194889668933968e+00 +627 3130.00 1.27035088604774326626e+01 9.67275194359026868618e-01 1.63327854424797536126e+00 1.01125770330583741874e+00 1.59463636259430030506e+00 1.03682796170257307544e+00 1.40219192844831774813e+00 1.01777422030244513174e+00 1.66916575146470647084e+00 +628 3135.00 1.27290172797550731332e+01 9.69207476280199542451e-01 1.63649291631299154126e+00 1.01319261493529166884e+00 1.59782069632250589564e+00 1.03878799043186176299e+00 1.40519218493909536782e+00 1.01973756135081550234e+00 1.67238966484569395732e+00 +629 3140.00 1.27545280217314473958e+01 9.71140422825274796104e-01 1.63970803343251780859e+00 1.01512773248389165381e+00 1.60100539077325509929e+00 1.04074817332715641172e+00 1.40819351247682300610e+00 1.02170112979171245904e+00 1.67561368849035474682e+00 +630 3145.00 1.27800410761460856435e+01 9.73074033017953587965e-01 1.64292389700570740096e+00 1.01706305474836478098e+00 1.60419044386336362429e+00 1.04270850956969285406e+00 1.41119590812846085193e+00 1.02366492389225882675e+00 1.67883782185975483081e+00 +631 3150.00 1.28055564329458171358e+01 9.75008305880901815499e-01 1.64614050842135051234e+00 1.01899858052647540596e+00 1.60737585350964740094e+00 1.04466899836143567448e+00 1.41419936896096753998e+00 1.02562894192579512342e+00 1.68206206441496197712e+00 +632 3155.00 1.28310740821811037904e+01 9.76943240439893889615e-01 1.64935786910969239827e+00 1.02093430862220690969e+00 1.61056161766001371127e+00 1.04662963888362048337e+00 1.41720389204130281513e+00 1.02759318216773487542e+00 1.68528641564813463916e+00 +633 3160.00 1.28565940139024039723e+01 9.78878835715521922189e-01 1.65257598046988762874e+00 1.02287023784472275167e+00 1.61374773431419171743e+00 1.04859043033821164315e+00 1.42020947446751821808e+00 1.02955764289970974623e+00 1.68851087505143171441e+00 +634 3165.00 1.28821162183674662316e+01 9.80815090735633443586e-01 1.65579484394254539126e+00 1.02480636700629812452e+00 1.61693420146154531736e+00 1.05055137192717351624e+00 1.42321611331693720359e+00 1.03152232240542507391e+00 1.69173544215846916039e+00 +635 3170.00 1.29076406855231127224e+01 9.82752004522893685134e-01 1.65901446092682025579e+00 1.02674269492438852147e+00 1.62012101715362377696e+00 1.05251246285247002099e+00 1.42622380569797546634e+00 1.03348721897273088111e+00 1.69496011648213373846e+00 +636 3175.00 1.29331674057307264292e+01 9.84689576103077168767e-01 1.66223483286332118780e+00 1.02867922041852311033e+00 1.62330817945234029409e+00 1.05447370232642967380e+00 1.42923254871904870100e+00 1.03545233089466015564e+00 1.69818489756640533805e+00 +637 3180.00 1.29586963693516938889e+01 9.86627804500921801178e-01 1.66545596119265915114e+00 1.03061594231548525613e+00 1.62649568646106379433e+00 1.05643508958210885496e+00 1.43224233950930135428e+00 1.03741765646942729617e+00 1.70140978498635564442e+00 +638 3185.00 1.29842275665401185591e+01 9.88566688742202215323e-01 1.66867784732435198158e+00 1.03255285944516828067e+00 1.62968353629352780132e+00 1.05839662382147214892e+00 1.43525317520824069462e+00 1.03938319398799183801e+00 1.70463477829632803484e+00 +639 3190.00 1.30097609879683151490e+01 9.90506227853729326327e-01 1.67190049271973695255e+00 1.03448997064161041237e+00 1.63287172712565098465e+00 1.06035830427757526984e+00 1.43826505293464701474e+00 1.04134894177344272670e+00 1.70785987709212316865e+00 +640 3195.00 1.30352966237903782343e+01 9.92446420861277434078e-01 1.67512389880906109596e+00 1.03642727473885032374e+00 1.63606025711262348388e+00 1.06232013019383986219e+00 1.44127796984875655717e+00 1.04331489811570277126e+00 1.71108508095917688507e+00 +641 3200.00 1.30608344647822676166e+01 9.94387266792694068940e-01 1.67834806703293382135e+00 1.03836477059580101212e+00 1.63924912449254778224e+00 1.06428210078259333216e+00 1.44429192311080578648e+00 1.04528106133578768677e+00 1.71431038953474512709e+00 +642 3205.00 1.30863745013053573985e+01 9.96328764673753641823e-01 1.68157299885269395645e+00 1.04030245703820933834e+00 1.64243832748279805500e+00 1.06624421529762081207e+00 1.44730690988103027905e+00 1.04724742974434859022e+00 1.71753580244572079394e+00 +643 3210.00 1.31119167241356056053e+01 9.98270913532303350024e-01 1.68479869571931506478e+00 1.04224033292602391576e+00 1.64562786436293406744e+00 1.06820647298234261413e+00 1.45032292735075940548e+00 1.04921400167276579474e+00 1.72076131931899545258e+00 +644 3215.00 1.31374611238416800774e+01 1.00021371239722700608e+00 1.68802515907340788814e+00 1.04417839711919424595e+00 1.64881773343324344872e+00 1.07016887309054364863e+00 1.45333997269059311819e+00 1.05118077544205479334e+00 1.72398693981255468621e+00 +645 3220.00 1.31630076910958884184e+01 1.00215716029533541409e+00 1.69125239038667407598e+00 1.04611664847766916431e+00 1.65200793301474080366e+00 1.07213141486564489391e+00 1.45635804310222405356e+00 1.05314774938359501100e+00 1.72721266360511127580e+00 +646 3225.00 1.31885564168814610753e+01 1.00410125625758506196e+00 1.69448039109972437011e+00 1.04805508586139661809e+00 1.65519846146989890734e+00 1.07409409758215868003e+00 1.45937713578734529207e+00 1.05511492181840216276e+00 1.73043849037537711411e+00 +647 3230.00 1.32141072918707092043e+01 1.00604599931078730890e+00 1.69770916270498872791e+00 1.04999370814069048485e+00 1.65838931717155357859e+00 1.07605692049387013931e+00 1.46239724796837711196e+00 1.05708229109858442563e+00 1.73366441982279462231e+00 +648 3235.00 1.32396603069432217126e+01 1.00799138848486169451e+00 1.70093870664307766916e+00 1.05193251418586353196e+00 1.66158049853399769624e+00 1.07801988286492766989e+00 1.46541837685737652563e+00 1.05904985555552100251e+00 1.73689045165716793306e+00 +649 3240.00 1.32652154529785910597e+01 1.00993742281076492873e+00 1.70416902439605766340e+00 1.05387150288795661268e+00 1.66477200401298008892e+00 1.07998298398020864397e+00 1.46844051969749256337e+00 1.06101761354132007042e+00 1.74011658560903081927e+00 +650 3245.00 1.32907727210636892323e+01 1.01188410131841721729e+00 1.70740011742526709426e+00 1.05581067310691900651e+00 1.66796383205388476512e+00 1.08194622311422583572e+00 1.47146367372151032349e+00 1.06298556339772543033e+00 1.74334282139855267779e+00 +651 3250.00 1.33163321022853864406e+01 1.01383142303877504808e+00 1.71063198721277176517e+00 1.05775002374415594275e+00 1.67115598116428243358e+00 1.08390959954149201927e+00 1.47448783617257861422e+00 1.06495370348720919118e+00 1.74656915879772278721e+00 +652 3255.00 1.33418935875232804733e+01 1.01577938700279513107e+00 1.71386463521991072589e+00 1.05968955369070827466e+00 1.67434844988283382250e+00 1.08587311256761265277e+00 1.47751300432493937187e+00 1.06692203217224301781e+00 1.74979559754743929645e+00 +653 3260.00 1.33674571679678777514e+01 1.01772799224247023631e+00 1.71709806294947786576e+00 1.06162926182725314561e+00 1.67754123674820099232e+00 1.08783676145673657842e+00 1.48053917543210511454e+00 1.06889054780493508723e+00 1.75302213744041934795e+00 +654 3265.00 1.33930228349133386700e+01 1.01967723778875685170e+00 1.72033227186281245658e+00 1.06356914707592431490e+00 1.68073434035086610727e+00 1.08980054553519689620e+00 1.48356634678904608649e+00 1.07085924875812166235e+00 1.75624877826938163849e+00 +655 3270.00 1.34185905794465369922e+01 1.02162712267572075575e+00 1.72356726344198030176e+00 1.06550920831739825978e+00 1.68392775929167548554e+00 1.09176446407750682432e+00 1.48659451565963851571e+00 1.07282813340463833995e+00 1.75947551982704375462e+00 +656 3275.00 1.34441603928616206787e+01 1.02357764593431843636e+00 1.72680303917941180281e+00 1.06744944447380940566e+00 1.68712149222329665932e+00 1.09372851639963553083e+00 1.48962367935958117648e+00 1.07479720010695745103e+00 1.76270236192685203491e+00 +657 3280.00 1.34697322665563934407e+01 1.02552880660068868046e+00 1.73003960054680971936e+00 1.06938985444656209367e+00 1.69031553780875931636e+00 1.09569270181755240579e+00 1.49265383518384342487e+00 1.07676644726900727633e+00 1.76592930440298112593e+00 +658 3285.00 1.34953061918250050155e+01 1.02748060370682448017e+00 1.73327694905733298292e+00 1.07133043715779030514e+00 1.69350989474218782682e+00 1.09765701963686246323e+00 1.49568498043775877093e+00 1.07873587325326014685e+00 1.76915634709996871798e+00 +659 3290.00 1.35208821601688917724e+01 1.02943303628679139194e+00 1.73651508617231975506e+00 1.07327119153999128720e+00 1.69670456174879702438e+00 1.09962146918389946926e+00 1.49871711245775318666e+00 1.08070547646364434335e+00 1.77238348986235427773e+00 +660 3295.00 1.35464601629858556464e+01 1.03138610337672775863e+00 1.73975401340492830116e+00 1.07521211649457071324e+00 1.69989953758489487079e+00 1.10158604977463259189e+00 1.50175022856988871212e+00 1.08267525528335961660e+00 1.77561073256576795742e+00 +661 3300.00 1.35720401916736879144e+01 1.03333980401173630703e+00 1.74299373222686182494e+00 1.07715321096438998438e+00 1.70309482101715348179e+00 1.10355076073539515313e+00 1.50478432611059087520e+00 1.08464520811633491348e+00 1.77883807508584057544e+00 +662 3305.00 1.35976222379411080254e+01 1.03529413722691887578e+00 1.74623424415127859177e+00 1.07909447388194656980e+00 1.70629041085370136699e+00 1.10551560141324878295e+00 1.50781940243701484405e+00 1.08661533335613436080e+00 1.78206551731893148016e+00 +663 3310.00 1.36232062933931956650e+01 1.03724910205426845700e+00 1.74947555066024507120e+00 1.08103590419010253676e+00 1.70948630594412276373e+00 1.10748057112416287140e+00 1.51085545489594941237e+00 1.08858562941705039329e+00 1.78529305916139890975e+00 +664 3315.00 1.36487923495313854261e+01 1.03920469754961541931e+00 1.75271765326691997267e+00 1.08297750082135513239e+00 1.71268250512763886562e+00 1.10944566922556320243e+00 1.51389248086527805626e+00 1.09055609470301151376e+00 1.78852070053033096464e+00 +665 3320.00 1.36743803982716816137e+01 1.04116092271593330132e+00 1.75596055344300605583e+00 1.08491926272892991179e+00 1.71587900731601883386e+00 1.11141089506451140601e+00 1.51693047771251832145e+00 1.09252672763867408889e+00 1.79174844135317834493e+00 +666 3325.00 1.36999704311155188208e+01 1.04311777662045290782e+00 1.75920425271202618411e+00 1.08686118885568916426e+00 1.71907581141066811981e+00 1.11337624797770473606e+00 1.51996944281555301792e+00 1.09449752662796706559e+00 1.79497628157812094685e+00 +667 3330.00 1.37255624398752562598e+01 1.04507525829931302574e+00 1.76244875256641031491e+00 1.08880327816522237683e+00 1.72227291636481205650e+00 1.11534172733293335256e+00 1.52300937358335675142e+00 1.09646849011627467441e+00 1.79820422115333777846e+00 +668 3335.00 1.37511564165705379992e+01 1.04703336677828784396e+00 1.76569405449858973789e+00 1.09074552962111948062e+00 1.72547032114204101916e+00 1.11730733247725866342e+00 1.52605026741453997374e+00 1.09843961650752586223e+00 1.80143226004773682192e+00 +669 3340.00 1.37767523528064437244e+01 1.04899210109351637144e+00 1.76894016002172316249e+00 1.09268794217660647483e+00 1.72866802474740066664e+00 1.11927306278883453849e+00 1.52909212170771358075e+00 1.10041090425746923565e+00 1.80466039823022583732e+00 +670 3345.00 1.38023502407062519381e+01 1.05095146030186459285e+00 1.77218707063860470008e+00 1.09463051479527262444e+00 1.73186602619630236610e+00 1.12123891761472282980e+00 1.53213493390294419605e+00 1.10238235179076093928e+00 1.80788863569044089274e+00 +671 3350.00 1.38279500720823236293e+01 1.05291144342910780729e+00 1.77543478784166541828e+00 1.09657324647180076660e+00 1.73506432454561165812e+00 1.12320489635380549309e+00 1.53517870140920664745e+00 1.10435395755278675800e+00 1.81111697243874525398e+00 +672 3355.00 1.38535518390579444059e+01 1.05487204952174851158e+00 1.77868331314406424859e+00 1.09851613615941645641e+00 1.73826291886256045771e+00 1.12517099835314438039e+00 1.53822342166656822471e+00 1.10632571998893114440e+00 1.81434540847514003126e+00 +673 3360.00 1.38791555334454734805e+01 1.05683327762628920254e+00 1.78193264804859485828e+00 1.10045918285280186488e+00 1.74146180826619967341e+00 1.12713722302198537939e+00 1.54126909213582341529e+00 1.10829763755494270505e+00 1.81757394384108095231e+00 +674 3365.00 1.39047611475754724353e+01 1.05879512677886822303e+00 1.78518279405805357918e+00 1.10240238552591085508e+00 1.74466099187558065786e+00 1.12910356972811842802e+00 1.54431571025704017508e+00 1.11026970869620611460e+00 1.82080257855729610306e+00 +675 3370.00 1.39303686734675888914e+01 1.06075759602598895803e+00 1.78843375267523363448e+00 1.10434574318378952995e+00 1.74786046885121182370e+00 1.13107003786006177215e+00 1.54736327350137670145e+00 1.11224193188919939779e+00 1.82403131266524254350e+00 +676 3375.00 1.39559781032451031280e+01 1.06272068439342515234e+00 1.79168552542365833169e+00 1.10628925481075657267e+00 1.75106023837432855927e+00 1.13303662682706152154e+00 1.55041177932962903618e+00 1.11421430557930656313e+00 1.82726014624783239526e+00 +677 3380.00 1.39815894292385802800e+01 1.06468439094840849890e+00 1.79493811378539458445e+00 1.10823291940149371015e+00 1.75426029964689500495e+00 1.13500333600727132399e+00 1.55346122523368435075e+00 1.11618682824300474721e+00 1.83048907934652249629e+00 +678 3385.00 1.40072026434676626394e+01 1.06664871472707689648e+00 1.79819151928396459006e+00 1.11017673597141164343e+00 1.75746065191233191705e+00 1.13697016482030188733e+00 1.55651160870543048276e+00 1.11815949835677175273e+00 1.83371811207531787424e+00 +679 3390.00 1.40328177384701966446e+01 1.06861365476556913201e+00 1.80144574341179986021e+00 1.11212070350482794545e+00 1.76066129441406027389e+00 1.13893711266503538937e+00 1.55956292722639022763e+00 1.12013231440744820411e+00 1.83694724449640300890e+00 +680 3395.00 1.40584347063694661273e+01 1.07057921011038792436e+00 1.80470078769242237016e+00 1.11406482103788184723e+00 1.76386222644732093556e+00 1.14090417895071749577e+00 1.56261517831954388491e+00 1.12210527486114686191e+00 1.84017647673414708187e+00 +681 3400.00 1.40840535397033157494e+01 1.07254537981840036842e+00 1.80795665361826318751e+00 1.11600908757561900764e+00 1.76706344731771847201e+00 1.14287136309695913639e+00 1.56566835949750671197e+00 1.12407837821507383680e+00 1.84340580889219163296e+00 +682 3405.00 1.41096742306986762117e+01 1.07451216292574436295e+00 1.81121334270248079967e+00 1.11795350213345012769e+00 1.77026495635158753750e+00 1.14483866452337035291e+00 1.56872246827289507642e+00 1.12605162295606975320e+00 1.84663524110526910960e+00 +683 3410.00 1.41352967719970248339e+01 1.07647955848928700284e+00 1.81447085644786998415e+00 1.11989806374751377227e+00 1.77346675291671695973e+00 1.14680608264956185316e+00 1.57177750218941625349e+00 1.12802500759170398759e+00 1.84986477351847744544e+00 +684 3415.00 1.41609211559289391857e+01 1.07844756554516729707e+00 1.81772919636758989448e+00 1.12184277142285626638e+00 1.77666883639126127470e+00 1.14877361691587132064e+00 1.57483345878041469668e+00 1.12999853061918242858e+00 1.85309440625618604415e+00 +685 3420.00 1.41865473750322586000e+01 1.08041618313988729838e+00 1.82098836396443419794e+00 1.12378762421634426083e+00 1.77987120617410221612e+00 1.15074126673154597533e+00 1.57789033559996205724e+00 1.13197219053570985459e+00 1.85632413950494812305e+00 +686 3425.00 1.42121754219484710546e+01 1.08238541033031432370e+00 1.82424836073083485033e+00 1.12573262115375238857e+00 1.78307386170557857774e+00 1.15270903155765180870e+00 1.58094813021249525065e+00 1.13394598586958439412e+00 1.85955397340986183785e+00 +687 3430.00 1.42378052892154247644e+01 1.08435524616295064781e+00 1.82750918819031382689e+00 1.12767776128158336846e+00 1.78627680243639286317e+00 1.15467691081379952855e+00 1.58400684017208548404e+00 1.13591991511801082559e+00 1.86278390817820826975e+00 +688 3435.00 1.42634369695782527998e+01 1.08632568969466314357e+00 1.83077084783530175116e+00 1.12962304363597532131e+00 1.78948002783797588400e+00 1.15664490396105557046e+00 1.58706646305353338278e+00 1.13789397681965098741e+00 1.86601394397581432649e+00 +689 3440.00 1.42890704554711582830e+01 1.08829673995122644392e+00 1.83403334116859384473e+00 1.13156846726343163212e+00 1.79268353742321484567e+00 1.15861301043975917224e+00 1.59012699645236810220e+00 1.13986816948207470013e+00 1.86924408103068895315e+00 +690 3445.00 1.43147057398465502587e+01 1.09026839601023528559e+00 1.83729666970334815090e+00 1.13351403123118266159e+00 1.79588733069463324377e+00 1.16058122970061217138e+00 1.59318843795375331140e+00 1.14184249165430751205e+00 1.87247431953975085328e+00 +691 3450.00 1.43403428153459167049e+01 1.09224065691819305357e+00 1.84056083493199595935e+00 1.13545973459609528255e+00 1.79909140722730231943e+00 1.16254956120468166958e+00 1.59625078515321772166e+00 1.14381694185428273158e+00 1.87570465973101008217e+00 +692 3455.00 1.43659816748180304558e+01 1.09421352171123742458e+00 1.84382583835733115940e+00 1.13740557640467243594e+00 1.80229576656520196209e+00 1.16451800442339847841e+00 1.59931403565665375410e+00 1.14579151863102657316e+00 1.87893510184284084907e+00 +693 3460.00 1.43916223110080228054e+01 1.09618698944623571556e+00 1.84709168148214919469e+00 1.13935155574487323449e+00 1.80550040831449654100e+00 1.16648655880746487945e+00 1.60237818710104673592e+00 1.14776622052320043110e+00 1.88216564611361736326e+00 +694 3465.00 1.44172647168682992458e+01 1.09816105919041873129e+00 1.85035836581960855263e+00 1.14129767167356388491e+00 1.80870533208134975922e+00 1.16845522382831235042e+00 1.60544323709228931030e+00 1.14974104607983051984e+00 1.88539629280244258602e+00 +695 3470.00 1.44429088851439910712e+01 1.10013572999028874655e+00 1.85362589284141154877e+00 1.14324392326834001210e+00 1.81191053750301844794e+00 1.17042399895737148086e+00 1.60850918326736569419e+00 1.15171599387067047360e+00 1.88862704217878252244e+00 +696 3475.00 1.44685548089947957351e+01 1.10211100089234892430e+00 1.85689426406071689257e+00 1.14519030960679635278e+00 1.81511602423748685808e+00 1.17239288368680094621e+00 1.61157602327362536876e+00 1.15369106243438213077e+00 1.89185789451210473189e+00 +697 3480.00 1.44942024811658356498e+01 1.10408687095346613738e+00 1.86016348096995565164e+00 1.14713682977689201969e+00 1.81832179197383236868e+00 1.17436187747766784817e+00 1.61464375475841803720e+00 1.15566625034071956968e+00 1.89508885009260308330e+00 +698 3485.00 1.45198518948168082687e+01 1.10606333924087096854e+00 1.86343354507192149327e+00 1.14908348286658590354e+00 1.82152784039076798273e+00 1.17633097983249546026e+00 1.61771237537945555829e+00 1.15764155616980124464e+00 1.89831990921047299992e+00 +699 3490.00 1.45455030429001244130e+01 1.10804040480106613664e+00 1.86670445784868177519e+00 1.15103026796383756114e+00 1.82473416922919051686e+00 1.17830019024344223588e+00 1.62078188280481572114e+00 1.15961697848101663588e+00 1.90155107217663732477e+00 +700 3495.00 1.45711559184718328908e+01 1.11001806668055458260e+00 1.86997622080303127490e+00 1.15297718416696959309e+00 1.82794077821963374397e+00 1.18026950818193965276e+00 1.62385227470257609284e+00 1.16159251585448375366e+00 1.90478233931238327692e+00 +701 3500.00 1.45968105146916311554e+01 1.11199632395693082110e+00 1.87324883541703579581e+00 1.15492423058466986419e+00 1.83114766713408738674e+00 1.18223893317123884827e+00 1.62692354877190559215e+00 1.16356816687032127433e+00 1.90801371093899807541e+00 +702 3505.00 1.46224668247192095549e+01 1.11397517567669801508e+00 1.87652230318312618351e+00 1.15687140630489748716e+00 1.83435483573417745795e+00 1.18420846469313434390e+00 1.62999570269124616217e+00 1.16554393012937507201e+00 1.91124518738813220509e+00 +703 3510.00 1.46481248417142619900e+01 1.11595462089672259332e+00 1.87979662559373328357e+00 1.15881871043633899454e+00 1.83756228384371333995e+00 1.18617810226051423328e+00 1.63306873415976672170e+00 1.16751980422212753297e+00 1.91447676900180208115e+00 +704 3515.00 1.46737845589401239010e+01 1.11793465868423580467e+00 1.88307180414128749746e+00 1.16076614211877471305e+00 1.84077001127614203746e+00 1.18814784538626483368e+00 1.63614264089736516361e+00 1.16949578772869666743e+00 1.91770845615311502641e+00 +705 3520.00 1.46994459694528476490e+01 1.11991528809610407791e+00 1.88634784028712698678e+00 1.16271370044016331136e+00 1.84397801786563753090e+00 1.19011769358327401669e+00 1.63921742060321129486e+00 1.17147187927065732360e+00 1.92094024920481420970e+00 +706 3525.00 1.47251090667230482012e+01 1.12189650817883057599e+00 1.88962473554441046097e+00 1.16466138452992051810e+00 1.84718630347746670672e+00 1.19208764637479269766e+00 1.64229307101793065016e+00 1.17344807744885559764e+00 1.92417214850927931202e+00 +707 3530.00 1.47507738440140592218e+01 1.12387831801000981358e+00 1.89290249137447652572e+00 1.16660919352782599390e+00 1.85039486799762453728e+00 1.19405770326334437215e+00 1.64536958986142134442e+00 1.17542438088486611569e+00 1.92740415448107427210e+00 +708 3535.00 1.47764402946928523619e+01 1.12586071664650844149e+00 1.89618110925939165057e+00 1.16855712654256671534e+00 1.85360371131210555085e+00 1.19602786379290848551e+00 1.64844697488467351043e+00 1.17740078817953497392e+00 1.93063626749330730092e+00 +709 3540.00 1.48021084120227701675e+01 1.12784370314519377665e+00 1.89946059068122186098e+00 1.17050518272428694111e+00 1.85681283333799695967e+00 1.19799812747637246524e+00 1.65152522382831246084e+00 1.17937729796480139655e+00 1.93386848796054167110e+00 +710 3545.00 1.48277781894744258295e+01 1.12982727656293246987e+00 1.90274093711167013865e+00 1.17245336121276566566e+00 1.86002223400275057408e+00 1.19996849386807924454e+00 1.65460433445369270444e+00 1.18135390886223912155e+00 1.93710081629734198749e+00 +711 3550.00 1.48534496205184307627e+01 1.13181143598768318981e+00 1.90602215003280228700e+00 1.17440166113741861764e+00 1.86323191327527371008e+00 1.20193896248091713908e+00 1.65768430451180415197e+00 1.18333061951415152713e+00 1.94033325291827174475e+00 +712 3555.00 1.48791226987290485795e+01 1.13379618045558494543e+00 1.90930423090595691171e+00 1.17635008164838961164e+00 1.86644187110374559779e+00 1.20390953287959301399e+00 1.66076513179509333007e+00 1.18530742855247694933e+00 1.94356579825862363364e+00 +713 3560.00 1.49047974173696111677e+01 1.13578150904423269552e+00 1.91258718120283677244e+00 1.17829862190618617213e+00 1.86965210747780252731e+00 1.20588020458735822871e+00 1.66384681406491452549e+00 1.18728433461951810024e+00 1.94679845276405405485e+00 +714 3565.00 1.49304737701180147980e+01 1.13776742082085746688e+00 1.91587100240550789465e+00 1.18024728105058818173e+00 1.87286262239744449865e+00 1.20785097716892142472e+00 1.66692934913444190670e+00 1.18926133636794228998e+00 1.95003121686985458894e+00 +715 3570.00 1.49561517505485195301e+01 1.13975391484232568828e+00 1.91915569595458035401e+00 1.18219605826283147287e+00 1.87607341589376375168e+00 1.20982185016826115920e+00 1.67001273477539435852e+00 1.19123843244005134245e+00 1.95326409106313914066e+00 +716 3575.00 1.49818313522353818712e+01 1.14174099018623254054e+00 1.92244126333212084212e+00 1.18414495268269570616e+00 1.87928448797712444041e+00 1.21179282315008540749e+00 1.67309696880094582738e+00 1.19321562149887694382e+00 1.95649707577919906853e+00 +717 3580.00 1.50075125688564963156e+01 1.14372864590944467444e+00 1.92572770598910292250e+00 1.18609396349141693605e+00 1.88249583870971060051e+00 1.21376389565837405904e+00 1.67618204902427159197e+00 1.19519290220744989206e+00 1.95973017152587547507e+00 +718 3585.00 1.50331953939861264757e+01 1.14571688107919311683e+00 1.92901502538686608901e+00 1.18804308985986706304e+00 1.88570746816407197599e+00 1.21573506727856339715e+00 1.67926797326890975270e+00 1.19717027322880076312e+00 1.96296337876955306889e+00 +719 3590.00 1.50588798214058066094e+01 1.14770569476270867249e+00 1.93230322298674717096e+00 1.18999233096928169751e+00 1.88891937640239238050e+00 1.21770633755463175696e+00 1.68235473935839996429e+00 1.19914773324668932908e+00 1.96619669801807273046e+00 +720 3595.00 1.50845658446897967764e+01 1.14969508603758630017e+00 1.93559230022935757631e+00 1.19194168599053340607e+00 1.89213156351794897780e+00 1.21967770607201608790e+00 1.68544234512664403702e+00 1.20112528092414594383e+00 1.96943012976891163035e+00 +721 3600.00 1.51102534578269143140e+01 1.15168505397105724875e+00 1.93888225856567042449e+00 1.19389115410485757707e+00 1.89534402963511117157e+00 1.22164917240578763113e+00 1.68853078842827364348e+00 1.20310291496565846536e+00 1.97266367452991020492e+00 +722 3605.00 1.51359426543914246110e+01 1.15367559761998772494e+00 1.94217309945702454321e+00 1.19584073451421879497e+00 1.89855677486788332331e+00 1.22362073613101873804e+00 1.69162006709719148212e+00 1.20508063403425746962e+00 1.97589733284000179658e+00 +723 3610.00 1.51616334283721414522e+01 1.15566671607233728558e+00 1.94546482434403023021e+00 1.19779042639985333629e+00 1.90176979935099987884e+00 1.22559239683314502578e+00 1.69471017900875642326e+00 1.20705843683443037051e+00 1.97913110521739188385e+00 +724 3615.00 1.51873257734469628843e+01 1.15765840838497235943e+00 1.94875743466729667297e+00 1.19974022896372467528e+00 1.90498310322955743956e+00 1.22756415409760277768e+00 1.69780112201760036150e+00 1.20903632206030042795e+00 1.98236499221137774107e+00 +725 3620.00 1.52130196836047169029e+01 1.15965067364585228127e+00 1.95205093186743461331e+00 1.20169014139743302039e+00 1.90819668666938202506e+00 1.22953600750982761092e+00 1.70089289400944565500e+00 1.21101428842671898778e+00 1.98559899435052833461e+00 +726 3625.00 1.52387151526269359891e+01 1.16164351091184392395e+00 1.95534531737469019497e+00 1.20364016292367126404e+00 1.91141054984666292071e+00 1.23150795666561974073e+00 1.70398549285965228428e+00 1.21299233462780953197e+00 1.98883311221523340073e+00 +727 3630.00 1.52644121746060843492e+01 1.16363691926054202419e+00 1.95864059262967282748e+00 1.20559029274440354662e+00 1.91462469295831860805e+00 1.23348000116077916033e+00 1.70707891646430742760e+00 1.21497045937842340635e+00 1.99206734635478999174e+00 +728 3635.00 1.52901107433237051225e+01 1.16563089775917760882e+00 1.96193675906262909869e+00 1.20754053007195794045e+00 1.91783911618053815040e+00 1.23545214061183417087e+00 1.71017316270913455334e+00 1.21694866141414004268e+00 1.99530169734958828798e+00 +729 3640.00 1.53158108528722554098e+01 1.16762544549570979058e+00 1.96523381810380470824e+00 1.20949087411866273989e+00 1.92105381974133271328e+00 1.23742437459385667964e+00 1.71326822952131307964e+00 1.21892693943944707691e+00 1.99853616576965342766e+00 +730 3645.00 1.53415124973441976408e+01 1.16962056153736915221e+00 1.96853177117308164590e+00 1.21144132411757432521e+00 1.92426880386871146378e+00 1.23939670274410285167e+00 1.71636411478656669694e+00 1.22090529218992394078e+00 2.00177075222646783104e+00 +731 3650.00 1.53672156706247164948e+01 1.17161624496175131860e+00 1.97183061970070516722e+00 1.21339187929138558886e+00 1.92748406876995703740e+00 1.24136912465837334629e+00 1.71946081644243942144e+00 1.22288371840115095424e+00 2.00500545731078538836e+00 +732 3655.00 1.53929203668062690724e+01 1.17361249484645080443e+00 1.97513036509619444026e+00 1.21534253885242438109e+00 1.93069961471453632740e+00 1.24334163995319557650e+00 1.72255833242647415915e+00 1.22486221680870666084e+00 2.00824028161335865761e+00 +733 3660.00 1.54186265800849628960e+01 1.17560931025869841449e+00 1.97843100877942990046e+00 1.21729330206483998822e+00 1.93391544194082287689e+00 1.24531424824509850957e+00 1.72565666065548795061e+00 1.22684078616889946645e+00 2.01147522576639969927e+00 +734 3665.00 1.54443343045532603952e+01 1.17760669028645348355e+00 1.98173255215993049383e+00 1.21924416814096003847e+00 1.93713155071828402320e+00 1.24728694916097415657e+00 1.72875579907738785579e+00 1.22881942520694509291e+00 2.01471029039175242303e+00 +735 3670.00 1.54700435344072602106e+01 1.17960463399694659437e+00 1.98503499665757732195e+00 1.22119513634493381815e+00 1.94034794131638599346e+00 1.24925974233807912661e+00 1.73185574565044575479e+00 1.23079813271024374188e+00 2.01794547611126473541e+00 +736 3675.00 1.54957542636357867849e+01 1.18160314047813752580e+00 1.98833834367152428868e+00 1.22314620589945355356e+00 1.94356461402532332272e+00 1.25123262738257712279e+00 1.73495649832257003986e+00 1.23277690740401024705e+00 2.02118078357787434030e+00 +737 3680.00 1.55214664867458687070e+01 1.18360220879725619447e+00 1.99164259460092485376e+00 1.22509737607903246293e+00 1.94678156912492794639e+00 1.25320560395245372831e+00 1.73805805507276089905e+00 1.23475574808600963017e+00 2.02441621342379152182e+00 +738 3685.00 1.55471801977263233141e+01 1.18560183805262675527e+00 1.99494775084493314310e+00 1.22704864612709063643e+00 1.94999880692612115318e+00 1.25517867166423613412e+00 1.74116041386965481053e+00 1.23673465350218525494e+00 2.02765176631231813786e+00 +739 3690.00 1.55728953908768961156e+01 1.18760202731147956889e+00 1.99825381380270283849e+00 1.22900001529741342843e+00 1.95321632771909969861e+00 1.25715183016554576945e+00 1.74426357268188736427e+00 1.23871362245030147697e+00 2.03088744290675693449e+00 +740 3695.00 1.55986120606009723843e+01 1.18960277565140981615e+00 2.00156078486302257957e+00 1.23095148285414901501e+00 1.95643413183551317935e+00 1.25912507910400273126e+00 1.74736752951955121027e+00 1.24069265368666625804e+00 2.03412324388077525583e+00 +741 3700.00 1.56243302011982958533e+01 1.19160408216037594364e+00 2.00486866542504715838e+00 1.23290304808217476840e+00 1.95965221959664992468e+00 1.26109841811686340662e+00 1.75047228236164698068e+00 1.24267174601940766365e+00 2.03735916990803911375e+00 +742 3705.00 1.56500498069686120317e+01 1.19360594592633817435e+00 2.00817745685683757273e+00 1.23485471022491122284e+00 1.96287059131343188945e+00 1.26307184686211271263e+00 1.75357782922863103536e+00 1.24465089822556196353e+00 2.04059522167257911818e+00 +743 3710.00 1.56757708722116682054e+01 1.19560836601652664690e+00 2.01148716055754706034e+00 1.23680646857759968249e+00 1.96608924734860379679e+00 1.26504536499773534430e+00 1.75668416810986793841e+00 1.24663010911325766727e+00 2.04383139986879047711e+00 +744 3715.00 1.57014933915381238450e+01 1.19761134152926462804e+00 2.01479777789523728515e+00 1.23875832241475269946e+00 1.96930818801308782362e+00 1.26701897218171577464e+00 1.75979129703617775959e+00 1.24860937748025890848e+00 2.04706770520143122027e+00 +745 3720.00 1.57272173591440918017e+01 1.19961487154214707651e+00 2.01810931023796991113e+00 1.24071027101088349198e+00 1.97252741367999173683e+00 1.26899266806167454469e+00 1.76289921402801841310e+00 1.25058870212432982072e+00 2.05030413837526115373e+00 +746 3725.00 1.57529427695365882300e+01 1.20161895514313354916e+00 2.02142175897453402200e+00 1.24266231367159685206e+00 1.97574692470169499536e+00 1.27096645230596072551e+00 1.76600791711620974667e+00 1.25256808187432699953e+00 2.05354070011576705923e+00 +747 3730.00 1.57786696172226470480e+01 1.20362359140981833860e+00 2.02473512545226341786e+00 1.24461444967140621998e+00 1.97896672142021334828e+00 1.27294032459328665396e+00 1.76911740435230058210e+00 1.25454751553837873246e+00 2.05677739114843571855e+00 +748 3735.00 1.58043978967092950683e+01 1.20562877943016077964e+00 2.02804941103921887446e+00 1.24656667830555245580e+00 1.98218680419828996442e+00 1.27491428458163724713e+00 1.77222767376711254350e+00 1.25652700194534161504e+00 2.06001421218839064764e+00 +749 3740.00 1.58301276025035519979e+01 1.20763451829212042909e+00 2.03136461710346161169e+00 1.24851899889000472754e+00 1.98540717341939676466e+00 1.27688833196008966198e+00 1.77533872342255771848e+00 1.25850653992407246484e+00 2.06325116399220975794e+00 +750 3745.00 1.58558587291124499785e+01 1.20964080708365573358e+00 2.03468074498196127564e+00 1.25047141072000433937e+00 1.98862782943591320794e+00 1.27886246639699274752e+00 1.77845055139091412499e+00 1.26048612829306350136e+00 2.06648824729574664971e+00 +751 3750.00 1.58815912711466538099e+01 1.21164764489272647197e+00 2.03799779604277908618e+00 1.25242391309079259543e+00 1.99184877264167448097e+00 1.28083668757105884062e+00 1.78156315572373014078e+00 1.26246576592262771399e+00 2.06972546284521508042e+00 +752 3755.00 1.59073252232168300679e+01 1.21365503080729086882e+00 2.04131577162288335714e+00 1.25437650532870237363e+00 1.99507000339942486278e+00 1.28281099517136532029e+00 1.78467653450364749368e+00 1.26444545162089339030e+00 2.07296281142828719979e+00 +753 3760.00 1.59330605800372886449e+01 1.21566296391530870302e+00 2.04463467306960833270e+00 1.25632918674970373019e+00 1.99829152209263605222e+00 1.28478538888698867737e+00 1.78779068580294309143e+00 1.26642518426853789570e+00 2.07620029379117809754e+00 +754 3765.00 1.59587973360114165899e+01 1.21767144330473864322e+00 2.04795450171992232669e+00 1.25828195666976561107e+00 2.00151332910477997018e+00 1.28675986840700651292e+00 1.79090560773535045769e+00 1.26840496270478153562e+00 2.07943791071119488123e+00 +755 3770.00 1.59845354860607997693e+01 1.21968046806354002420e+00 2.05127525890043083123e+00 1.26023481440485696226e+00 2.00473542481932742731e+00 1.28873443343085947177e+00 1.79402129838351109825e+00 1.27038478579993752149e+00 2.08267566297600970060e+00 +756 3775.00 1.60102750246924685484e+01 1.22169003729003633474e+00 2.05459694595846675824e+00 1.26218775930203985780e+00 2.00795780963011560871e+00 1.29070908364762448883e+00 1.79713775585079416075e+00 1.27236465241395446668e+00 2.08591355137329470537e+00 +757 3780.00 1.60360159467243725828e+01 1.22370015007218602143e+00 2.05791956421027100177e+00 1.26414079067728346573e+00 2.01118048391025094901e+00 1.29268381876710725109e+00 1.80025497825093339088e+00 1.27434456141714580468e+00 2.08915157670108619925e+00 +758 3785.00 1.60617582468708164356e+01 1.22571080549794819703e+00 2.06124311497208401178e+00 1.26609390786728548406e+00 2.01440344805356996716e+00 1.29465863847838402734e+00 1.80337296369766275639e+00 1.27632451169018779069e+00 2.09238973975741782141e+00 +759 3790.00 1.60875019199497550915e+01 1.22772200266564657234e+00 2.06456759956014712643e+00 1.26804711020874338878e+00 2.01762670245390829393e+00 1.29663354251198881251e+00 1.80649171032544320070e+00 1.27830450210339430228e+00 2.09562804135069047362e+00 +760 3795.00 1.61132469606754895608e+01 1.22973374066324026010e+00 2.06789301930106539373e+00 1.27000039705908229770e+00 2.02085024749473785022e+00 1.29860853056736180733e+00 1.80961121625837284554e+00 1.28028453156853405659e+00 2.09886648231003380971e+00 +761 3800.00 1.61389933639696145917e+01 1.23174601858905208296e+00 2.07121937550071555378e+00 1.27195376776536495100e+00 2.02407408356989382270e+00 1.30058360235430914287e+00 1.81273147964127767651e+00 1.28226459896628441903e+00 2.10210506344384562283e+00 +762 3805.00 1.61647411245464418528e+01 1.23375883553104093160e+00 2.07454666945460974858e+00 1.27390722166428793649e+00 2.02729821106284857635e+00 1.30255875759299954986e+00 1.81585249860861952520e+00 1.28424470318768668697e+00 2.10534378560198298658e+00 +763 3810.00 1.61904902373275518812e+01 1.23577219057716636286e+00 2.07787490246862516230e+00 1.27586075812364141413e+00 2.03052263036743818603e+00 1.30453399600360242516e+00 1.81897427133631617302e+00 1.28622484315487373152e+00 2.10858264960321006853e+00 +764 3815.00 1.62162406971309032144e+01 1.23778608284647950732e+00 2.08120407583827393694e+00 1.27781437651121532184e+00 2.03374734184640582058e+00 1.30650931731665131963e+00 1.82209679595882945158e+00 1.28820501775888729412e+00 2.11182165630774765219e+00 +765 3820.00 1.62419924989817268113e+01 1.23980051141657554581e+00 2.08453419084870583688e+00 1.27976807616370735765e+00 2.03697234591431586281e+00 1.30848472125231496399e+00 1.82522007066244218443e+00 1.29018522592186091202e+00 2.11506080654472272684e+00 +766 3825.00 1.62677456378016067617e+01 1.24181547538577774503e+00 2.08786524879543211597e+00 1.28172185646963465722e+00 2.04019764292354732760e+00 1.31046020754112713114e+00 1.82834409361270777694e+00 1.29216546656592745634e+00 2.11830010119508393984e+00 +767 3830.00 1.62935001084084980505e+01 1.24383097385240892763e+00 2.09119725094287378653e+00 1.28367571680715197857e+00 2.04342323327829955559e+00 1.31243577592398530385e+00 1.83146886299590905267e+00 1.29414573861322113046e+00 2.12153954110868925298e+00 +768 3835.00 1.63192559059312713998e+01 1.24584700591479258236e+00 2.09453019858654387875e+00 1.28562965653368466157e+00 2.04664911733095378210e+00 1.31441142612105887899e+00 1.83459437698796401506e+00 1.29612604100660289141e+00 2.12477912715612138328e+00 +769 3840.00 1.63450130252915144524e+01 1.24786357068161568584e+00 2.09786409300122622668e+00 1.28758367503775117413e+00 2.04987529547534386154e+00 1.31638715788360904924e+00 1.83772063378551919754e+00 1.29810637266820672053e+00 2.12801886021832986629e+00 +770 3845.00 1.63707714614108219564e+01 1.24988066723047364093e+00 2.10119893544097680049e+00 1.28953777169750494203e+00 2.05310176806385102921e+00 1.31836297095253329736e+00 1.84084763160594833131e+00 1.30008673255125817292e+00 2.13125874117626334936e+00 +771 3850.00 1.63965312095217043975e+01 1.25189829468041757821e+00 2.10453472717021661254e+00 1.29149194591182814307e+00 2.05632853546958171975e+00 1.32033886507909348218e+00 1.84397536863553490605e+00 1.30206711958825516184e+00 2.13449877092123374567e+00 +772 3855.00 1.64222922646493962873e+01 1.25391645210904267849e+00 2.10787146945336578696e+00 1.29344619705887531325e+00 2.05955559804491583620e+00 1.32231483999382293248e+00 1.84710384310201702895e+00 1.30404753275315110628e+00 2.13773895034455430064e+00 +773 3860.00 1.64480546217154852684e+01 1.25593513864576422634e+00 2.11120916353411702815e+00 1.29540052454789189618e+00 2.06278295615259699147e+00 1.32429089546871114891e+00 1.85023305321240494337e+00 1.30602797098880762938e+00 2.14097928035826656767e+00 +774 3865.00 1.64738182760561286955e+01 1.25795435336817740257e+00 2.11454781067688957208e+00 1.29735492776739613774e+00 2.06601061013464004645e+00 1.32626703124465605832e+00 1.85336299721516595262e+00 1.30800843326917948239e+00 2.14421976185368157175e+00 +775 3870.00 1.64995832225929106585e+01 1.25997409538496940584e+00 2.11788741211501241324e+00 1.29930940612663481382e+00 2.06923856034342490418e+00 1.32824324708328278533e+00 1.85649367332767423200e+00 1.30998891855785615235e+00 2.14746039576357006240e+00 +776 3875.00 1.65253494566619920647e+01 1.26199436380482743481e+00 2.12122796908181321385e+00 1.30126395902448921404e+00 2.07246680711060271562e+00 1.33021954275658149669e+00 1.85962507979839752892e+00 1.31196942583915521219e+00 2.15070118299997181666e+00 +777 3880.00 1.65511169732886003203e+01 1.26401515772607475618e+00 2.12456948283134794409e+00 1.30321858588057026829e+00 2.07569535077818878577e+00 1.33219591800544945315e+00 1.86275721486543766048e+00 1.31394995407666748122e+00 2.15394212449565713996e+00 +778 3885.00 1.65768857678088927798e+01 1.26603647624703441465e+00 2.12791195456585269241e+00 1.30517328611448801823e+00 2.07892419165710595763e+00 1.33417237262260468533e+00 1.86589007679799001593e+00 1.31593050227543839625e+00 2.15718322117302996332e+00 +779 3890.00 1.66026558353517401656e+01 1.26805831847639405296e+00 2.13125538553938387309e+00 1.30712805913548857362e+00 2.08215333007900582629e+00 1.33614890635930883001e+00 1.86902366385488583056e+00 1.31791106941978641842e+00 2.16042447397522341390e+00 +780 3895.00 1.66284271710460167526e+01 1.27008068352284086977e+00 2.13459977694381297653e+00 1.30908290437354701830e+00 2.08538276634444663671e+00 1.33812551899791554177e+00 1.87215797428459174157e+00 1.31989165450439394078e+00 2.16366588384537195111e+00 +781 3900.00 1.66541997703315161061e+01 1.27210357048469768770e+00 2.13794513000210351095e+00 1.31103782125863732588e+00 2.08861250076435212009e+00 1.34010221030005105547e+00 1.87529300638739560014e+00 1.32187225653430662220e+00 2.16690745174733567779e+00 +782 3905.00 1.66799736284407522646e+01 1.27412697846028821758e+00 2.14129144592685616288e+00 1.31299280920000516204e+00 2.09184253362891725558e+00 1.34207898006879666752e+00 1.87842875842212797544e+00 1.32385287451457123176e+00 2.17014917861388445530e+00 +783 3910.00 1.67057487407098790300e+01 1.27615090657902774396e+00 2.14463872593067028660e+00 1.31494786765871829459e+00 2.09507286521797242429e+00 1.34405582806577883481e+00 1.88156522867871167648e+00 1.32583350746059824843e+00 2.17339106542960713853e+00 +784 3915.00 1.67315251023714068879e+01 1.27817535391851100357e+00 2.14798697119505321851e+00 1.31690299605438676522e+00 2.09830349582171260536e+00 1.34603275408371492183e+00 1.88470241545743499856e+00 1.32781415439816163904e+00 2.17663311315836649484e+00 +785 3920.00 1.67573027087614967456e+01 1.28020031960815394712e+00 2.15133618291187733718e+00 1.31885819384807678745e+00 2.10153442570960402591e+00 1.34800975790495902729e+00 1.88784031705858490469e+00 1.32979481435303648063e+00 2.17987532276402262710e+00 +786 3925.00 1.67830815553199457213e+01 1.28222580275664355121e+00 2.15468636228337695471e+00 1.32081346046976322306e+00 2.10476565513038549327e+00 1.34998683932222918180e+00 1.89097893178244902401e+00 1.33177548635099696206e+00 2.18311769523116572245e+00 +787 3930.00 1.68088616373828969586e+01 1.28425180245193915063e+00 2.15803751049106118387e+00 1.32276879537014857569e+00 2.10799718433279537066e+00 1.35196399813860734795e+00 1.89411825793967891762e+00 1.33375616942818120414e+00 2.18636023155475012203e+00 +788 3935.00 1.68346429502865149175e+01 1.28627831782345558587e+00 2.16138962870607276301e+00 1.32472419802066387895e+00 2.11122901355520786737e+00 1.35394123413644762444e+00 1.89725829386165356638e+00 1.33573686263109281391e+00 2.18960293270899963858e+00 +789 3940.00 1.68604254896778726902e+01 1.28830534795915285784e+00 2.16474271810991947262e+00 1.32667966786164748250e+00 2.11446114303599719264e+00 1.35591854711883152973e+00 1.90039903785902541955e+00 1.33771756499586969014e+00 2.19284579969923321130e+00 +790 3945.00 1.68862092506858445518e+01 1.29033289198844580703e+00 2.16809677985301663128e+00 1.32863520435416626597e+00 2.11769357298244642607e+00 1.35789593688884169254e+00 1.90354048826317323595e+00 1.33969827558974308168e+00 2.19608883354113304520e+00 +791 3950.00 1.69119942290611469105e+01 1.29236094902002252027e+00 2.17145181511687024312e+00 1.33059080698001475085e+00 2.12092630360183598270e+00 1.35987340324956029747e+00 1.90668264342620585872e+00 1.34167899345921570742e+00 2.19933203521928843927e+00 +792 3955.00 1.69377804201399371209e+01 1.29438951815220493202e+00 2.17480782504153413726e+00 1.33254647518989632893e+00 2.12415933509108478816e+00 1.36185094601443279494e+00 1.90982550167950249076e+00 1.34365971768188208202e+00 2.20257540575974575248e+00 +793 3960.00 1.69635678194656449591e+01 1.29641859851440943707e+00 2.17816481078778556579e+00 1.33450220847596923157e+00 2.12739266763674628180e+00 1.36382856498654203570e+00 1.91296906136480693306e+00 1.34564044731460952242e+00 2.20581894616782170360e+00 +794 3965.00 1.69893564224780746486e+01 1.29844818920495930215e+00 2.18152277350604073547e+00 1.33645800629930078252e+00 2.13062630139428232923e+00 1.36580625997933391425e+00 1.91611332085495544852e+00 1.34762118144535669728e+00 2.20906265749029140366e+00 +795 3970.00 1.70151462249279425976e+01 1.30047828933254150385e+00 2.18488171432598621280e+00 1.33841386815204965721e+00 2.13386023652951806184e+00 1.36778403081661847907e+00 1.91925827851241947997e+00 1.34960191914135485547e+00 2.21230654074283661359e+00 +796 3975.00 1.70409372221513990553e+01 1.30250889801620717279e+00 2.18824163437730945247e+00 1.34036979350564688929e+00 2.13709447318755163536e+00 1.36976187731184229079e+00 1.92240393269967202450e+00 1.35158265950092681962e+00 2.21555059696186695817e+00 +797 3980.00 1.70667294097955277721e+01 1.30454001438537248170e+00 2.19160253481042488488e+00 1.34232578186261553022e+00 2.14032901149275156527e+00 1.37173979927845102189e+00 1.92555028177918430288e+00 1.35356340162239652258e+00 2.21879482719415754843e+00 +798 3985.00 1.70925227835073982874e+01 1.30657163752799609924e+00 2.19496441673429210084e+00 1.34428183271511469954e+00 2.14356385156948725523e+00 1.37371779655061976300e+00 1.92869732415488503996e+00 1.35554414458335781291e+00 2.22203923247611889735e+00 +799 3990.00 1.71183173389340907988e+01 1.30860376657349330998e+00 2.19832728127859811096e+00 1.34623794554493914077e+00 2.14679899352139980095e+00 1.37569586895215789646e+00 1.93184505819961049866e+00 1.35752488750286315344e+00 2.22528381385452300734e+00 +800 3995.00 1.71441130716190457406e+01 1.31063640063055175666e+00 2.20169112954193790799e+00 1.34819411986497628142e+00 2.15003443744176658825e+00 1.37767401631724073496e+00 1.93499348230692458372e+00 1.35950562947923492274e+00 2.22852857239687462965e+00 +801 4000.00 1.71699099773129830737e+01 1.31266953881822301398e+00 2.20505596263326930639e+00 1.35015035517774939500e+00 2.15327018339277120873e+00 1.37965223846967788290e+00 1.93814259488075579796e+00 1.36148636964188907150e+00 2.23177350916031080885e+00 +802 4005.00 1.71957080516629723377e+01 1.31470318025555799046e+00 2.20842178167191605098e+00 1.35210665099614568696e+00 2.15650623143659858627e+00 1.38163053525400814081e+00 1.94129239432503264418e+00 1.36346710709951302043e+00 2.23501862521233451986e+00 +803 4010.00 1.72215072903160937301e+01 1.31673732405124432887e+00 2.21178858773574438246e+00 1.35406300681232361072e+00 2.15974258162507037895e+00 1.38360890649404222330e+00 1.94444287904368362518e+00 1.36544784099188554194e+00 2.23826392161008369541e+00 +804 4015.00 1.72473076891267069755e+01 1.31877196932433315979e+00 2.21515638191298469550e+00 1.35601942215989934581e+00 2.16297923398927727234e+00 1.38558735204468175262e+00 1.94759404746136510767e+00 1.36742857043805932094e+00 2.24150939945215332827e+00 +805 4020.00 1.72731092436382525079e+01 1.32080711520423998984e+00 2.21852516530223242697e+00 1.35797589655175987566e+00 2.16621618853958386453e+00 1.38756587174010137531e+00 1.95074589799236974841e+00 1.36940929457781312983e+00 2.24475505980604594924e+00 +806 4025.00 1.72989119497050900520e+01 1.32284276078928830778e+00 2.22189493898135381755e+00 1.35993242951115611561e+00 2.16945344526562688969e+00 1.38954446543520404589e+00 1.95389842908208244410e+00 1.37139001255092640719e+00 2.24800090375999195302e+00 +807 4030.00 1.73247158031815722268e+01 1.32487890521925755216e+00 2.22526570401785095399e+00 1.36188902056134053531e+00 2.17269100415704086160e+00 1.39152313296416396682e+00 1.95705163914479562948e+00 1.37337072351790756564e+00 2.25124693240222217838e+00 +808 4035.00 1.73505207997147756771e+01 1.32691554759247098971e+00 2.22863746147922681118e+00 1.36384566923592709387e+00 2.17592886517237049659e+00 1.39350187419224780250e+00 1.96020552663625813317e+00 1.37535142662889953158e+00 2.25449314683133117398e+00 +809 4040.00 1.73763269352627141018e+01 1.32895268704870828103e+00 2.23201021242261887778e+00 1.36580237506853263696e+00 2.17916702827015873467e+00 1.39548068896399390937e+00 1.96336008999149114196e+00 1.37733212104441093970e+00 2.25773954814591393259e+00 +810 4045.00 1.74021342054724534876e+01 1.33099032269665595862e+00 2.23538395791553057279e+00 1.36775913760313572176e+00 2.18240549337785738615e+00 1.39745957713430546399e+00 1.96651532767660652823e+00 1.37931280592494931447e+00 2.26098613745492871274e+00 +811 4050.00 1.74279426064056366386e+01 1.33302845364500255343e+00 2.23875869900473523089e+00 1.36971595637335208373e+00 2.18564426040218906522e+00 1.39943853855808408859e+00 1.96967123813699029888e+00 1.38129348045175026627e+00 2.26423291586733510528e+00 +812 4055.00 1.74537521337093437523e+01 1.33506707904389099184e+00 2.24213443673700751901e+00 1.37167283092316139026e+00 2.18888332923951356435e+00 1.40141757311096104566e+00 1.97282781983875543652e+00 1.38327414379568636171e+00 2.26747988449209136874e+00 +813 4060.00 1.74795627834452140803e+01 1.33710619799164431853e+00 2.24551117214875795014e+00 1.37362976080690768477e+00 2.19212269977582430158e+00 1.40339668064783928969e+00 1.97598507125837796750e+00 1.38525479514835692108e+00 2.27072704445888495783e+00 +814 4065.00 1.75053745514676073469e+01 1.33914580960731455228e+00 2.24888890626603199507e+00 1.37558674556856930238e+00 2.19536237186602489757e+00 1.40537586103398481896e+00 1.97914299086197154054e+00 1.38723543368063428893e+00 2.27397439687667413111e+00 +815 4070.00 1.75311874336308868294e+01 1.34118591303068068754e+00 2.25226764012523972269e+00 1.37754378477285488458e+00 2.19860234535465393080e+00 1.40735511413466496400e+00 1.98230157713637789030e+00 1.38921605860484675965e+00 2.27722194289587509530e+00 +816 4075.00 1.75570014258930484630e+01 1.34322650738079452104e+00 2.25564737473169918403e+00 1.37950087798447240672e+00 2.20184262005515751781e+00 1.40933443983587403103e+00 1.98546082856843764120e+00 1.39119666912295869565e+00 2.28046968363580937478e+00 +817 4080.00 1.75828165243157350517e+01 1.34526759177670740542e+00 2.25902811113218460193e+00 1.38145802475776502405e+00 2.20508319578098133107e+00 1.41131383800287890651e+00 1.98862074365535623777e+00 1.39317726441620592936e+00 2.28371762023652946638e+00 +818 4085.00 1.76086327247533098728e+01 1.34730916533747069330e+00 2.26240985030092200958e+00 1.38341522465744026782e+00 2.20832407231447991336e+00 1.41329330850094647687e+00 1.99178132087361059455e+00 1.39515784372800832891e+00 2.28696575383808564652e+00 +819 4090.00 1.76344500232674086249e+01 1.34935122719249966927e+00 2.26579259326395598961e+00 1.38537247726893464339e+00 2.21156524941727816724e+00 1.41527285122643586845e+00 1.99494255875149884005e+00 1.39713840626033181103e+00 2.29021408559089367785e+00 +820 4095.00 1.76602684159196741120e+01 1.35139377647121006198e+00 2.26917634100587717327e+00 1.38732978215695590407e+00 2.21480672684063861766e+00 1.41725246604461307953e+00 1.99810445578622553064e+00 1.39911895123586704770e+00 2.29346261663500383676e+00 +821 4100.00 1.76860878985644660588e+01 1.35343681229265300203e+00 2.27256109453200361159e+00 1.38928713890693966704e+00 2.21804850430472910716e+00 1.41923215285183768053e+00 2.00126701049572552904e+00 1.40109947787730759750e+00 2.29671134815192479195e+00 +822 4105.00 1.77119084674707103488e+01 1.35548033377588028614e+00 2.27594685481656044956e+00 1.39124454709395783958e+00 2.22129058151935687704e+00 1.42121191152374026778e+00 2.00443022139793081138e+00 1.40307998543843770456e+00 2.29996028127134310992e+00 +823 4110.00 1.77377301184927702593e+01 1.35752434006067135286e+00 2.27933362284413698617e+00 1.39320200630344626092e+00 2.22453295816323226575e+00 1.42319174195667996763e+00 2.00759408702113972822e+00 1.40506047314194959519e+00 2.30320941718513072516e+00 +824 4115.00 1.77635528477959212523e+01 1.35956883026607755482e+00 2.28272139957859554471e+00 1.39515951613120514629e+00 2.22777563390470589866e+00 1.42517164404701568436e+00 2.01075860590401367389e+00 1.40704094025199255569e+00 2.30645875703333791407e+00 +825 4120.00 1.77893766515454423427e+01 1.36161380352151417661e+00 2.28611018600452498006e+00 1.39711707616267055698e+00 2.23101860839139831683e+00 1.42715161767037779228e+00 2.01392377656448662293e+00 1.40902138600162318838e+00 2.30970830201820120919e+00 +826 4125.00 1.78152015259066232034e+01 1.36365925894603301494e+00 2.28949998306505841938e+00 1.39907468600400641812e+00 2.23426188125020042108e+00 1.42913166273349023783e+00 2.01708959756194916579e+00 1.41100180965498922525e+00 2.31295805329013548501e+00 +827 4130.00 1.78410274668374668749e+01 1.36570519567941350836e+00 2.29289079173442189585e+00 1.40103234525101338903e+00 2.23750545207691420302e+00 1.43111177913271103712e+00 2.02025606743506092045e+00 1.41298221047624084079e+00 2.31620801205137638590e+00 +828 4135.00 1.78668544705032488196e+01 1.36775161285107094145e+00 2.29628261294538438264e+00 1.40299005350985472873e+00 2.24074932045697350347e+00 1.43309196676439998264e+00 2.02342318473284965563e+00 1.41496258773989014301e+00 2.31945817947306842655e+00 +829 4140.00 1.78926825332765382370e+01 1.36979850956969273490e+00 2.29967544764107900690e+00 1.40494781038669502848e+00 2.24399348594472414220e+00 1.43507222553527991060e+00 2.02659094802506833943e+00 1.41694294072044990607e+00 2.32270855675744591906e+00 +830 4145.00 1.79185116511153310626e+01 1.37184588498542270329e+00 2.30306929677500260567e+00 1.40690561549806236741e+00 2.24723794808414378821e+00 1.43705255536243781123e+00 2.02975935588147171629e+00 1.41892326869243379228e+00 2.32595914507565248996e+00 +831 4150.00 1.79443418203921964960e+01 1.37389373821731242131e+00 2.30646416125919673235e+00 1.40886346843975673870e+00 2.25048270638812120126e+00 1.43903295612150450289e+00 2.03292840685108533449e+00 1.42090357095108243968e+00 2.32920994565065297977e+00 +832 4155.00 1.79701730372724171048e+01 1.37594206839477695148e+00 2.30986004202643080419e+00 1.41082136885939934956e+00 2.25372776034881416862e+00 1.44101342776065965978e+00 2.03609809951402720429e+00 1.42288384677090884445e+00 2.33246095967431799068e+00 +833 4160.00 1.79960052980249116672e+01 1.37799087464723180041e+00 2.31325693999910830811e+00 1.41277931636315390307e+00 2.25697310944801854404e+00 1.44299397015553410029e+00 2.03926843246077948990e+00 1.42486409546788217462e+00 2.33571218834888494342e+00 +834 4165.00 1.80218385988149663035e+01 1.38004015611445707279e+00 2.31665485607890797581e+00 1.41473731057791241028e+00 2.26021875312607178898e+00 1.44497458324394267848e+00 2.04243940427146064565e+00 1.42684431634760788832e+00 2.33896363288695141591e+00 +835 4170.00 1.80476729360151466608e+01 1.38208991192586760910e+00 2.32005379118823373830e+00 1.41669535113056799247e+00 2.26346469082331402944e+00 1.44695526693260934081e+00 2.04561101352618823768e+00 1.42882450870532684561e+00 2.34221529451148269274e+00 +836 4175.00 1.80735083057907317539e+01 1.38414014120051520607e+00 2.32345374620803424293e+00 1.41865343765837637058e+00 2.26671092192826151290e+00 1.44893602114898478739e+00 2.04878325883617362635e+00 1.43080467185700843658e+00 2.34546717441435026430e+00 +837 4180.00 1.80993447046179305460e+01 1.38619084307817930224e+00 2.32685472203998644503e+00 1.42061156980895830770e+00 2.26995744583979774944e+00 1.45091684581015667455e+00 2.05195613879189808770e+00 1.43278480513935058127e+00 2.34871927383924639088e+00 +838 4185.00 1.81251821287656653681e+01 1.38824201668827562628e+00 2.33025671957540314594e+00 1.42256974719884232705e+00 2.27320426191534785687e+00 1.45289774082284739443e+00 2.05512965200457253800e+00 1.43476490786832178159e+00 2.35197159400913458072e+00 +839 4190.00 1.81510205745028585511e+01 1.39029366117058383878e+00 2.33365973969523343712e+00 1.42452796949637727764e+00 2.27645136948124582332e+00 1.45487870613523684327e+00 2.05830379707504329545e+00 1.43674497938062062374e+00 2.35522413613661552034e+00 +840 4195.00 1.81768600383057155057e+01 1.39234577565451878023e+00 2.33706378327006047968e+00 1.42648623632845472642e+00 2.27969876786382386058e+00 1.45685974166441223332e+00 2.06147857263524869609e+00 1.43872501901294347348e+00 2.35847690147574384767e+00 +841 4200.00 1.82027005165468018788e+01 1.39439835926949640132e+00 2.34046885117046965519e+00 1.42844454735306025661e+00 2.28294645634796022904e+00 1.45884084734818908480e+00 2.06465397729639965618e+00 1.44070502610198869498e+00 2.36172989124948529138e+00 +842 4205.00 1.82285420054950435542e+01 1.39645141115529658471e+00 2.34387494425668130305e+00 1.43040290223854227314e+00 2.28619443420816681467e+00 1.46082202310365460995e+00 2.06783000969043451178e+00 1.44268500001554622614e+00 2.36498310670153122359e+00 +843 4210.00 1.82543845016266459425e+01 1.39850493044133439291e+00 2.34728206338891576266e+00 1.43236130062215694103e+00 2.28944270067750110798e+00 1.46280326887898759480e+00 2.07100666843892788904e+00 1.44466494010067658671e+00 2.36823654907557390459e+00 +844 4215.00 1.82802280014178073486e+01 1.40055891625702533254e+00 2.35069020941702966354e+00 1.43431974218261748533e+00 2.29269125498901882310e+00 1.46478458460164007171e+00 2.07418395219454643197e+00 1.44664484571480667086e+00 2.37149021961530515057e+00 +845 4220.00 1.83060725012410969725e+01 1.40261336775251366227e+00 2.35409938318051459305e+00 1.43627822656754422503e+00 2.29594009634468498859e+00 1.46676597021979127078e+00 2.07736185957886476672e+00 1.44862471622572597241e+00 2.37474411957478137580e+00 +846 4225.00 1.83319179975727273302e+01 1.40466828404684984655e+00 2.35750958551886302672e+00 1.43823675346601431713e+00 2.29918922390500668484e+00 1.46874742566089278029e+00 2.08054038925491413536e+00 1.45060455102195207111e+00 2.37799825020805943865e+00 +847 4230.00 1.83577644869925329374e+01 1.40672366429017814404e+00 2.36092081726120284202e+00 1.44019532252564830266e+00 2.30243863683049188040e+00 1.47072895087312338624e+00 2.08371953985463287395e+00 1.45258434946091097295e+00 2.38125261276919442111e+00 +848 4235.00 1.83836119658730865467e+01 1.40877950760154990739e+00 2.36433307922629909470e+00 1.44215393344588749258e+00 2.30568833425055608188e+00 1.47271054580466342898e+00 2.08689931006178053252e+00 1.45456411094148529983e+00 2.38450720852260733551e+00 +849 4240.00 1.84094604307942333321e+01 1.41083581313110872912e+00 2.36774637224327832996e+00 1.44411258590544422376e+00 2.30893831526352277805e+00 1.47469221039332798462e+00 2.09007969850829455893e+00 1.45654383485219218741e+00 2.38776203874308290409e+00 +850 4245.00 1.84353098782321715987e+01 1.41289258000827055994e+00 2.37116069713090560356e+00 1.44607127956230319121e+00 2.31218857894698626154e+00 1.47667394459766021519e+00 2.09326070388829954538e+00 1.45852352059191425759e+00 2.39101710467431294305e+00 +851 4250.00 1.84611603047667607314e+01 1.41494980736245024033e+00 2.37457605466648846715e+00 1.44803001412627008193e+00 2.31543912436817844736e+00 1.47865574836584023899e+00 2.09644232485446169179e+00 1.46050316755953368819e+00 2.39427240761181048256e+00 +852 4255.00 1.84870117069778352459e+01 1.41700749435415551680e+00 2.37799244567915391002e+00 1.44998878928642116470e+00 2.31868995055287285822e+00 1.48063762165641099600e+00 2.09962456008017639419e+00 1.46248277515393265702e+00 2.39752794881999520271e+00 +853 4260.00 1.85128640814452509744e+01 1.41906564010243863017e+00 2.38140987093584710621e+00 1.45194760472146988661e+00 2.32194105650611604119e+00 1.48261956440718911665e+00 2.10280740825956691253e+00 1.46446234280508513770e+00 2.40078372958401597970e+00 +854 4265.00 1.85387174247488495382e+01 1.42112424374707857488e+00 2.38482833124496673705e+00 1.45390646014122104646e+00 2.32519244122259083341e+00 1.48460157658708058470e+00 2.10599086807639146457e+00 1.46644186993260228213e+00 2.40403975117865709166e+00 +855 4270.00 1.85645717334684796640e+01 1.42318330442785501155e+00 2.38824782737345664430e+00 1.45586535524511595519e+00 2.32844410365552167974e+00 1.48658365816499427048e+00 2.10917493820404633453e+00 1.46842135595609324383e+00 2.40729601488906785889e+00 +856 4275.00 1.85904270042876262892e+01 1.42524282129491153270e+00 2.39166836009862482371e+00 1.45782428972223176977e+00 2.33169604274777197972e+00 1.48856580907874525010e+00 2.11235961735738220213e+00 1.47040080030553355073e+00 2.41055252200039538124e+00 +857 4280.00 1.86162832337861416931e+01 1.42730279346729949097e+00 2.39508993018741378478e+00 1.45978326329273699891e+00 2.33494825741110956230e+00 1.49054802931796959165e+00 2.11554490423052277137e+00 1.47238020242126110837e+00 2.41380927381851817515e+00 +858 4285.00 1.86421404187511470241e+01 1.42936322008479899104e+00 2.39851253839640410348e+00 1.46174227567680170559e+00 2.33820074653657616892e+00 1.49253031882048214918e+00 2.11873079751759041400e+00 1.47435956174361471049e+00 2.41706627161821963057e+00 +859 4290.00 1.86679985557624945613e+01 1.43142410030791733533e+00 2.40193618548217413533e+00 1.46370132656350215861e+00 2.34145350898412107910e+00 1.49451267756555528088e+00 2.12191729594380129598e+00 1.47633887773366123675e+00 2.42032351671574064156e+00 +860 4295.00 1.86938576415036656897e+01 1.43348543326607047455e+00 2.40536087219093985823e+00 1.46566041569373672893e+00 2.34470654360332808608e+00 1.49649510553246067879e+00 2.12510439820327912130e+00 1.47831814983173881473e+00 2.42358101039623008432e+00 +861 4300.00 1.87197176727617922154e+01 1.43554721808867324917e+00 2.40878659926891636189e+00 1.46761954276694539523e+00 2.34795984921269074164e+00 1.49847760267974194903e+00 2.12829210303160287765e+00 1.48029737749891432408e+00 2.42683875397592840883e+00 +862 4305.00 1.87455786462203661813e+01 1.43760945392586969582e+00 2.41221336745195458207e+00 1.46957870753439046041e+00 2.35121342460997295731e+00 1.50046016897630640763e+00 2.13148040915398873096e+00 1.48227656021698273037e+00 2.43009674876071279925e+00 +863 4310.00 1.87714405586665122883e+01 1.43967213991743969714e+00 2.41564117745517759062e+00 1.47153790969551301338e+00 2.35446726855148202873e+00 1.50244280441179056673e+00 2.13466931527492320697e+00 1.48425569743664653721e+00 2.43335499604609539759e+00 +864 4315.00 1.87973034066800757103e+01 1.44173527520316224759e+00 2.41907003001443676737e+00 1.47349714900157424680e+00 2.35772137980389029366e+00 1.50442550895510129827e+00 2.13785882015071448947e+00 1.48623478866042924018e+00 2.43661349716904584994e+00 +865 4320.00 1.88231671873591110966e+01 1.44379885892281722981e+00 2.42249992584485562830e+00 1.47545642518310748947e+00 2.36097575708204931999e+00 1.50640828257514747257e+00 2.14104892250657830033e+00 1.48821383335976187290e+00 2.43987225342507629833e+00 +866 4325.00 1.88490318971798238579e+01 1.44586289021618474848e+00 2.42593086564082804912e+00 1.47741573797064695839e+00 2.36423039909044652163e+00 1.50839112527192820146e+00 2.14423962108845866936e+00 1.49019283101643829070e+00 2.44313126614079179078e+00 +867 4330.00 1.88748975332402615379e+01 1.44792736823340773000e+00 2.42936285011747710172e+00 1.47937508711545295803e+00 2.36748530450247596235e+00 1.51037403701435124503e+00 2.14743091463193414015e+00 1.49217178114334680927e+00 2.44639053663243366543e+00 +868 4335.00 1.89007640921202764162e+01 1.44999229211426605701e+00 2.43279587996919799409e+00 1.48133447235842363732e+00 2.37074047198117021651e+00 1.51235701778168851739e+00 2.15062280189331378466e+00 1.49415068323264610406e+00 2.44965006623697068022e+00 +869 4340.00 1.89266315708142762730e+01 1.45205766099853961215e+00 2.43622995589038504605e+00 1.48329389345082063301e+00 2.37399590014810302208e+00 1.51434006757394024056e+00 2.15381528163926905250e+00 1.49612953678685900449e+00 2.45290985628100832727e+00 +870 4345.00 1.89524999661093858094e+01 1.45412347402600761193e+00 2.43966507854434100366e+00 1.48525335013354120584e+00 2.37725158762484856112e+00 1.51632318637037766251e+00 2.15700835260537937543e+00 1.49810834133960146808e+00 2.45616990808078572428e+00 +871 4350.00 1.89783692750000234639e+01 1.45618973034681387091e+00 2.44310124862546063085e+00 1.48721284216821114654e+00 2.38050753298116113399e+00 1.51830637417100122732e+00 2.16020201357904539918e+00 1.50008709638303217027e+00 2.45943022298363800360e+00 +872 4355.00 1.90042394941696741739e+01 1.45825642909037389572e+00 2.44653846679704711775e+00 1.48917236931645624587e+00 2.38376373478679459694e+00 1.52028963095508284908e+00 2.16339626330621026540e+00 1.50206580146113077845e+00 2.46269080232653303497e+00 +873 4360.00 1.90301106207163854833e+01 1.46032356941719565491e+00 2.44997673372240143408e+00 1.49113193133990207251e+00 2.38702019159077494237e+00 1.52227295671225815177e+00 2.16659110057427506391e+00 1.50404445609714887411e+00 2.46595164743607675462e+00 +874 4365.00 1.90559826515309325146e+01 1.46239115045669421100e+00 2.45341605006482721407e+00 1.49309152800017419516e+00 2.39027690189030828094e+00 1.52425635145289128936e+00 2.16978652416027451011e+00 1.50602305983506568055e+00 2.46921275965960163035e+00 +875 4370.00 1.90818555835040832847e+01 1.46445917135901337858e+00 2.45685641646689845174e+00 1.49505115906926189240e+00 2.39353386420332725493e+00 1.52623981516661832991e+00 2.17298253283088182997e+00 1.50800161221886086516e+00 2.47247414034444057407e+00 +876 4375.00 1.91077294136302455740e+01 1.46652763127429719425e+00 2.46029783357118914111e+00 1.49701082431915621918e+00 2.39679107698558047090e+00 1.52822334784307511946e+00 2.17617912538386004684e+00 1.50998011278214971931e+00 2.47573579083792738587e+00 +877 4380.00 1.91336041389038307159e+01 1.46859652933196094260e+00 2.46374030200991001038e+00 1.49897052352184578794e+00 2.40004853870318113351e+00 1.53020694949262536788e+00 2.17937630060661069464e+00 1.51195856108964021836e+00 2.47899771248739453355e+00 +878 4385.00 1.91594797562156102799e+01 1.47066586469251281422e+00 2.46718382243599920756e+00 1.50093025645968514148e+00 2.40330624777042256568e+00 1.53219062012563367325e+00 2.18257405728653308685e+00 1.51393695669567573958e+00 2.48225990664017581722e+00 +879 4390.00 1.91853562626636353627e+01 1.47273563648536742754e+00 2.47062839545057366664e+00 1.50289002290466355838e+00 2.40656420260159675806e+00 1.53417435972137128353e+00 2.18577239422139157909e+00 1.51591529918569234425e+00 2.48552237466433290081e+00 +880 4395.00 1.92112336552423172975e+01 1.47480584387103297317e+00 2.47407402168584544810e+00 1.50484982264949973541e+00 2.40982240157990323937e+00 1.53615816831093110473e+00 2.18897131021931468098e+00 1.51789358810366992181e+00 2.48878511789683365407e+00 +881 4400.00 1.92371119310497036281e+01 1.47687648598928977783e+00 2.47752070174293059779e+00 1.50680965548691059297e+00 2.41308084307817960479e+00 1.53814204588394876083e+00 2.19217080408843045802e+00 1.51987182304540802136e+00 2.49204813772646804892e+00 +882 4405.00 1.92629910870802127931e+01 1.47894756197991616986e+00 2.48096843622294827014e+00 1.50876952119925067386e+00 2.41633952543816787895e+00 1.54012599246115278184e+00 2.19537087463686786393e+00 1.52185000358597899428e+00 2.49531143549020617556e+00 +883 4410.00 1.92888711204318887837e+01 1.48101907099305685200e+00 2.48441722573737999724e+00 1.51072941958960216269e+00 2.41959844698088488713e+00 1.54211000804254250163e+00 2.19857152067275452012e+00 1.52382812932118238969e+00 2.49857501256647251964e+00 +884 4415.00 1.93147520282027898020e+01 1.48309101216849126281e+00 2.48786707086661484922e+00 1.51268935046104702202e+00 2.42285760599625410450e+00 1.54409409263848229621e+00 2.20177274101458353428e+00 1.52580619984681842283e+00 2.50183887031296459114e+00 +885 4420.00 1.93406338074909669444e+01 1.48516338466672692675e+00 2.49131797221177153645e+00 1.51464931359593868443e+00 2.42611700078456227203e+00 1.54607824628006484957e+00 2.20497453450157498978e+00 1.52778421476905146292e+00 2.50510301010810776390e+00 +886 4425.00 1.93665164553944606496e+01 1.48723618761717890635e+00 2.49476993032214711121e+00 1.51660930881808808657e+00 2.42937662959427624898e+00 1.54806246896728993967e+00 2.20817689994185739621e+00 1.52976217367331712715e+00 2.50836743331996325779e+00 +887 4430.00 1.93923999691149759883e+01 1.48930942018035605834e+00 2.49822294579885983978e+00 1.51856933592021281498e+00 2.43263649068422793675e+00 1.55004676072088520833e+00 2.21137983616428757117e+00 1.53174007619687224668e+00 2.51163214132695689074e+00 +888 4435.00 1.94182843457505640572e+01 1.49138308148567300115e+00 2.50167701918084173229e+00 1.52052939472612336225e+00 2.43589658225106209244e+00 1.55203112156157985169e+00 2.21458334202881390596e+00 1.53371792194588052460e+00 2.51489713549714988261e+00 +889 4440.00 1.94441695825029086109e+01 1.49345717070400230142e+00 2.50513215104848407933e+00 1.52248948504926584491e+00 2.43915690251215444562e+00 1.55401555151010128952e+00 2.21778741634356579837e+00 1.53569571054723486014e+00 2.51816241722969591521e+00 +890 4445.00 1.94700556765737076148e+01 1.49553168696475879962e+00 2.50858834195108348908e+00 1.52444960670308593542e+00 2.44241744965378693166e+00 1.55600005058717805184e+00 2.22099205796849075156e+00 1.53767344162782726436e+00 2.52142798788229249851e+00 +891 4450.00 1.94959426250610157183e+01 1.49760662941808697646e+00 2.51204559241720870588e+00 1.52640975951139479250e+00 2.44567822183114991219e+00 1.55798461881353822456e+00 2.22419726575317477923e+00 1.53965111483527783420e+00 2.52469384885409331432e+00 +892 4455.00 1.95218304253738068610e+01 1.49968199721412931424e+00 2.51550390299615811429e+00 1.52836994329800202053e+00 2.44893921719943330473e+00 1.55996925620991033767e+00 2.22740303853683752067e+00 1.54162872979647991301e+00 2.52796000152352284829e+00 +893 4460.00 1.95477190746101250340e+01 1.50175778950303073778e+00 2.51896327422686372444e+00 1.53033015788671811208e+00 2.45220043388273412077e+00 1.56195396281775034097e+00 2.23060937517942825536e+00 1.54360628616941775171e+00 2.53122644728973567041e+00 +894 4465.00 1.95736085700753150718e+01 1.50383400543493461754e+00 2.52242370661716774904e+00 1.53229040311171749167e+00 2.45546186997405868624e+00 1.56393873865778654242e+00 2.23381627453053210886e+00 1.54558378361207560125e+00 2.53449318752079255646e+00 +895 4470.00 1.95994989090747004923e+01 1.50591064413925623811e+00 2.52588520070600219825e+00 1.53425067880717480584e+00 2.45872352359750401263e+00 1.56592358376111162599e+00 2.23702373547082578042e+00 1.54756122178243860077e+00 2.53776022363657638437e+00 +896 4475.00 1.96253900889136225771e+01 1.50798770478686749996e+00 2.52934775700120928477e+00 1.53621098481762796695e+00 2.46198539279425476778e+00 1.56790849814845323351e+00 2.24023175686025766140e+00 1.54953860033849144529e+00 2.54102755701551163980e+00 +897 4480.00 1.96512821066901288702e+01 1.51006518650718368768e+00 2.53281137598990113702e+00 1.53817132096688768961e+00 2.46524747564695267954e+00 1.56989348186126820295e+00 2.24344033754841287731e+00 1.55151591894858253973e+00 2.54429518906711660264e+00 +898 4485.00 1.96771749600204799435e+01 1.51214308846071343595e+00 2.53627605820064694342e+00 1.54013168710985626220e+00 2.46850977017605499597e+00 1.57187853494101248408e+00 2.24664947643669776767e+00 1.55349317730178904107e+00 2.54756312116981709082e+00 +899 4490.00 1.97030686460027197882e+01 1.51422140979759967117e+00 2.53974180409983096851e+00 1.54209208310143641718e+00 2.47177227442274549674e+00 1.57386365740841505101e+00 2.24985917239542354551e+00 1.55547037508718766219e+00 2.55083135474349331773e+00 +900 4495.00 1.97289631621494727653e+01 1.51630014965762183188e+00 2.54320861419529453684e+00 1.54405250877580257907e+00 2.47503498637638852387e+00 1.57584884930493140942e+00 2.25306942429490408841e+00 1.55744751197312769619e+00 2.55409989118730074154e+00 +901 4500.00 1.97548585057660659459e+01 1.51837930720128833073e+00 2.54667648895342235704e+00 1.54601296399822119021e+00 2.47829790404707761553e+00 1.57783411068238255126e+00 2.25628023102618024964e+00 1.55942458766941394188e+00 2.55736873190039259995e+00 +902 4505.00 1.97807546742614803748e+01 1.52045888155801467434e+00 2.55014542885096329172e+00 1.54797344861323127319e+00 2.48156102540344880580e+00 1.57981944156149656244e+00 2.25949159148029421473e+00 1.56140160187548771020e+00 2.56063787829228628468e+00 +903 4510.00 1.98066516650446828862e+01 1.52253887189867209706e+00 2.55361543435430071725e+00 1.54993396248609904831e+00 2.48482434841413724058e+00 1.58180484199409421286e+00 2.26270350454828594877e+00 1.56337855429078964598e+00 2.56390733178286334137e+00 +904 4515.00 1.98325494755246545253e+01 1.52461927736304092562e+00 2.55708650591945607644e+00 1.55189450549245511191e+00 2.48808787101668693609e+00 1.58379031202163189640e+00 2.26591596912119674911e+00 1.56535544463548936811e+00 2.56717709377127878412e+00 +905 4520.00 1.98584481031103692317e+01 1.52670009709090037653e+00 2.56055864400244992396e+00 1.55385507747683870861e+00 2.49135159115900695070e+00 1.58577585169592971681e+00 2.26912898410043206709e+00 1.56733227261939167541e+00 2.57044716566704911642e+00 +906 4525.00 1.98843475453144407084e+01 1.52878133025312235027e+00 2.56403184905930237036e+00 1.55581567831487999065e+00 2.49461550673718379656e+00 1.58776146104808013604e+00 2.27234254839776150803e+00 1.56930903798339427269e+00 2.57371754890042092612e+00 +907 4530.00 1.99102477995458428950e+01 1.53086297597912235346e+00 2.56750612151494106428e+00 1.55777630789257393040e+00 2.49787961567839733590e+00 1.58974714012990347989e+00 2.27555666091459052325e+00 1.57128574043730284693e+00 2.57698824488091116081e+00 +908 4535.00 1.99361488634208363635e+01 1.53294503342940857671e+00 2.57098146181502373864e+00 1.55973696606482326033e+00 2.50114391586837170323e+00 1.59173288899322074030e+00 2.27877132055232367591e+00 1.57326237973237814671e+00 2.58025925501803854445e+00 +909 4540.00 1.99620507342447517374e+01 1.53502750175412394640e+00 2.57445787038447670980e+00 1.56169765272798666267e+00 2.50440840519282881260e+00 1.59371870768985224309e+00 2.28198652624345932338e+00 1.57523895560951765482e+00 2.58353058074204877670e+00 +910 4545.00 1.99879534097374857993e+01 1.53711038009304878926e+00 2.57793534763786613695e+00 1.56365836775769539990e+00 2.50767308150640122477e+00 1.59570459627161809202e+00 2.28520227688940114064e+00 1.57721546780961996426e+00 2.58680222348318755721e+00 +911 4550.00 2.00138568874116558050e+01 1.53919366761705478375e+00 2.58141389398975373837e+00 1.56561911102958006836e+00 2.51093794268444714390e+00 1.59769055477997512504e+00 2.28841857141228510741e+00 1.57919191608394471338e+00 2.59007418464060901186e+00 +912 4555.00 2.00397611646762427995e+01 1.54127736345555699238e+00 2.58489350985470522915e+00 1.56757988243999957234e+00 2.51420298656086949052e+00 1.59967658327710804400e+00 2.29163540874460647245e+00 1.58116830019411946928e+00 2.59334646566528714828e+00 +913 4560.00 2.00656662392511293547e+01 1.54336146675869967382e+00 2.58837419563692039404e+00 1.56954068188531303818e+00 2.51746821097993578320e+00 1.60166268182520110663e+00 2.29485278780850077140e+00 1.58314461991213284442e+00 2.59661906797710351213e+00 +914 4565.00 2.00915721086489433844e+01 1.54544597669735450651e+00 2.59185595171987070984e+00 1.57150150925151499415e+00 2.52073361375482063451e+00 1.60364885046571070681e+00 2.29807070753646369710e+00 1.58512087500997544964e+00 2.59989199300630424716e+00 +915 4570.00 2.01174787704859419080e+01 1.54753089240093721912e+00 2.59533877848702720925e+00 1.57346236442460063465e+00 2.52399919269869776883e+00 1.60563508927118614444e+00 2.30128916687135776087e+00 1.58709706524927218751e+00 2.60316524218313549710e+00 +916 4575.00 2.01433862224820146025e+01 1.54961621302995511407e+00 2.59882267634259145339e+00 1.57542324733202132592e+00 2.52726494563510684088e+00 1.60762139828308270317e+00 2.30450816473531627793e+00 1.58907319043310524265e+00 2.60643881692747880763e+00 +917 4580.00 2.01692944621497858293e+01 1.55170193773455222797e+00 2.60230764563894156893e+00 1.57738415785977159622e+00 2.53053087034612955719e+00 1.60960777758431428097e+00 2.30772770008156502541e+00 1.59104925033346500385e+00 2.60971271869030951862e+00 +918 4585.00 2.01952034872091417128e+01 1.55378806566487237539e+00 2.60579368675954947676e+00 1.57934509591457494793e+00 2.53379696462421311054e+00 1.61159422721633704967e+00 2.31094777185296651467e+00 1.59302524475343276755e+00 2.61298694891223570735e+00 +919 4590.00 2.02211132953799932466e+01 1.55587459597105937092e+00 2.60928080005679507991e+00 1.58130606140315421726e+00 2.53706322625143920746e+00 1.61358074725169942099e+00 2.31416837899238148069e+00 1.59500117349609094042e+00 2.61626150901314069586e+00 +920 4595.00 2.02470238842785867917e+01 1.55796152780325614096e+00 2.61276898588305783733e+00 1.58326705425296077046e+00 2.54032965299952628868e+00 1.61556733776295025073e+00 2.31738952046339941049e+00 1.59697703635415777512e+00 2.61953640043363389367e+00 +921 4600.00 2.02729352517284731050e+01 1.56004886031160716620e+00 2.61625824460108047376e+00 1.58522807437071766579e+00 2.54359624262982819687e+00 1.61755399879154571074e+00 2.32061119520888325951e+00 1.59895283315144309810e+00 2.62281162463505435056e+00 +922 4605.00 2.02988473952422552316e+01 1.56213659264625537304e+00 2.61974857654251502836e+00 1.58718912166314796153e+00 2.54686299291406381684e+00 1.61954073043076296479e+00 2.32383340218205791672e+00 1.60092856370139347000e+00 2.62608718303728272403e+00 +923 4610.00 2.03247603128507563497e+01 1.56422472395734546424e+00 2.62323998204937636203e+00 1.58915019606806739993e+00 2.55012990158249497341e+00 1.62152753273242256071e+00 2.32705614035687702312e+00 1.60290422783818309327e+00 2.62936307709129435395e+00 +924 4615.00 2.03506740020666008206e+01 1.56631325340538452018e+00 2.62673246145331651391e+00 1.59111129750256230508e+00 2.55339696641720292902e+00 1.62351440576907313229e+00 2.33027940869693139803e+00 1.60487982537525786242e+00 2.63263930824806280384e+00 +925 4620.00 2.03765884608169578485e+01 1.56840218013015242349e+00 2.63022601506525743886e+00 1.59307242590444908537e+00 2.55666418512772164462e+00 1.62550134960289915931e+00 2.33350320616581141664e+00 1.60685535615715680002e+00 2.63591587794819837143e+00 +926 4625.00 2.04025036869253746374e+01 1.57049150328179254466e+00 2.63372064320648702207e+00 1.59503358119081450894e+00 2.55993155547540629513e+00 1.62748836432717780554e+00 2.33672753173746938771e+00 1.60883082001805433059e+00 2.63919278764267462023e+00 +927 4630.00 2.04284196780081046541e+01 1.57258122202081307428e+00 2.63721634619829181645e+00 1.59699476329947365194e+00 2.56319907519051826128e+00 1.62947544999372961883e+00 2.33995238437549568644e+00 1.61080621681285229840e+00 2.64247003878246644604e+00 +928 4635.00 2.04543364320959639713e+01 1.57467133549735760489e+00 2.64071312432050353536e+00 1.59895597216824270070e+00 2.56646674201368263368e+00 1.63146260668546694284e+00 2.34317776307457270590e+00 1.61278154639645388002e+00 2.64574763281854830055e+00 +929 4640.00 2.04802539470124926879e+01 1.57676184286156972902e+00 2.64421097789440828763e+00 1.60091720773493606522e+00 2.56973455365443337328e+00 1.63344983447493885542e+00 2.34640366679829037722e+00 1.61475680861339720984e+00 2.64902557119152959331e+00 +930 4645.00 2.05061722205812380082e+01 1.57885274325322910727e+00 2.64770990719983734252e+00 1.60287846994773364173e+00 2.57300250785339779114e+00 1.63543713343469399035e+00 2.34963009454133153753e+00 1.61673200334967726022e+00 2.65230385537311263988e+00 +931 4650.00 2.05320912507293726890e+01 1.58094403584320764011e+00 2.65120991252698567919e+00 1.60483975875481510442e+00 2.57627060235120008969e+00 1.63742450365800951140e+00 2.35285704528801309365e+00 1.61870713044983305373e+00 2.65558248680390818208e+00 +932 4655.00 2.05580110352804368290e+01 1.58303571977128498816e+00 2.65471099413495492669e+00 1.60680107409399597351e+00 2.57953883484701007589e+00 1.63941194519670530028e+00 2.35608451802265372876e+00 1.62068218981022282854e+00 2.65886146695561764730e+00 +933 4660.00 2.05839315722652500540e+01 1.58512779417724058995e+00 2.65821315232430510633e+00 1.60876241591345547910e+00 2.58280720308145461672e+00 1.64139945815442267474e+00 2.35931251173993539183e+00 1.62265718130647762507e+00 2.66214079726885222144e+00 +934 4665.00 2.06098528595073524627e+01 1.58722025824231027791e+00 2.66171638733340998328e+00 1.61072378419246531323e+00 2.58607570477443049484e+00 1.64338704260371093469e+00 2.36254102543454047591e+00 1.62463210482459241568e+00 2.66542047921531333188e+00 +935 4670.00 2.06357748950375636809e+01 1.58931311108554607081e+00 2.66522069943173622875e+00 1.61268517885847728621e+00 2.58934433766656413312e+00 1.64537469861711782571e+00 2.36577005811151552805e+00 1.62660696026092654876e+00 2.66870051424597543033e+00 +936 4675.00 2.06616976768867068870e+01 1.59140635187781964710e+00 2.66872608887838635994e+00 1.61464659989076220192e+00 2.59261309946738860432e+00 1.64736242628792073361e+00 2.36899960876554205313e+00 1.62858174752220241643e+00 2.67198090383254083235e+00 +937 4680.00 2.06876212029819583904e+01 1.59349997976927415522e+00 2.67223255590137132032e+00 1.61660804723750040068e+00 2.59588198792789448532e+00 1.64935022569903266820e+00 2.37222967640166704228e+00 1.63055646649441521312e+00 2.67526164942598398966e+00 +938 4685.00 2.07135454712505016062e+01 1.59559399391005429791e+00 2.67574010075979229484e+00 1.61856952088832772851e+00 2.59915100075761573706e+00 1.65133809692300204119e+00 2.37546026003529986426e+00 1.63253111710501608300e+00 2.67854275249800721781e+00 +939 4690.00 2.07394704798267923707e+01 1.59768839343993840352e+00 2.67924872367129607298e+00 1.62053102079142341552e+00 2.60242013570754116003e+00 1.65332604006346972625e+00 2.37869135866112380029e+00 1.63450569926072852844e+00 2.68182421452031283238e+00 +940 4695.00 2.07653962268453007312e+01 1.59978317751943532876e+00 2.68275842486389315411e+00 1.62249254692605959782e+00 2.60568939051829850939e+00 1.65531405519298457918e+00 2.38192297130491281720e+00 1.63648021288900347159e+00 2.68510603694387528506e+00 +941 4700.00 2.07913227101295596810e+01 1.60187834530905237607e+00 2.68626920456559359351e+00 1.62445409927150707929e+00 2.60895876294087569747e+00 1.65730214241518791773e+00 2.38515509698207717193e+00 1.63845465791729227867e+00 2.68838822124039644734e+00 +942 4705.00 2.08172499280213152417e+01 1.60397389593820505205e+00 2.68978106299404373658e+00 1.62641567779667473026e+00 2.61222825071590003532e+00 1.65929030180262815364e+00 2.38838773469766341151e+00 1.64042903428341046990e+00 2.69167076888157863479e+00 +943 4710.00 2.08431778784477472755e+01 1.60606982857776525719e+00 2.69329400033579657858e+00 1.62837728249119795265e+00 2.61549785159436121162e+00 1.66127853344858222862e+00 2.39162088349817425481e+00 1.64240334192517312140e+00 2.69495368133912460706e+00 +944 4715.00 2.08691065596469549348e+01 1.60816614236751287415e+00 2.69680801680849935309e+00 1.63033891333434866056e+00 2.61876756335834182110e+00 1.66326683744632686235e+00 2.39485454238865580479e+00 1.64437758079076012940e+00 2.69823696008473623564e+00 +945 4720.00 2.08950359696497649509e+01 1.61026283646795587146e+00 2.70032311259870505538e+00 1.63230057031576292204e+00 2.62203738375883110834e+00 1.66525521389950337259e+00 2.39808871039488247234e+00 1.64635175082835072402e+00 2.70152060657975301439e+00 +946 4725.00 2.09209661065906331601e+01 1.61235991001887302154e+00 2.70383928790333172287e+00 1.63426225342507613902e+00 2.62530731058827626612e+00 1.66724366288066039310e+00 2.40132338656335697635e+00 1.64832585199648828933e+00 2.70480462229587592660e+00 +947 4730.00 2.09468969688113091365e+01 1.61445736218077251500e+00 2.70735654289856952914e+00 1.63622396264156044765e+00 2.62857734163912404313e+00 1.66923218449343879755e+00 2.40455856990949001784e+00 1.65029988425371731964e+00 2.70808900872553648398e+00 +948 4735.00 2.09728285544462522694e+01 1.61655519209343445652e+00 2.71087487776060731548e+00 1.63818569797557977985e+00 2.63184747468309154783e+00 1.67122077883111574970e+00 2.40779425947978431566e+00 1.65227384757930861880e+00 2.71137376733007240404e+00 +949 4740.00 2.09987608616299183950e+01 1.61865339892772985841e+00 2.71439429265527243373e+00 1.64014745942713435767e+00 2.63511770754371799086e+00 1.67320944598696796923e+00 2.41103045430001383664e+00 1.65424774193180623705e+00 2.71465889959155104449e+00 +950 4745.00 2.10246938887040606403e+01 1.62075198181307511547e+00 2.71791478775875239293e+00 1.64210924698586024917e+00 2.63838803804454258284e+00 1.67519818605427239788e+00 2.41426715342704545364e+00 1.65622156731120995232e+00 2.71794440697130879059e+00 +951 4750.00 2.10506276338031348416e+01 1.62285093990997708602e+00 2.72143636320578252707e+00 1.64407106066212094220e+00 2.64165846399873949224e+00 1.67718699914703428533e+00 2.41750435589701817563e+00 1.65819532369679167871e+00 2.72123029096177848629e+00 +952 4755.00 2.10765620952688905732e+01 1.62495027235821654088e+00 2.72495901917255078928e+00 1.64603290045591665880e+00 2.64492898324021163958e+00 1.67917588534816619728e+00 2.42074206075643427738e+00 1.66016901107818792838e+00 2.72451655304502438071e+00 +953 4760.00 2.11024972713394234347e+01 1.62704997832866404828e+00 2.72848275577306331741e+00 1.64799476638797592898e+00 2.64819959364431811721e+00 1.68116484476130922943e+00 2.42398026705179647777e+00 1.66214262944503343711e+00 2.72780319468238685587e+00 +954 4765.00 2.11284331603564830004e+01 1.62915005696110060107e+00 2.73200757317314524286e+00 1.64995665845829830864e+00 2.65147029305532688781e+00 1.68315387749010492158e+00 2.42721897383997164965e+00 1.66411617881805695696e+00 2.73109021736629520305e+00 +955 4770.00 2.11543697607654515025e+01 1.63125050740566823748e+00 2.73553347149716685749e+00 1.65191857669797648178e+00 2.65474107936932357532e+00 1.68514298362782932728e+00 2.43045818016746295598e+00 1.66608965919725893201e+00 2.73437762257881633587e+00 +956 4775.00 2.11803070707007883300e+01 1.63335132881251210435e+00 2.73906045085913163462e+00 1.65388052110701044839e+00 2.65801195046166860436e+00 1.68713216327812376427e+00 2.43369788510150053540e+00 1.66806307060336656001e+00 2.73766541179165256992e+00 +957 4780.00 2.12062450886078792678e+01 1.63545252033177557216e+00 2.74258851138341031017e+00 1.65584249171649200427e+00 2.66128290425954183718e+00 1.68912141654462932827e+00 2.43693808767822384098e+00 1.67003641304674510515e+00 2.74095358650759868269e+00 +958 4785.00 2.12321838129321136535e+01 1.63755408111360201140e+00 2.74611765318400724567e+00 1.65780448854714990148e+00 2.66455393869012224783e+00 1.69111074353098711498e+00 2.44017878698559087525e+00 1.67200968656885029517e+00 2.74424214818799194759e+00 +959 4790.00 2.12581232420152339557e+01 1.63965601031849894653e+00 2.74964787636456353681e+00 1.65976651161971200388e+00 2.66782505167022643278e+00 1.69310014435120215204e+00 2.44341998208046895513e+00 1.67398289119041043804e+00 2.74753109832526476453e+00 +960 4795.00 2.12840633743026224067e+01 1.64175830707588255031e+00 2.75317918103908398919e+00 1.66172856097563470534e+00 2.67109624118921828995e+00 1.69508961908818700515e+00 2.44666167201972495349e+00 1.67595602695288170558e+00 2.75082043840148227076e+00 +961 4800.00 2.13100042082396647913e+01 1.64386097055662450117e+00 2.75671156729048183465e+00 1.66369063664601091190e+00 2.67436750520536969944e+00 1.69707916786631130002e+00 2.44990385588095360703e+00 1.67792909389772049167e+00 2.75411016991943968790e+00 +962 4805.00 2.13359457422717468944e+01 1.64596399989014052778e+00 2.76024503520166986092e+00 1.66565273865156804334e+00 2.67763884172877331125e+00 1.69906879078921568826e+00 2.45314653273138638667e+00 1.67990209208711216426e+00 2.75740029434047517753e+00 +963 4810.00 2.13618879748442509481e+01 1.64806739424730186450e+00 2.76377958486592500975e+00 1.66761486704412709159e+00 2.68091024875915762138e+00 1.70105848796054148764e+00 2.45638970164861758505e+00 1.68187502156251245111e+00 2.76069081316738351717e+00 +964 4815.00 2.13878309046098458168e+01 1.65017115275752446202e+00 2.76731521634543087274e+00 1.66957702185478007451e+00 2.68418172434807189575e+00 1.70304825949429394782e+00 2.45963336169987822899e+00 1.68384788238610627609e+00 2.76398172789259444215e+00 +965 4820.00 2.14137745299102739693e+01 1.65227527459168022084e+00 2.77085192972310201398e+00 1.67153920312498360801e+00 2.68745326653670035810e+00 1.70503810549411349839e+00 2.46287751197312765328e+00 1.68582067464080620489e+00 2.76727303998781160033e+00 +966 4825.00 2.14397188493982078228e+01 1.65437975887918442552e+00 2.77438972506112158101e+00 1.67350141090655823994e+00 2.69072487342841348834e+00 1.70702802606364190119e+00 2.46612215154596103872e+00 1.68779339837843256333e+00 2.77056475094546517113e+00 +967 4830.00 2.14656638615190225039e+01 1.65648460478054526668e+00 2.77792860241131167598e+00 1.67546364525132407408e+00 2.69399654309548752806e+00 1.70901802132724767169e+00 2.46936727950633727602e+00 1.68976605369226295927e+00 2.77385686226834904389e+00 +968 4835.00 2.14916095649253904298e+01 1.65858981143554173876e+00 2.78146856182549129244e+00 1.67742590620073817043e+00 2.69726827369311239480e+00 1.71100809138857168357e+00 2.47261289493185065780e+00 1.69173864065484536034e+00 2.77714937543853102042e+00 +969 4840.00 2.15175559582699840178e+01 1.66069537801504663044e+00 2.78500960334511749039e+00 1.67938819381698434263e+00 2.70054006333502227832e+00 1.71299823636162007467e+00 2.47585899691046096294e+00 1.69371115935945715236e+00 2.78044229194844039199e+00 +970 4845.00 2.15435030401018146051e+01 1.66280130363811062821e+00 2.78855172702200970747e+00 1.68135050815188358264e+00 2.70381191022822742198e+00 1.71498845635003305254e+00 2.47910558454049168020e+00 1.69568360990973898694e+00 2.78373561329050867030e+00 +971 4850.00 2.15694508090735617145e+01 1.66490758747560541053e+00 2.79209493287689847207e+00 1.68331284925725666035e+00 2.70708381253828234136e+00 1.71697875147817979880e+00 2.48235265690990170029e+00 1.69765599240933218184e+00 2.78702934095716603480e+00 +972 4855.00 2.15953992638378871050e+01 1.66701422866731130412e+00 2.79563922093050942763e+00 1.68527521721601569737e+00 2.71035576851365300755e+00 1.71896912186006578516e+00 2.48560021311701362379e+00 1.69962830695151345672e+00 2.79032347644084355309e+00 +973 4860.00 2.16213484031510994043e+01 1.66912122636337145742e+00 2.79918459122430052233e+00 1.68723761206961753167e+00 2.71362777639244256989e+00 1.72095956760969603927e+00 2.48884825224978722957e+00 1.70160055365028806129e+00 2.79361802122360636247e+00 +974 4865.00 2.16472982255622277137e+01 1.67122857971392968501e+00 2.80273104375827175616e+00 1.68920003390097517304e+00 2.71689983445421079367e+00 1.72295008884107581082e+00 2.49209677340654511823e+00 1.70357273263002539920e+00 2.79691297681861428259e+00 +975 4870.00 2.16732487299312133189e+01 1.67333628785876609157e+00 2.80627857854278639493e+00 1.69116248277227265717e+00 2.72017194099924441986e+00 1.72494068565784575142e+00 2.49534577570633908650e+00 1.70554484402545836197e+00 2.80020834469757007312e+00 +976 4875.00 2.16991999150143684005e+01 1.67544434995838820157e+00 2.80982719557784488273e+00 1.69312495876642321591e+00 2.72344409437965140341e+00 1.72693135819473941872e+00 2.49859525823712846915e+00 1.70751688794022804530e+00 2.80350412638399593135e+00 +977 4880.00 2.17251517793607185070e+01 1.67755276515257523151e+00 2.81337689486344721956e+00 1.69508746194561110698e+00 2.72671629292681183543e+00 1.72892210656576161831e+00 2.50184522009723586677e+00 1.70948886454016024672e+00 2.80680032334959417284e+00 +978 4885.00 2.17511043220374951090e+01 1.67966153259147077392e+00 2.81692767639959384951e+00 1.69704999239274978429e+00 2.72998853506538186053e+00 1.73091293088491782193e+00 2.50509566041607723008e+00 1.71146077393926021593e+00 2.81009693709716001919e+00 +979 4890.00 2.17770575415937273078e+01 1.68177065142521930952e+00 2.82047954015519186655e+00 1.69901255019075092534e+00 2.73326081920965435756e+00 1.73290383126621305721e+00 2.50834657829197515966e+00 1.71343261630335286227e+00 2.81339396911912409394e+00 +980 4895.00 2.18030114369929961526e+01 1.68388012079360005480e+00 2.82403248610951340680e+00 1.70097513542252887220e+00 2.73653314380501333503e+00 1.73489480784438088179e+00 2.51159797283361774234e+00 1.71540439177753656352e+00 2.81669142091828028640e+00 +981 4900.00 2.18289660070952642457e+01 1.68598993984675615820e+00 2.82758651425219387221e+00 1.70293774818135901228e+00 2.73980550734866623586e+00 1.73688586072306150321e+00 2.51484984316005544258e+00 1.71737610051727229710e+00 2.81998929398705922011e+00 +982 4905.00 2.18549212507604693201e+01 1.68810010773483210045e+00 2.83114162453141249287e+00 1.70490038853979131162e+00 2.74307790835854392597e+00 1.73887699002662543535e+00 2.51810218837997679131e+00 1.71934774269874979247e+00 2.82328758982825656076e+00 +983 4910.00 2.18808771667449128984e+01 1.69021062359760754212e+00 2.83469781691607858320e+00 1.70686305659110182376e+00 2.74635034539403743992e+00 1.74086819587944052756e+00 2.52135500762279596287e+00 1.72131931847743069319e+00 2.82658630993430204370e+00 +984 4915.00 2.19068337541158442150e+01 1.69232148658522563167e+00 2.83825509135437004105e+00 1.70882575244929624247e+00 2.74962281703526567611e+00 1.74285947840587684965e+00 2.52460829999720148820e+00 1.72329082802950428466e+00 2.82988545580799044643e+00 +985 4920.00 2.19327910117331974504e+01 1.69443269585819411560e+00 2.84181344780483158274e+00 1.71078847618692275745e+00 2.75289532191416608242e+00 1.74485083771993898516e+00 2.52786206464297213969e+00 1.72526227155188927043e+00 2.83318502894175239248e+00 +986 4925.00 2.19587489385605678649e+01 1.69654425053556501268e+00 2.84537288619491324226e+00 1.71275122791798661837e+00 2.75616785867304203705e+00 1.74684227395636071378e+00 2.53111630065843096205e+00 1.72723364921041100395e+00 2.83648503083838354755e+00 +987 4930.00 2.19847075335615471658e+01 1.69865614978820955727e+00 2.84893340648315973596e+00 1.71471400773576498899e+00 2.75944042602674555198e+00 1.74883378722914706316e+00 2.53437100718335850402e+00 1.72920496122271516448e+00 2.83978546299031231470e+00 +988 4935.00 2.20106667956997270608e+01 1.70076839275590763201e+00 2.85249500858665738789e+00 1.71667681574389874299e+00 2.76271302269012686281e+00 1.75082537765230283888e+00 2.53762618335753309395e+00 1.73117620775462777161e+00 2.84308632690033569190e+00 +989 4940.00 2.20366267240423283624e+01 1.70288097856807474351e+00 2.85605769242249474260e+00 1.71863965205639313005e+00 2.76598564745058617120e+00 1.75281704537092575258e+00 2.54088182828964326276e+00 1.73314738903415888061e+00 2.84638762406088297041e+00 +990 4945.00 2.20625873176565931999e+01 1.70499390638521886032e+00 2.85962145792848554393e+00 1.72060251678725295577e+00 2.76925829909552412289e+00 1.75480879049902105393e+00 2.54413794111946778287e+00 1.73511850526859068289e+00 2.84968935598511308172e+00 +991 4950.00 2.20885485755061061752e+01 1.70710717535748357498e+00 2.86318630501135373834e+00 1.72256541002975516186e+00 2.77253097648489044147e+00 1.75680061317132141241e+00 2.54739452097642260497e+00 1.73708955666520514782e+00 2.85299152417582080332e+00 +992 4955.00 2.21145104966580916539e+01 1.70922078461428439411e+00 2.86675223357782194000e+00 1.72452833191863352802e+00 2.77580367849936049396e+00 1.75879251349146881189e+00 2.55065156701065109957e+00 1.73906054344164839875e+00 2.85629413011507216069e+00 +993 4960.00 2.21404730803870819500e+01 1.71133473330576468818e+00 2.87031924353461453947e+00 1.72649128255752848382e+00 2.77907640406106937192e+00 1.76078449161492400776e+00 2.55390907834120461928e+00 1.74103146583629486699e+00 2.85959717530566326360e+00 +994 4965.00 2.21664363256566439020e+01 1.71344902058206871587e+00 2.87388733475736080081e+00 1.72845426207080965497e+00 2.78234915214397027228e+00 1.76277654764532787368e+00 2.55716705411822697869e+00 1.74300232406679045383e+00 2.86290066126075126718e+00 +995 4970.00 2.21924002316376594024e+01 1.71556364558297547163e+00 2.87745650716314882445e+00 1.73041727058284577900e+00 2.78562192174274381173e+00 1.76476868171741441138e+00 2.56042549348149872657e+00 1.74497311839223767649e+00 2.86620458947276768313e+00 +996 4975.00 2.22183647975010067910e+01 1.71767860745862899208e+00 2.88102676061724372047e+00 1.73238030820764232764e+00 2.78889471192462412574e+00 1.76676089395555258044e+00 2.56368439557079774715e+00 1.74694384903028265832e+00 2.86950896143414269090e+00 +997 4980.00 2.22443300224175501967e+01 1.71979390533844478384e+00 2.88459809501600705772e+00 1.73434337509029701252e+00 2.79216752176720373058e+00 1.76875318450483920429e+00 2.56694375953626829912e+00 1.74891451624002813858e+00 2.87281377866839982005e+00 +998 4985.00 2.22702959056618006173e+01 1.72190953838293081546e+00 2.88817051021433979230e+00 1.73630647135517879320e+00 2.79544035039989813285e+00 1.77074555347928042082e+00 2.57020358451769093122e+00 1.75088512028057707859e+00 2.87611904264724005387e+00 +999 4990.00 2.22962624465082797087e+01 1.72402550573186585936e+00 2.89174400608787252054e+00 1.73826959711629225325e+00 2.79871319702467369339e+00 1.77273800100324496754e+00 2.57346386965484397180e+00 1.75285566141103088533e+00 2.87942475490455151999e+00 +1000 4995.00 2.23222296440242118365e+01 1.72614180651466653238e+00 2.89531858249150930718e+00 1.74023275253946385632e+00 2.80198606084349277623e+00 1.77473052721146595800e+00 2.57672461411860043157e+00 1.75482613989049296421e+00 2.88273091691203653397e+00 +1001 5000.00 2.23481974976913946307e+01 1.72825843989184013694e+00 2.89889423929051526230e+00 1.74219593773869796394e+00 2.80525894112050444562e+00 1.77672313223867672782e+00 2.57998581704873908294e+00 1.75679655599879347427e+00 2.88603753018285358323e+00 +1002 5005.00 2.23741658363985109759e+01 1.73037540499280195760e+00 2.90247097632942896439e+00 1.74415915285909273180e+00 2.80853183718204180153e+00 1.77871581621961105668e+00 2.58324747759540374048e+00 1.75876691000539953080e+00 2.88934459621979744526e+00 +1003 5010.00 2.24001344894488276793e+01 1.73249270096769625304e+00 2.90604879346315359001e+00 1.74612239804574476132e+00 2.81180474838553218220e+00 1.78070857926827352813e+00 2.58650959490873910696e+00 1.76073720219014195898e+00 2.89265211651529918768e+00 +1004 5015.00 2.24261034569459702936e+01 1.73461032695630179568e+00 2.90962769051549940968e+00 1.74808567344375220820e+00 2.81507767412985598909e+00 1.78270142152976207583e+00 2.58977216815961552854e+00 1.76270743285357900376e+00 2.89596009258251640972e+00 +1005 5020.00 2.24520727387862990554e+01 1.73672828209839869018e+00 2.91320766732064173610e+00 1.75004897919821256203e+00 2.81835061386571616993e+00 1.78469434312844499324e+00 2.59303519650854141787e+00 1.76467760227554193442e+00 2.89926852591388017899e+00 +1006 5025.00 2.24780423350734643861e+01 1.73884656554413075114e+00 2.91678872371275232922e+00 1.75201231546458613408e+00 2.82162356709563688639e+00 1.78668734419905717026e+00 2.59629867909529687964e+00 1.76664771076695381602e+00 2.90257741802254987107e+00 +1007 5030.00 2.25040122458074627332e+01 1.74096517642291326311e+00 2.92037085951564412412e+00 1.75397568238797152418e+00 2.82489653336359625158e+00 1.78868042487633016613e+00 2.59956261509075314819e+00 1.76861775861800896159e+00 2.90588677039059195550e+00 +1008 5035.00 2.25299824709882869911e+01 1.74308411388489004068e+00 2.92395407454276146098e+00 1.75593908013419452985e+00 2.82816951227575952288e+00 1.79067358528463427270e+00 2.60282700366578234608e+00 1.77058774616035941030e+00 2.90919658453116447561e+00 +1009 5040.00 2.25559530105123080546e+01 1.74520337705947636842e+00 2.92753836860755178861e+00 1.75790250884835130840e+00 2.83144250344865433533e+00 1.79266682555870282556e+00 2.60609184397052828785e+00 1.77255767368419969721e+00 2.91250686194706220888e+00 +1010 5045.00 2.25819238644831514762e+01 1.74732296510718043692e+00 2.93112374150273202744e+00 1.75986596868590439158e+00 2.83471550661281446182e+00 1.79466014584363287021e+00 2.60935713518622680596e+00 1.77452754153154446115e+00 2.91581760413071622295e+00 +1011 5050.00 2.26078950327971952561e+01 1.74944287714705315473e+00 2.93471019303138502821e+00 1.76182945982304350885e+00 2.83798852147804492319e+00 1.79665354626379336622e+00 2.61262287646302215904e+00 1.77649735001331787743e+00 2.91912881259528456113e+00 +1012 5055.00 2.26338665155580720523e+01 1.75156311232923833643e+00 2.93829772300695735154e+00 1.76379298242559334753e+00 2.84126154785779183598e+00 1.79864702695391787124e+00 2.61588906698214973545e+00 1.77846709948189873884e+00 2.92244048883319917920e+00 +1013 5060.00 2.26598383127657712066e+01 1.75368366979351586465e+00 2.94188633119107345593e+00 1.76575653664901643936e+00 2.84453458558622962471e+00 1.80064058803837601097e+00 2.61915570591448165771e+00 1.78043679024820966639e+00 2.92575263433688892434e+00 +1014 5065.00 2.26858104243166671665e+01 1.75580454867966517796e+00 2.94547601738681619210e+00 1.76772012265913813778e+00 2.84780763455971674958e+00 1.80263422967262898489e+00 2.62242279242052500621e+00 1.78240642268535931514e+00 2.92906525061951406030e+00 +1015 5070.00 2.27117828503143961427e+01 1.75792574812746571489e+00 2.94906678135581090672e+00 1.76968374064251210420e+00 2.85108069472643466113e+00 1.80462795197068182063e+00 2.62569032568151694562e+00 1.78437599711463423802e+00 2.93237833918386847643e+00 +1016 5075.00 2.27377555907589510298e+01 1.76004726727669758013e+00 2.95265862288041169847e+00 1.77164739077532806810e+00 2.85435376608638025075e+00 1.80662175507763222981e+00 2.62895830487869286429e+00 1.78634551391950613386e+00 2.93569190151201819816e+00 +1017 5080.00 2.27637286456503389331e+01 1.76216910525677583621e+00 2.95625154173260806800e+00 1.77361107321304745099e+00 2.85762684868101235480e+00 1.80861563912821310396e+00 2.63222672917256117486e+00 1.78831497343162637570e+00 2.93900593912748764325e+00 +1018 5085.00 2.27897020148849200893e+01 1.76429126120747969964e+00 2.95984553765329794217e+00 1.77557478815258851235e+00 2.86089994261397118080e+00 1.81060960426752215469e+00 2.63549559775472053147e+00 1.79028437603446666238e+00 2.94232045351234194897e+00 +1019 5090.00 2.28156756984626909457e+01 1.76641373426858994122e+00 2.96344061041447037752e+00 1.77753853577014075960e+00 2.86417304805108230426e+00 1.81260365060956463168e+00 2.63876490979604483300e+00 1.79225372209077082886e+00 2.94563544617974049089e+00 +1020 5095.00 2.28416496965909345818e+01 1.76853652359024882124e+00 2.96703675976738789899e+00 1.77950231625225807619e+00 2.86744616518926420667e+00 1.81459777830980151236e+00 2.64203466447776813553e+00 1.79422301198401012989e+00 2.94895091861174885040e+00 +1021 5100.00 2.28676240090623679180e+01 1.77065962829150902458e+00 2.97063398544258339129e+00 1.78146612977512996956e+00 2.87071929429798222699e+00 1.81659198749260242245e+00 2.64530486099149220180e+00 1.79619224608729255444e+00 2.95226687232152729123e+00 +1022 5105.00 2.28935986358769945070e+01 1.77278304752251347765e+00 2.97423228719131804709e+00 1.78342997654603863111e+00 2.87399243567779638653e+00 1.81858627829270091958e+00 2.64857549849772322403e+00 1.79816142479445395530e+00 2.95558330880150510467e+00 +1023 5110.00 2.29195735772420938758e+01 1.77490678041267768705e+00 2.97783166474412563929e+00 1.78539385673081008044e+00 2.87726558970181445218e+00 1.82058065086555753709e+00 2.65184657620879082884e+00 1.80013054849932974122e+00 2.95890022955447840047e+00 +1024 5115.00 2.29455488329503793921e+01 1.77703082610178175749e+00 2.98143211783153949668e+00 1.78735777054708955269e+00 2.88053875680532733838e+00 1.82257510532517863489e+00 2.65511809328520254070e+00 1.80209961760612036308e+00 2.96221763608324017980e+00 +1025 5120.00 2.29715244031054979246e+01 1.77915518372960468341e+00 2.98503364617372879408e+00 1.78932171817106744349e+00 2.88381193745472197421e+00 1.82456964182702519039e+00 2.65839004892892161180e+00 1.80406863249829751972e+00 2.96553552986985780038e+00 +1026 5125.00 2.29975002876038061572e+01 1.78127985241519826154e+00 2.98863624949086315041e+00 1.79128569982039009822e+00 2.88708513217856488353e+00 1.82656426049546594115e+00 2.66166244233154980492e+00 1.80603759361115323578e+00 2.96885391242748974960e+00 +1027 5130.00 2.30234764865489474062e+01 1.78340483130870608441e+00 2.99223992749274758651e+00 1.79324971568161051216e+00 2.89035834156761151092e+00 1.82855896147559926490e+00 2.66493527266395702213e+00 1.80800650133852358614e+00 2.97217278524856753918e+00 +1028 5135.00 2.30494529999409252241e+01 1.78553011954990781263e+00 2.99584467988918667913e+00 1.79521376595164716683e+00 2.89363156625407169642e+00 1.83055374490215760908e+00 2.66820853913847333416e+00 1.80997535611570059544e+00 2.97549214983588417027e+00 +1029 5140.00 2.30754298276760856368e+01 1.78765571625785479881e+00 2.99945050637962218332e+00 1.79717785084814618557e+00 2.89690480694270346973e+00 1.83254861090987497541e+00 2.67148224092596997536e+00 1.81194415835724842445e+00 2.97881200767150788877e+00 +1030 5145.00 2.31014069698580861711e+01 1.78978162057232603743e+00 3.00305740667385911991e+00 1.79914197057838909366e+00 2.90017806437972414102e+00 1.83454355964384796529e+00 2.67475637723877524010e+00 1.81391290849845931987e+00 2.98213236026859584982e+00 +1031 5150.00 2.31273844263832693002e+01 1.79190783163310229931e+00 3.00666538044024633791e+00 1.80110612534965874865e+00 2.90345133937353150344e+00 1.83653859123881035842e+00 2.67803094725812540489e+00 1.81588160697462530635e+00 2.98545320910921541113e+00 +1032 5155.00 2.31533621974589287618e+01 1.79403434855923427094e+00 3.01027442737822426011e+00 1.80307031535887274387e+00 2.90672463277398263060e+00 1.83853370582949615653e+00 2.68130595018598372192e+00 1.81785025424176738262e+00 2.98877455569616179432e+00 +1033 5160.00 2.31793402828777814761e+01 1.79616117051122992088e+00 3.01388454717687004347e+00 1.80503454084440462246e+00 2.90999794549311863179e+00 1.84052890356100151692e+00 2.68458138521395150988e+00 1.81981885072481319732e+00 2.99209640152186429063e+00 +1034 5165.00 2.32053186826398167852e+01 1.79828829659777644778e+00 3.01749573949416971530e+00 1.80699880201353746401e+00 2.91327127851552880600e+00 1.84252418456806021929e+00 2.68785725154399202097e+00 1.82178739690051161304e+00 2.99541874807875396769e+00 +1035 5170.00 2.32312973969523284268e+01 1.80041572595865329021e+00 3.02110800401919821212e+00 1.80896309907355279378e+00 2.91654463286725906812e+00 1.84451954898540604333e+00 2.69113354837806983966e+00 1.82375589320415487649e+00 2.99874159687999064516e+00 +1036 5175.00 2.32572764256080333212e+01 1.80254345772327639885e+00 3.02472134039957740725e+00 1.81092743226282526514e+00 2.91981800960544868317e+00 1.84651499695813647861e+00 2.69441027490778495235e+00 1.82572434011249185026e+00 3.00206494939727575044e+00 +1037 5180.00 2.32832557686069279157e+01 1.80467149103142499023e+00 3.02833574831401985961e+00 1.81289180178863640336e+00 2.92309140989087623552e+00 1.84851052862098375051e+00 2.69768743033510238760e+00 1.82769273810227073085e+00 3.00538880712303946297e+00 +1038 5185.00 2.33092354260526555265e+01 1.80679982500215063901e+00 3.03195122739978151216e+00 1.81485620788936108383e+00 2.92636483489468535168e+00 1.85050614410868208282e+00 2.70096501387234910752e+00 1.82966108762951207289e+00 3.00871317157044071422e+00 +1039 5190.00 2.33352153979452090482e+01 1.80892845877523278375e+00 3.03556777732521165802e+00 1.81682065078264498581e+00 2.92963828587093111366e+00 1.85250184357669289703e+00 2.70424302471112643076e+00 1.83162938918132933708e+00 3.01203804422154730602e+00 +1040 5195.00 2.33611956842846026916e+01 1.81105739149045086300e+00 3.03918539771720253029e+00 1.81878513071722691663e+00 2.93291176410476461811e+00 1.85449762714938493069e+00 2.70752146206376220761e+00 1.83359764325519836170e+00 3.01536342656878808555e+00 +1041 5200.00 2.33871762849671789297e+01 1.81318662225649274156e+00 3.04280408822337555819e+00 1.82074964790038840157e+00 2.93618527096424486444e+00 1.85649349497185633950e+00 2.71080032512185553628e+00 1.83556585032786823142e+00 3.01868932010459456450e+00 +1042 5205.00 2.34131572000965917368e+01 1.81531615022350178990e+00 3.04642384849134950642e+00 1.82271420258086846999e+00 2.93945880784852642265e+00 1.85848944717883957090e+00 2.71407961310810064148e+00 1.83753401090718004873e+00 3.02201572631103276834e+00 +1043 5210.00 2.34391384296728304548e+01 1.81744597451052913861e+00 3.05004467813765378637e+00 1.82467879499704088708e+00 2.94273237620858330033e+00 1.86048548391543300262e+00 2.71735932522446033133e+00 1.83950212548024638615e+00 3.02534264669089791866e+00 +1044 5215.00 2.34651199735922659784e+01 1.81957609424699096046e+00 3.05366657677881647714e+00 1.82664342537691615220e+00 2.94600597757830273693e+00 1.86248160531636930415e+00 2.72063946068326378835e+00 1.84147019456527250014e+00 3.02867008272625604093e+00 +1045 5220.00 2.34911018319585345182e+01 1.82170650856230231796e+00 3.05728954405209396583e+00 1.82860809396923285064e+00 2.94927961351230027987e+00 1.86447781152674618710e+00 2.72392001867611011079e+00 1.84343821867009904913e+00 3.03199803591990191265e+00 +1046 5225.00 2.35170840046679892055e+01 1.82383721658587849568e+00 3.06091357957401433154e+00 1.83057280102272934563e+00 2.95255328562737551223e+00 1.86647410268129676503e+00 2.72720099843605723322e+00 1.84540619831293151165e+00 3.03532650774353784939e+00 +1047 5230.00 2.35430664918242804617e+01 1.82596821745749937627e+00 3.06453868294037867770e+00 1.83253754676541569246e+00 2.95582699560251160875e+00 1.86847047891475392944e+00 2.73048239915470380978e+00 1.84737413401197470009e+00 3.03865549969995951685e+00 +1048 5235.00 2.35690492934273976289e+01 1.82809951027548822644e+00 3.06816485375734959717e+00 1.83450233146675856233e+00 2.95910074514778687060e+00 1.87046694037221628015e+00 2.73376422006510733098e+00 1.84934202630616173479e+00 3.04198501326086745422e+00 +1049 5240.00 2.35950324094773442596e+01 1.83023109420035257067e+00 3.07179209163109190328e+00 1.83646715536513238654e+00 2.96237453605618972219e+00 1.87246348718841604253e+00 2.73704646035886689504e+00 1.85130987573442595817e+00 3.04531504992905732720e+00 +1050 5245.00 2.36210158398704876959e+01 1.83236296833041567567e+00 3.07542039615740536718e+00 1.83843201870927530628e+00 2.96564837015180282620e+00 1.87446011950845137228e+00 2.74032911925867628256e+00 1.85327768281497262670e+00 3.04864561118659649352e+00 +1051 5250.00 2.36469995847104570430e+01 1.83449513181582157806e+00 3.07904976693209109229e+00 1.84039692176865465889e+00 2.96892224930016412898e+00 1.87645683747741887082e+00 2.74361219598722705371e+00 1.85524544810746339074e+00 3.05197669851554964637e+00 +1052 5255.00 2.36729836438936303011e+01 1.83662758376525725446e+00 3.08268020353022009772e+00 1.84236186478164376545e+00 2.97219617543936021065e+00 1.87845364121968905202e+00 2.74689568974648379296e+00 1.85721317215083048247e+00 3.05530831339798458757e+00 +1053 5260.00 2.36989680175236223647e+01 1.83876032331850236545e+00 3.08631170552686384667e+00 1.84432684800734580932e+00 2.97547015054893426722e+00 1.88045053088035785116e+00 2.75017959975913850457e+00 1.85918085551510081643e+00 3.05864045732633105246e+00 +1054 5265.00 2.37249527056004474446e+01 1.84089334958424410971e+00 3.08994427251782388666e+00 1.84629187172559161567e+00 2.97874417662915913496e+00 1.88244750660452342395e+00 2.75346392524788319278e+00 1.86114849873920706891e+00 3.06197313179302055275e+00 +1055 5270.00 2.37509377081241019880e+01 1.84302666170226192577e+00 3.09357790405744159656e+00 1.84825693618511932570e+00 2.98201825578394519312e+00 1.88444456852691932802e+00 2.75674866541468333025e+00 1.86311610241390268605e+00 3.06530633825939036186e+00 +1056 5275.00 2.37769230249909568897e+01 1.84516025879160783241e+00 3.09721259971042739423e+00 1.85022204165539583265e+00 2.98529239011720770591e+00 1.88644171678227801081e+00 2.76003381950295834102e+00 1.86508366709884976231e+00 3.06864007822823614546e+00 +1057 5280.00 2.38029086562009943862e+01 1.84729413998169689215e+00 3.10084835905185052241e+00 1.85218718839552298761e+00 2.98856658179504153239e+00 1.88843895151569785007e+00 2.76331938670430909966e+00 1.86705119336407321384e+00 3.07197435316089562107e+00 +1058 5285.00 2.38288946019615117677e+01 1.84942830438121630365e+00 3.10448518162569175871e+00 1.85415237668533250392e+00 2.99184083303536541010e+00 1.89043627286191173731e+00 2.76660536626215591838e+00 1.86901868180032715294e+00 3.07530916456016312210e+00 +1059 5290.00 2.38548808620652117440e+01 1.85156275112994594956e+00 3.10812306699665930054e+00 1.85611760679429016463e+00 2.99511514609755291616e+00 1.89243368096601716211e+00 2.76989175737846293757e+00 1.87098613297763716190e+00 3.07864451389774140821e+00 +1060 5295.00 2.38808674366157482893e+01 1.85369747933657302852e+00 3.11176201469836799518e+00 1.85808287900222723898e+00 2.99838952327207097781e+00 1.89443117596274723802e+00 2.77317855929665046943e+00 1.87295354751784959291e+00 3.08198040264533279498e+00 +1061 5300.00 2.39068543255094745348e+01 1.85583248814087697909e+00 3.11540202427479773206e+00 1.86004819356824602217e+00 3.00166396692193426787e+00 1.89642875798683530064e+00 2.77646577122904769652e+00 1.87492092599098936212e+00 3.08531683229536879409e+00 +1062 5305.00 2.39328415288500302438e+01 1.85796777664118129003e+00 3.11904309528029166643e+00 1.86201355077217756140e+00 3.00493847942052205724e+00 1.89842642719374343763e+00 2.77975339238798246910e+00 1.87688826901890282173e+00 3.08865380431954994478e+00 +1063 5310.00 2.39588290466374154164e+01 1.86010334397726517786e+00 3.12268522721737307180e+00 1.86397895091457987959e+00 3.00821306320339809659e+00 1.90042418369747601048e+00 2.78304142201687465530e+00 1.87885557719234430607e+00 3.09199132018957989487e+00 +1064 5315.00 2.39848168787679973946e+01 1.86223918926818021724e+00 3.12632841964038599158e+00 1.86594439425455660420e+00 3.01148772073721859854e+00 1.90242202765349488480e+00 2.78632985931768972776e+00 1.88082285113315883507e+00 3.09532938139788882381e+00 +1065 5320.00 2.40108050253454088363e+01 1.86437531163297798287e+00 3.12997267206221785329e+00 1.86790988108230227027e+00 3.01476245453009639164e+00 1.90441995919653339620e+00 2.78961870354421126450e+00 1.88279009146319342705e+00 3.09866798940581578137e+00 +1066 5325.00 2.40367934863696497416e+01 1.86651171019070982737e+00 3.13361798400611890614e+00 1.86987541169837556687e+00 3.01803726712123587816e+00 1.90641797846132443617e+00 2.79290795389840473817e+00 1.88475729880429354601e+00 3.10200714569542590482e+00 +1067 5330.00 2.40627822617370803471e+01 1.86864838405006250532e+00 3.13726435498497702170e+00 1.87184098637224338724e+00 3.02131216110166223032e+00 1.90841608558260245054e+00 2.79619760961332586291e+00 1.88672447377830554416e+00 3.10534685173842195383e+00 +1068 5335.00 2.40887713516549872850e+01 1.87078533235081656549e+00 3.14091178450131547351e+00 1.87380660540446442042e+00 3.02458713909349352633e+00 1.91041428070546359663e+00 2.79948766993239495093e+00 1.88869161701743948356e+00 3.10868710900650802031e+00 +1069 5340.00 2.41147607558124477123e+01 1.87292255420165831836e+00 3.14456027206802124496e+00 1.87577226908523320148e+00 3.02786220373957482010e+00 1.91241256397500603015e+00 2.80277813405757658671e+00 1.89065872917463395630e+00 3.11202791898174790930e+00 +1070 5345.00 2.41407504745203738139e+01 1.87506004872163978270e+00 3.14820981718761805368e+00 1.87773797771510952970e+00 3.03113735772420911374e+00 1.91441093550523411260e+00 2.80606900123229108246e+00 1.89262581089246273436e+00 3.11536928312548067055e+00 +1071 5350.00 2.41667405075714931684e+01 1.87719781501944793511e+00 3.15186041935226413102e+00 1.87970373157392356411e+00 3.03441260376279009492e+00 1.91640939545161037572e+00 2.80936027068959637276e+00 1.89459286280313699002e+00 3.11871120290940995190e+00 +1072 5355.00 2.41927308549658022230e+01 1.87933585223486288029e+00 3.15551207805411904062e+00 1.88166953098296252378e+00 3.03768794462253399757e+00 1.91840794395923142091e+00 2.81265194165218268552e+00 1.89655988558032206903e+00 3.12205367981560177881e+00 +1073 5360.00 2.42187215169105840573e+01 1.88147415945584284280e+00 3.15916479277497774802e+00 1.88363537622205701183e+00 3.04096338304992652724e+00 1.92040658114210294194e+00 2.81594401334274380133e+00 1.89852687987695722960e+00 3.12539671529502971481e+00 +1074 5365.00 2.42447124931985555918e+01 1.88361273583253274744e+00 3.16281856299663477472e+00 1.88560126760213031538e+00 3.04423892186400424364e+00 1.92240530714532220635e+00 2.81923648500469958833e+00 1.90049384634598039767e+00 3.12874031082975978535e+00 +1075 5370.00 2.42707037838297168264e+01 1.88575158045289037467e+00 3.16647338821124924024e+00 1.88756720543410527746e+00 3.04751456388380148610e+00 1.92440412211398625963e+00 2.82252935587110798110e+00 1.90246078568178678125e+00 3.13208446788113237247e+00 +1076 5375.00 2.42966953889077146300e+01 1.88789069244633167521e+00 3.17012926787988824628e+00 1.88953319000817709927e+00 3.05079031198017602833e+00 1.92640302618282888147e+00 2.82582262516465920754e+00 1.90442769854767823823e+00 3.13542918792084712720e+00 +1077 5380.00 2.43226873084325418972e+01 1.89003007092154495794e+00 3.17378620148434631432e+00 1.89149922165599648771e+00 3.05406616900325289521e+00 1.92840201947621880940e+00 2.82911629211841164633e+00 1.90639458561732233477e+00 3.13877447241024443159e+00 +1078 5385.00 2.43486795424042021807e+01 1.89216971499757979913e+00 3.17744418847532639205e+00 1.89346530066775908807e+00 3.05734213785498321059e+00 1.93040110213925397709e+00 2.83241035596542145569e+00 1.90836144758511250252e+00 3.14212032281066155903e+00 +1079 5390.00 2.43746720907190486116e+01 1.89430962378312495176e+00 3.18110322831389558118e+00 1.89543142737511516316e+00 3.06061822144767781140e+00 1.93240027430666749808e+00 2.83570481593874390569e+00 1.91032828514544439358e+00 3.14546674059380082511e+00 +1080 5395.00 2.44006649534807280588e+01 1.89644979640759525630e+00 3.18476332046111965113e+00 1.89739760206826013622e+00 3.06389442272474310514e+00 1.93439953611319270799e+00 2.83899967128180108489e+00 1.91229509898234861787e+00 3.14881372722100039141e+00 +1081 5400.00 2.44266581306892440750e+01 1.89859023196931397948e+00 3.18842446436770110552e+00 1.89936382508920886814e+00 3.06717074460885319453e+00 1.93639888770392665229e+00 2.84229492122764826334e+00 1.91426188980058409328e+00 3.15216128414323559781e+00 +1082 5405.00 2.44526516222409462387e+01 1.90073092957696854199e+00 3.19208665948434466841e+00 1.90133009673852093613e+00 3.07044719006414323914e+00 1.93839832919287480273e+00 2.84559056498861506768e+00 1.91622865831527389169e+00 3.15550941283220787170e+00 +1083 5410.00 2.44786454282394814186e+01 1.90287188835997422842e+00 3.19574990525138602493e+00 1.90329641734784726914e+00 3.07372376205474528987e+00 1.94039786073549858081e+00 2.84888660182884922989e+00 1.91819540523117648689e+00 3.15885811474925537468e+00 +1084 5415.00 2.45046395486848460621e+01 1.90501310741665430548e+00 3.19941420110916574515e+00 1.90526278723847464214e+00 3.07700046356552059379e+00 1.94239748244580323622e+00 2.85218303097104364241e+00 1.92016213126341495077e+00 3.16220739134535389070e+00 +1085 5420.00 2.45306339834734039584e+01 1.90715458586606034785e+00 3.20307954648765802474e+00 1.90722920672132678632e+00 3.08027729758132906568e+00 1.94439719447925063456e+00 2.85547985164825446347e+00 1.92212883712711257722e+00 3.16555724408183936092e+00 +1086 5425.00 2.45566287327087913184e+01 1.90929632281687977624e+00 3.20674594081683617119e+00 1.90919567614878271655e+00 3.08355426706630630918e+00 1.94639699694984491529e+00 2.85877706310390289346e+00 1.92409552356848445598e+00 3.16890767440968668112e+00 +1087 5430.00 2.45826237962873719312e+01 1.91143831737779912316e+00 3.21041338352667526834e+00 1.91116219582140156596e+00 3.08683137503640381283e+00 1.94839689001304838811e+00 2.86207466456068093663e+00 1.92606219130265321482e+00 3.17225868380059861096e+00 +1088 5435.00 2.46086191744164217710e+01 1.91358056865750669751e+00 3.21408187404715040003e+00 1.91312876609156257146e+00 3.09010862445575495983e+00 1.95039687378286585862e+00 2.86537265527237394735e+00 1.92802884106547067766e+00 3.17561027369518544816e+00 +1089 5440.00 2.46346148667850215475e+01 1.91572307576468925383e+00 3.21775141177714241181e+00 1.91509538728055295209e+00 3.09338601831958515120e+00 1.95239694840439481638e+00 2.86867103447203675159e+00 1.92999547361351608821e+00 3.17896244554442075625e+00 +1090 5445.00 2.46606108737041012091e+01 1.91786583781839814478e+00 3.22142199613626267762e+00 1.91706205972002408089e+00 3.09666355960239148004e+00 1.95439711400200444302e+00 2.87196980139272772803e+00 1.93196208968264060424e+00 3.18231520082000773897e+00 +1091 5450.00 2.46866071949663634655e+01 1.92000885391695641502e+00 3.22509362653375708518e+00 1.91902878375199104077e+00 3.09994125127867059533e+00 1.95639737071042785210e+00 2.87526895527786674478e+00 1.93392869001905953752e+00 3.18566854095219120779e+00 +1092 5455.00 2.47126038306754551854e+01 1.92215212317941586129e+00 3.22876630238923612026e+00 1.92099555971846935876e+00 3.10321909631255632434e+00 1.95839771867476297729e+00 2.87856849535014580610e+00 1.93589527540007999562e+00 3.18902246739194605851e+00 +1093 5460.00 2.47386007808313834744e+01 1.92429564469373559632e+00 3.23244002308085320863e+00 1.92296238795111018582e+00 3.10649709763708825605e+00 1.96039815800901440213e+00 2.88186842087371397625e+00 1.93786184656155380246e+00 3.19237698161097505078e+00 +1094 5465.00 2.47645980453305050162e+01 1.92643941758933046060e+00 3.23611478801785512616e+00 1.92492926879192927103e+00 3.10977525819567235388e+00 1.96239868884791612835e+00 2.88516873107126459175e+00 1.93982840429115221959e+00 3.19573208503952344017e+00 +1095 5470.00 2.47905956242764560216e+01 1.92858344095416023301e+00 3.23979059659912360658e+00 1.92689620259330540719e+00 3.11305358090061945475e+00 1.96439931132620038134e+00 2.88846942518621707663e+00 1.94179494935581886672e+00 3.19908777911820108031e+00 +1096 5475.00 2.48165935175655967271e+01 1.93072771390727648821e+00 3.24346744819244836577e+00 1.92886318969725412131e+00 3.11633206862278733240e+00 1.96640002557860182897e+00 2.89177050245162758912e+00 1.94376148252249780768e+00 3.20244406531871117494e+00 +1097 5480.00 2.48425917253015668962e+01 1.93287223554700182682e+00 3.24714534220707617962e+00 1.93083023044579094041e+00 3.11961072424339436182e+00 1.96840083172948854262e+00 2.89507196212128237178e+00 1.94572800458922423594e+00 3.20580094506093526974e+00 +1098 5485.00 2.48685902474843700816e+01 1.93501700498202322542e+00 3.25082427800043305410e+00 1.93279732520165947740e+00 3.12288955059184170082e+00 1.97040172990323037006e+00 2.89837380342823669466e+00 1.94769451633330525908e+00 3.20915841979584737231e+00 +1099 5490.00 2.48945890840103665198e+01 1.93716202131066483894e+00 3.25450425497139983477e+00 1.93476447429651066123e+00 3.12616855046643671301e+00 1.97240272024492435676e+00 2.90167602560554849234e+00 1.94966101854241324887e+00 3.21251649096405778039e+00 +1100 5495.00 2.49205882350868357378e+01 1.93930728365197757590e+00 3.25818527247740341579e+00 1.93673167810345248085e+00 3.12944772664475667767e+00 1.97440380287893990641e+00 2.90497862789663674477e+00 1.95162751202494844094e+00 3.21587516001654094566e+00 +1101 5500.00 2.49465877004028513397e+01 1.94145279109392032701e+00 3.26186732988623306895e+00 1.93869893696449979714e+00 3.13272708186292669907e+00 1.97640497792964620061e+00 2.90828160954492265233e+00 1.95359399756858165276e+00 3.21923442839390627768e+00 +1102 5505.00 2.49725874802693397214e+01 1.94359854274518073503e+00 3.26555042656567851012e+00 1.94066625123203251313e+00 3.13600661880524711478e+00 1.97840624552141242098e+00 2.91158496979382697134e+00 1.95556047600244164997e+00 3.22259429751603621028e+00 +1103 5510.00 2.49985875744790213560e+01 1.94574453770408206665e+00 3.26923456188353034335e+00 1.94263362128952210561e+00 3.13928634011456475505e+00 1.98040760579933627916e+00 2.91488870787640586002e+00 1.95752694811419991616e+00 3.22595476884426801689e+00 +1104 5515.00 2.50245879831355289014e+01 1.94789077507931129851e+00 3.27291973519721324237e+00 1.94460104746861972558e+00 3.14256624840263265597e+00 1.98240905886705864880e+00 2.91819282304644467274e+00 1.95949341473298432881e+00 3.22931584379848457544e+00 +1105 5520.00 2.50505887061352332523e+01 1.95003725396919169732e+00 3.27660594584342534930e+00 1.94656853015279773800e+00 3.14584634619829195401e+00 1.98441060488004072937e+00 2.92149731453699912365e+00 1.96145987667755927752e+00 3.23267752381929573957e+00 +1106 5525.00 2.50765897435817706196e+01 1.95218397347204652981e+00 3.28029319317959222602e+00 1.94853606969443515773e+00 3.14912663599929087965e+00 1.98641224394192361657e+00 2.92480218158112625915e+00 1.96342633477705241773e+00 3.23603981034731136290e+00 +1107 5530.00 2.51025910954751338977e+01 1.95433093269656299462e+00 3.28398147656313943443e+00 1.95050366646663952963e+00 3.15240712023082902959e+00 1.98841397618744109010e+00 2.92810742344297469941e+00 1.96539278986059229304e+00 3.23940270480241299111e+00 +1108 5535.00 2.51285927617116904287e+01 1.95647813073070020451e+00 3.28767079531003680870e+00 1.95247132083215424458e+00 3.15568780126628567473e+00 1.99041580174096166544e+00 2.93141303933487318290e+00 1.96735924276767115693e+00 3.24276620862521225419e+00 +1109 5540.00 2.51545947423950799759e+01 1.95862556668314558017e+00 3.29136114877770991072e+00 1.95443903316408751358e+00 3.15896868139612685411e+00 1.99241772073721934433e+00 2.93471902852097032977e+00 1.96932569433778059675e+00 3.24613032324595307543e+00 +1110 5545.00 2.51805970375253025395e+01 1.96077323965222216628e+00 3.29505253630285510624e+00 1.95640680383554643740e+00 3.16224976286936376724e+00 1.99441973329021871031e+00 2.93802539024468600815e+00 1.97129214542077746408e+00 3.24949505008451877686e+00 +1111 5550.00 2.52065996469987076978e+01 1.96292114873625322957e+00 3.29874495719107985181e+00 1.95837463321963900498e+00 3.16553104782099925529e+00 1.99642183952432894500e+00 2.94133212372871311047e+00 1.97325859686651750025e+00 3.25286039059188292200e+00 +1112 5555.00 2.52326025710225927412e+01 1.96506929302319788277e+00 3.30243841079980793296e+00 1.96034252167910860720e+00 3.16881253832385478830e+00 1.99842403957428405015e+00 2.94463922822683654701e+00 1.97522504952485777885e+00 3.25622634616719963674e+00 +1113 5560.00 2.52586058092860277213e+01 1.96721767162174310251e+00 3.30613289642428131998e+00 1.96231046960779109689e+00 3.17209423636783816036e+00 2.00042633356445254122e+00 2.94794670298247796225e+00 1.97719150425601819521e+00 3.25959291825107833063e+00 +1114 5565.00 2.52846093620999354812e+01 1.96936628361984888969e+00 3.30982841340119726681e+00 1.96427847737879446299e+00 3.17537614385994304556e+00 2.00242872159847573599e+00 2.95125454723905544796e+00 1.97915796194094739668e+00 3.26296010826340143751e+00 +1115 5570.00 2.53106132292570293885e+01 1.97151512812620155479e+00 3.31352496103616145362e+00 1.96624654537558973821e+00 3.17865826259316008873e+00 2.00443120382145156810e+00 2.95456276022962693872e+00 1.98112442342950179075e+00 3.26632791763441465704e+00 +1116 5575.00 2.53366174107573129959e+01 1.97366420422876043261e+00 3.31722253863477822833e+00 1.96821467397128535559e+00 3.18194059429829323449e+00 2.00643378034738395499e+00 2.95787134120797734482e+00 1.98309088961299395670e+00 3.26969634777363582501e+00 +1117 5580.00 2.53626219068080764885e+01 1.97581351101548507998e+00 3.32092114552338157907e+00 1.97018286355971627977e+00 3.18522314056104960400e+00 2.00843645130064274440e+00 2.96118028940716282449e+00 1.98505736137237276395e+00 3.27306540010094604298e+00 +1118 5585.00 2.53886267172020225757e+01 1.97796304759506202942e+00 3.32462078099721303204e+00 1.97215111451399094378e+00 3.18850590288422575114e+00 2.01043921679523318602e+00 2.96448960407060457811e+00 1.98702383957822248384e+00 3.27643507604659278698e+00 +1119 5590.00 2.54146318419391619159e+01 1.98011281304508690582e+00 3.32832144435151322526e+00 1.97411942723830891033e+00 3.19178888266697358134e+00 2.01244207696588839340e+00 2.96779928444172202973e+00 1.98899032513221984964e+00 3.27980537702009256051e+00 +1120 5595.00 2.54406372812267775885e+01 1.98226280647424668580e+00 3.33202313488152279675e+00 1.97608780210577816838e+00 3.19507208116334950887e+00 2.01444503191624990635e+00 2.97110932976393682381e+00 1.99095681893604181667e+00 3.28317630444132824152e+00 +1121 5600.00 2.54666430348575829612e+01 1.98441302697050026005e+00 3.33572585189284742668e+00 1.97805623952059805859e+00 3.19835549952376974048e+00 2.01644808178104995022e+00 2.97441973928066927257e+00 1.99292332187063725435e+00 3.28654785973018093159e+00 +1122 5605.00 2.54926491028315709286e+01 1.98656347363217178348e+00 3.33942959466000033331e+00 1.98002473987660487786e+00 3.20163913877427885879e+00 2.01845122667429466290e+00 2.97773051222497509016e+00 1.99488983484804660584e+00 3.28992004428580431252e+00 +1123 5610.00 2.55186554852523990178e+01 1.98871414553685532667e+00 3.34313436247822215464e+00 1.98199330354690617106e+00 3.20492299979582684344e+00 2.02045446670998840588e+00 2.98104164786100467310e+00 1.99685635879067513443e+00 3.29329285951771666419e+00 +1124 5615.00 2.55446621821200601232e+01 1.99086504178287393430e+00 3.34684015463239026289e+00 1.98396193095643047499e+00 3.20820708333462878414e+00 2.02245780202286518090e+00 2.98435314540108542758e+00 1.99882289458983541941e+00 3.29666630685616368623e+00 +1125 5620.00 2.55706691934345471395e+01 1.99301616146855176126e+00 3.35054697039701743222e+00 1.98593062248864860031e+00 3.21149139000216621298e+00 2.02446123270620148560e+00 2.98766500410936641785e+00 2.00078944317829643396e+00 3.30004038770029906047e+00 +1126 5625.00 2.55966765190922274087e+01 1.99516750367148287815e+00 3.35425480904661599268e+00 1.98789937853739706597e+00 3.21477592023373093255e+00 2.02646475889473087761e+00 2.99097722321890335806e+00 2.00275600548882781737e+00 3.30341510345964017858e+00 +1127 5630.00 2.56226841591967406941e+01 1.99731906748999055168e+00 3.35796366985570049479e+00 1.98986819951724003275e+00 3.21806067435061127213e+00 2.02846838070245771846e+00 2.99428980197311744860e+00 2.00472258242310585885e+00 3.30679045553334161056e+00 +1128 5635.00 2.56486921137480834432e+01 1.99947085200167062879e+00 3.36167355208841822645e+00 1.99183708582201313142e+00 3.22134565247717530312e+00 2.03047209824338814599e+00 2.99760273961542944576e+00 2.00668917493462828361e+00 3.31016644533092074809e+00 +1129 5640.00 2.56747003826426158923e+01 2.00162285631520964202e+00 3.36538445501928240589e+00 1.99380603785591592469e+00 3.22463085458233189584e+00 2.03247591163152696581e+00 3.00091603537889550779e+00 2.00865578395616362073e+00 3.31354307426189453878e+00 +1130 5645.00 2.57007089659839813578e+01 2.00377507950820232807e+00 3.36909637790207749930e+00 1.99577505603351323948e+00 3.22791628045879797071e+00 2.03447982099124313748e+00 3.00422968851730098905e+00 2.01062241043084588554e+00 3.31692034371505295454e+00 +1131 5650.00 2.57267178636685400761e+01 2.00592752065824475594e+00 3.37280931999058930515e+00 1.99774414075900441645e+00 3.23120192973346620491e+00 2.03648382643654191071e+00 3.00754369827406620175e+00 2.01258905531217191509e+00 3.32029825509991516341e+00 +1132 5655.00 2.57527270759035680214e+01 2.00808017886365908211e+00 3.37652328054896555543e+00 1.99971329243658990649e+00 3.23448780183631168228e+00 2.03848792806070022721e+00 3.01085806387188270605e+00 2.01455571953291023846e+00 3.32367680981563307085e+00 +1133 5660.00 2.57787366024817856669e+01 2.01023305321240508547e+00 3.38023825883099160450e+00 2.00168251149119713617e+00 3.23777389600038922879e+00 2.04049212600881579860e+00 3.01417278456453630042e+00 2.01652240406728777700e+00 3.32705600926136080275e+00 +1134 5665.00 2.58047464434031965652e+01 2.01238614279244121263e+00 3.38395425408008732049e+00 2.00365179832702677842e+00 3.24106021127220289557e+00 2.04249642036380096854e+00 3.01748785958508314309e+00 2.01848910987916507764e+00 3.33043585482588833102e+00 +1135 5670.00 2.58307565987714404798e+01 2.01453944667099849042e+00 3.38767126553967390379e+00 2.00562115334827817392e+00 3.24434674648060994429e+00 2.04450081126038840651e+00 3.02080328818730814433e+00 2.02045583792203897744e+00 3.33381634791873304735e+00 +1136 5675.00 2.58567670685865103053e+01 2.01669296395676500566e+00 3.39138929245317211070e+00 2.00759057699024445753e+00 3.24763350023681951484e+00 2.04650529880222054047e+00 3.02411906960426701829e+00 2.02242258917013595365e+00 3.33719748990795661570e+00 +1137 5680.00 2.58827778528484166998e+01 2.01884669371697089701e+00 3.39510833405363809945e+00 2.00956006966748823572e+00 3.25092047095512448607e+00 2.04850988310330173192e+00 3.02743520306901725547e+00 2.02438936459768070719e+00 3.34057928221344058173e+00 +1138 5685.00 2.59087889514535127944e+01 2.02100063503957505517e+00 3.39882838958449307043e+00 2.01152963178421106960e+00 3.25420765681144263937e+00 2.05051456426727352067e+00 3.03075168783534376615e+00 2.02635616518926386931e+00 3.34396172620324616531e+00 +1139 5690.00 2.59348003645054383526e+01 2.02315478701253725902e+00 3.40254945827879184961e+00 2.01349926378606802757e+00 3.25749505574331799096e+00 2.05251934240814026822e+00 3.03406852313630137630e+00 2.02832299193983844887e+00 3.34734482327652704825e+00 +1140 5695.00 2.59608120919005607163e+01 2.02530914871345224526e+00 3.40627153935922866168e+00 2.01546896607726022665e+00 3.26078266544992079190e+00 2.05452421763990722425e+00 3.03738570820494802049e+00 2.03028984581326543690e+00 3.35072857481170993665e+00 +1141 5700.00 2.59868241337425054382e+01 2.02746371921991475062e+00 3.40999463204849551090e+00 2.01743873908271487139e+00 3.26407048338168115365e+00 2.05652919005585221868e+00 3.04070324229506772085e+00 2.03225672782522837068e+00 3.35411298220794718006e+00 +1142 5705.00 2.60128364900312831764e+01 2.02961849761988410989e+00 3.41371873557964811141e+00 2.01940858324808836244e+00 3.26735850674029304486e+00 2.05853425979070747687e+00 3.04402112463971752376e+00 2.03422363896031477282e+00 3.35749804684366459639e+00 +1143 5710.00 2.60388491607669010364e+01 2.03177348300131921377e+00 3.41744384916501608984e+00 2.02137849897758137274e+00 3.27064673244761650039e+00 2.06053942692738578657e+00 3.04733935447195447566e+00 2.03619058023420773651e+00 3.36088377010765171349e+00 +1144 5715.00 2.60648621458457050437e+01 2.03392867443145108908e+00 3.42116997202729056227e+00 2.02334848670648570490e+00 3.27393515718714178675e+00 2.06254469157989328565e+00 3.05065793103519755647e+00 2.03815755265222531278e+00 3.36427015335760604131e+00 +1145 5720.00 2.60908754453713420673e+01 2.03608407098787491663e+00 3.42489710336843611316e+00 2.02531854688045731550e+00 3.27722377731070224627e+00 2.06455005386223389152e+00 3.05397685357286796659e+00 2.04012455721968466449e+00 3.36765719800304497156e+00 +1146 5725.00 2.61168890592401652384e+01 2.03823967176891329700e+00 3.42862524240078103688e+00 2.02728867991406058735e+00 3.28051258894212560691e+00 2.06655551387804958807e+00 3.05729612131802319652e+00 2.04209159496263215061e+00 3.37104490540166512602e+00 +1147 5730.00 2.61429029875558214258e+01 2.04039547583143399123e+00 3.43235438833665451597e+00 2.02925888625295236523e+00 3.28380158785285836132e+00 2.06856107172061687294e+00 3.06061573350371851632e+00 2.04405866688638582218e+00 3.37443327693189409899e+00 +1148 5735.00 2.61689172303183106294e+01 2.04255148226339544593e+00 3.43608454037801980263e+00 2.03122916632206029774e+00 3.28709076954488121913e+00 2.07056672750394099580e+00 3.06393568937337601454e+00 2.04602577403771856979e+00 3.37782231397215593205e+00 +1149 5740.00 2.61949317874239895332e+01 2.04470769015275655178e+00 3.43981569772684148134e+00 2.03319952057740449547e+00 3.29038012920924982652e+00 2.07257248133166260828e+00 3.06725598816005096126e+00 2.04799291744267852877e+00 3.38121201790087511085e+00 +1150 5745.00 2.62209466589765050060e+01 2.04686409855638418165e+00 3.44354785957471909441e+00 2.03516994943355022940e+00 3.29366966168464303522e+00 2.07457833330742280609e+00 3.07057662911752782264e+00 2.04996009812731072586e+00 3.38460239008611551981e+00 +1151 5750.00 2.62469618449758463896e+01 2.04902070656223767031e+00 3.44728102512361722631e+00 2.03714045335688043181e+00 3.29695936151954294147e+00 2.07658428353486312901e+00 3.07389761145813533716e+00 2.05192731713838893981e+00 3.38799343188557156026e+00 +1152 5755.00 2.62729773454220207896e+01 2.05117751323754848869e+00 3.45101519355477259765e+00 2.03911103276195992962e+00 3.30024922289968891675e+00 2.07859033210726007468e+00 3.07721893442529470519e+00 2.05389457552268739349e+00 3.39138514467767127059e+00 +1153 5760.00 2.62989931602113848896e+01 2.05333451767027419521e+00 3.45475036407014846063e+00 2.04108168811517387553e+00 3.30353923965844042954e+00 2.08059647912825429472e+00 3.08054059727279039294e+00 2.05586187431661704395e+00 3.39477752984083824828e+00 +1154 5765.00 2.63250092893439422426e+01 2.05549171891728299499e+00 3.45848653585098064767e+00 2.04305241985181407216e+00 3.30682940527677837750e+00 2.08260272470148821711e+00 3.08386259921295025066e+00 2.05782921458767997791e+00 3.39817058871204258352e+00 +1155 5770.00 2.63510257330269688225e+01 2.05764911607689748863e+00 3.46222370807850587937e+00 2.04502322841753647609e+00 3.31011971288330331120e+00 2.08460906893060071710e+00 3.08718493948919459058e+00 2.05979659739301412813e+00 3.40156432268007336006e+00 +1156 5775.00 2.63770424910531886553e+01 2.05980670819561995089e+00 3.46596187992359583419e+00 2.04699411426836164196e+00 3.31341015521278015044e+00 2.08661551190887051277e+00 3.09050761733458045910e+00 2.06176402378975787144e+00 3.40495873309226393388e+00 +1157 5780.00 2.64030595635262415044e+01 2.06196449437177431463e+00 3.46970105058821420840e+00 2.04896507784994641455e+00 3.31670072462686649217e+00 2.08862205372957365768e+00 3.09383063199252950071e+00 2.06373149484541418275e+00 3.40835382131667641303e+00 +1158 5785.00 2.64290769503424769482e+01 2.06412247366222745271e+00 3.47344121922250570478e+00 2.05093611960794675042e+00 3.31999141306229095250e+00 2.09062869449635124752e+00 3.09715398269609609727e+00 2.06569901163784930276e+00 3.41174958871100608704e+00 +1159 5790.00 2.64550946516055525137e+01 2.06628064513420994786e+00 3.47718238499734155766e+00 2.05290723999838320424e+00 3.32328221209304031092e+00 2.09263543431284482210e+00 3.10047766866797447349e+00 2.06766657523456531820e+00 3.41514603662258808825e+00 +1160 5795.00 2.64811126673154610955e+01 2.06843900787568069077e+00 3.48092454710432130938e+00 2.05487843947727588656e+00 3.32657311283707946004e+00 2.09464227326196628098e+00 3.10380168915158405341e+00 2.06963418671342935795e+00 3.41854316640911859437e+00 +1161 5800.00 2.65071309973685522721e+01 2.07059756094350611022e+00 3.48466770469359055085e+00 2.05684971850064579613e+00 3.32986410600817261951e+00 2.09664921144735716396e+00 3.10712604336961728535e+00 2.07160184717303597068e+00 3.42194097943865926936e+00 +1162 5805.00 2.65331496418684800176e+01 2.07275630341528227518e+00 3.48841185692565503018e+00 2.05882107752451393168e+00 3.33315518187443071696e+00 2.09865624896229441276e+00 3.11045073056549670198e+00 2.07356955769125139710e+00 3.42533947703781516125e+00 +1163 5810.00 2.65591686008152407794e+01 2.07491523435823932431e+00 3.49215700296102360412e+00 2.06079251701526278140e+00 3.33644633026866799241e+00 2.10066338590005452502e+00 3.11377574997227579701e+00 2.07553731937703478394e+00 3.42873866057464793400e+00 +1164 5815.00 2.65851878741051876887e+01 2.07707435283960828443e+00 3.49590314197056795109e+00 2.06276403741855141050e+00 3.33973754054695470828e+00 2.10267062234355117667e+00 3.11710110081264879511e+00 2.07750513330825192782e+00 3.43213853139648961132e+00 +1165 5820.00 2.66112074618419711669e+01 2.07923365792661973828e+00 3.49965027309406728762e+00 2.06473563920076186307e+00 3.34302880160933790776e+00 2.10467795840678917330e+00 3.12042678231967185454e+00 2.07947300059386330773e+00 3.43553909084031117160e+00 +1166 5825.00 2.66372273640255805560e+01 2.08139314868650515677e+00 3.50339839548166631644e+00 2.06670732282828018000e+00 3.34632010185838701943e+00 2.10668539416231626049e+00 3.12375279372640157760e+00 2.08144092235318955986e+00 3.43894034026380834845e+00 +1167 5830.00 2.66632475805523831980e+01 2.08355282419685972073e+00 3.50714750830423582784e+00 2.06867908877785477983e+00 3.34961142923028898366e+00 2.10869292971377442214e+00 3.12707913426589501071e+00 2.08340889968482745331e+00 3.44234228099358530173e+00 +1168 5835.00 2.66892681115260188562e+01 2.08571268350418526083e+00 3.51089761068082761852e+00 2.07065093749514161914e+00 3.35290277113266110831e+00 2.11070056514407644599e+00 3.13040580316084371404e+00 2.08537693370809895654e+00 3.44574491438734176185e+00 +1169 5840.00 2.67152889568428442146e+01 2.08787272569644155595e+00 3.51464870178231469922e+00 2.07262286945689000461e+00 3.35619411446527982079e+00 2.11270830054649882968e+00 3.13373279964430384581e+00 2.08734502554232781435e+00 3.44914824177168055641e+00 +1170 5845.00 2.67413101167101423528e+01 2.09003294983049503486e+00 3.51840078072774664619e+00 2.07459488512948375671e+00 3.35948544560971473771e+00 2.11471613600395480503e+00 3.13706012294933334061e+00 2.08931317631719970507e+00 3.45255226448357177560e+00 +1171 5850.00 2.67673315909206301910e+01 2.09219335496321257040e+00 3.52215384666726727403e+00 2.07656698498967218214e+00 3.36277675039824019976e+00 2.11672407162008546777e+00 3.14038777229862287044e+00 2.09128138716240208339e+00 3.45595698387034877541e+00 +1172 5855.00 2.67933533794743112821e+01 2.09435394017218934337e+00 3.52590789873029430979e+00 2.07853916950383910134e+00 3.36606801411383260714e+00 2.11873210745707396541e+00 3.14371574692523036987e+00 2.09324965919725913821e+00 3.45936240125861660388e+00 +1173 5860.00 2.68193754825784651530e+01 2.09651470450392762856e+00 3.52966293605660430543e+00 2.08051143914873426510e+00 3.36935922147980670971e+00 2.12074024361856361409e+00 3.14704404605184739907e+00 2.09521799357218441173e+00 3.46276851797497853269e+00 +1174 5865.00 2.68453978999221654078e+01 2.09867564703602216269e+00 3.53341895777561498804e+00 2.08248379439074104980e+00 3.37265035663908729902e+00 2.12274848018746586931e+00 3.15037266891153100445e+00 2.09718639142722995672e+00 3.46617533536677013828e+00 +1175 5870.00 2.68714206318163384424e+01 2.10083676683570486077e+00 3.53717596301674142012e+00 2.08445623571697291609e+00 3.37594140313348223259e+00 2.12475681724669351880e+00 3.15370161472697319027e+00 2.09915485391281064764e+00 3.46958285475023009425e+00 +1176 5875.00 2.68974436780537047298e+01 2.10299806294947799756e+00 3.54093395090939733194e+00 2.08642876360417872661e+00 3.37923234392440807738e+00 2.12676525487915979440e+00 3.15703088272086640487e+00 2.10112338217934224716e+00 3.47299107745196478092e+00 +1177 5880.00 2.69234670387379004808e+01 2.10515953444457215582e+00 3.54469292057263674067e+00 2.08840137852910601168e+00 3.38252316135143749065e+00 2.12877379317814119375e+00 3.16036047212626769465e+00 2.10309197736687547575e+00 3.47640000479857835813e+00 +1178 5885.00 2.69494907138689256954e+01 2.10732118037785465248e+00 3.54845287111514595679e+00 2.09037408096850452210e+00 3.38581383711156647109e+00 2.13078243220582264073e+00 3.16369038215550535398e+00 2.10506064064655395995e+00 3.47980963811667631802e+00 +1179 5890.00 2.69755147033431441628e+01 2.10948299982691933607e+00 3.55221380167670375272e+00 2.09234687140948638628e+00 3.38910435226958250965e+00 2.13279117206584523103e+00 3.16702061204163420882e+00 2.10702937318952088219e+00 3.48321997873286415270e+00 +1180 5895.00 2.70015390072641956465e+01 2.11164499182790610377e+00 3.55597571136599865937e+00 2.09431975032880091092e+00 3.39239468723733494926e+00 2.13480001282039300037e+00 3.17035116101771308195e+00 2.10899817614619156103e+00 3.48663102795301726999e+00 +1181 5900.00 2.70275636255284403831e+01 2.11380715544804509420e+00 3.55973859929171743133e+00 2.09629271821356022443e+00 3.39568482176336861045e+00 2.13680895456274377864e+00 3.17368202828570478147e+00 2.11096705069807422106e+00 3.49004278710374116201e+00 +1182 5905.00 2.70535885582395145832e+01 2.11596948975456777831e+00 3.56350246457291097713e+00 2.09826577556124194146e+00 3.39897473488110790640e+00 2.13881799736544575552e+00 3.17701321308903050777e+00 2.11293599802667486642e+00 3.49345525749091301293e+00 +1183 5910.00 2.70796138053974146942e+01 2.11813199380434014074e+00 3.56726730631826649542e+00 2.10023892284859359236e+00 3.40226440496067317198e+00 2.14082714131141127467e+00 3.18034471462965395716e+00 2.11490501930313845591e+00 3.49686844044113742669e+00 +1184 5915.00 2.71056393670021549269e+01 2.12029466664386578856e+00 3.57103312362610880726e+00 2.10221216056272908190e+00 3.40555380964669796029e+00 2.14283638647318941395e+00 3.18367653215099633002e+00 2.11687411570897143775e+00 3.50028233726029114337e+00 +1185 5920.00 2.71316652429500742016e+01 2.12245750733001070643e+00 3.57479991560512377902e+00 2.10418548920112469247e+00 3.40884292583760073470e+00 2.14484573293369340519e+00 3.18700866485502176673e+00 2.11884328845677449848e+00 3.50369694926461505702e+00 +1186 5925.00 2.71576914333448371508e+01 2.12462051493000592117e+00 3.57856768135363445538e+00 2.10615890925089299657e+00 3.41213172972704015251e+00 2.14685518076547188215e+00 3.19034111197478598143e+00 2.12081253870732755473e+00 3.50711227775998590772e+00 +1187 5930.00 2.71837179380827862474e+01 2.12678368849035459576e+00 3.58233641998032847908e+00 2.10813242119914745487e+00 3.41542019671064078778e+00 2.14886473004107303453e+00 3.19367387272261815667e+00 2.12278186768359189429e+00 3.51052832405228043555e+00 +1188 5935.00 2.72097447572675648075e+01 2.12894702707828731292e+00 3.58610613058352978300e+00 2.11010602555372805966e+00 3.41870830143781168076e+00 2.15087438083304594016e+00 3.19700694632121029670e+00 2.12475127657744167209e+00 3.51394508943701167070e+00 +1189 5940.00 2.72357718908991763840e+01 2.13111052972994263754e+00 3.58987681224083221565e+00 2.11207972280174827162e+00 3.42199601775992379160e+00 2.15288413322430294272e+00 3.20034033198289069588e+00 2.12672076659111253250e+00 3.51736257523041961903e+00 +1190 5945.00 2.72617993389776209767e+01 2.13327419551255159647e+00 3.59364846406092430797e+00 2.11405351344068437314e+00 3.42528331873031444132e+00 2.15489398728739356415e+00 3.20367402893035224665e+00 2.12869033894756709557e+00 3.52078078272801775483e+00 +1191 5950.00 2.72878271013992552696e+01 2.13543802347261646446e+00 3.59742108513176361839e+00 2.11602739797837813285e+00 3.42857017657319262938e+00 2.15690394307413724206e+00 3.20700803638628606507e+00 2.13065999484904144978e+00 3.52419971322531866420e+00 +1192 5955.00 2.73138551782677225788e+01 2.13760201266700455847e+00 3.60119467454131036988e+00 2.11800137689157796927e+00 3.43185656266291072569e+00 2.15891400067781225047e+00 3.21034235356302266595e+00 2.13262973550813583756e+00 3.52761936801783404505e+00 +1193 5960.00 2.73398835694793795881e+01 2.13976616215258230724e+00 3.60496923137752300903e+00 2.11997545070885262675e+00 3.43514244756542019843e+00 2.16092416016060173689e+00 3.21367697967288812322e+00 2.13459956216854296329e+00 3.53103974842180612370e+00 +1194 5965.00 2.73659122751378660610e+01 2.14193047096548827568e+00 3.60874475471799760484e+00 2.12194961991731556594e+00 3.43842780093463407098e+00 2.16293442159505566735e+00 3.21701191393857577339e+00 2.13656947604286129305e+00 3.53446085570165458023e+00 +1195 5970.00 2.73919412952431891028e+01 2.14409493817295393470e+00 3.61252124364032800585e+00 2.12392388502480633505e+00 3.44171259154351494303e+00 2.16494478503299392358e+00 3.22034715556204975684e+00 2.13853947836442026542e+00 3.53788269116325571062e+00 +1196 5975.00 2.74179706296916982922e+01 2.14625956281111696100e+00 3.61629869724283814492e+00 2.12589824652880299283e+00 3.44499678727371305698e+00 2.16695525056769344729e+00 3.22368270377636756407e+00 2.14050957036654709853e+00 3.54130525610212343324e+00 +1197 5980.00 2.74440002785870404978e+01 2.14842434394720926960e+00 3.62007711459275816068e+00 2.12787270494751101779e+00 3.44828035509483665777e+00 2.16896581824061041033e+00 3.22701855777312784923e+00 2.14247975329293360858e+00 3.54472855179304069395e+00 +1198 5985.00 2.74700302419292121670e+01 2.15058928060700482732e+00 3.62385649476768367805e+00 2.12984726077840624825e+00 3.45156326100227017761e+00 2.17097648813465848860e+00 3.23035471678538721463e+00 2.14445002837690879005e+00 3.54815257952115725715e+00 +1199 5990.00 2.74960605197182204051e+01 2.15275437186809792678e+00 3.62763683683484439157e+00 2.13182191452932956466e+00 3.45484547006899367361e+00 2.17298726031202171782e+00 3.23369118000474697894e+00 2.14642039687252861313e+00 3.55157734058198526483e+00 +1200 5995.00 2.75220911118504183435e+01 2.15491961674589971310e+00 3.63141813987183725843e+00 2.13379666672885104362e+00 3.45812694638339523934e+00 2.17499813483488413368e+00 3.23702794666426241221e+00 2.14839086004421320197e+00 3.55500283623994528526e+00 +1201 6000.00 2.75481220183258024292e+01 2.15708501431800536707e+00 3.63520040294589197316e+00 2.13577151786408281353e+00 3.46140765302854580554e+00 2.17700911175506739426e+00 3.24036501595553350086e+00 2.15036141912529066289e+00 3.55842906780091361441e+00 +1202 6005.00 2.75741532393516628474e+01 2.15925056361018974371e+00 3.63898362512423956261e+00 2.13774646846359406283e+00 3.46468796229332642866e+00 2.17902019115548339911e+00 3.24370238710125402548e+00 2.15233207538018067595e+00 3.56185603650858295666e+00 +1203 6010.00 2.76001847747207094130e+01 2.16141626367931793951e+00 3.64276780547411105360e+00 2.13972151904559071411e+00 3.46796827153737918792e+00 2.18103137307758876418e+00 3.24704005931375094818e+00 2.15430283008366929565e+00 3.56528374366882916391e+00 +1204 6015.00 2.76262166244329527842e+01 2.16358211357189444968e+00 3.64655294305237243080e+00 2.14169667010754816161e+00 3.47124858081252485320e+00 2.18304265759393212321e+00 3.25037803178462603171e+00 2.15627368448981115989e+00 3.56871219053570998270e+00 +1205 6020.00 2.76522487886956653824e+01 2.16574811233442066083e+00 3.65033903693662065137e+00 2.14367192216767277202e+00 3.47452888995293651675e+00 2.18505404476669840008e+00 3.25371630373656950397e+00 2.15824463988375603307e+00 3.57214137839437251287e+00 +1206 6025.00 2.76782812673015676808e+01 2.16791425899267142796e+00 3.65412608617335576966e+00 2.14564727576489655547e+00 3.47780919933172238956e+00 2.18706553463734465481e+00 3.25705487437154683761e+00 2.16021569752992359525e+00 3.57557130849887361279e+00 +1207 6030.00 2.77043140602506632320e+01 2.17008055261387777790e+00 3.65791408981944643486e+00 2.14762273139669757072e+00 3.48108950854468313096e+00 2.18907712727841774480e+00 3.26039374289152128483e+00 2.16218685871346272265e+00 3.57900198213436215866e+00 +1208 6035.00 2.77303471677502315629e+01 2.17224699223417871963e+00 3.66170304693175951982e+00 2.14959828960200827197e+00 3.48436981787164867796e+00 2.19108882274173977223e+00 3.26373290850882380454e+00 2.16415812471952140328e+00 3.58243340054452952259e+00 +1209 6040.00 2.77563805895929860412e+01 2.17441357690007652792e+00 3.66549295656716100922e+00 2.15157395087830582980e+00 3.48765012711570143722e+00 2.19310062108949521686e+00 3.26707237043577913838e+00 2.16612949682288480346e+00 3.58586556501452458079e+00 +1210 6045.00 2.77824143257789373251e+01 2.17658030563734516960e+00 3.66928381778251688772e+00 2.15354971576452314252e+00 3.49093043634939004249e+00 2.19511252236313936237e+00 3.27041212785362578330e+00 2.16810097632942921919e+00 3.58929847679840507979e+00 +1211 6050.00 2.78084483765153578361e+01 2.17874717750285240569e+00 3.67307562962433209464e+00 2.15552558478923028673e+00 3.49421074563489941767e+00 2.19712452662485757671e+00 3.27375217998505485539e+00 2.17007256453466679247e+00 3.59273213715022432524e+00 +1212 6055.00 2.78344827415949680471e+01 2.18091419154310051098e+00 3.67686839112874386259e+00 2.15750155847063140868e+00 3.49749105489968092897e+00 2.19913663393683478375e+00 3.27709252603203093912e+00 2.17204426273411188575e+00 3.59616654733440466174e+00 +1213 6060.00 2.78605174210177715111e+01 2.18308134677349974240e+00 3.68066210135261817626e+00 2.15947763732693243099e+00 3.50077136417482615016e+00 2.20114884433016255727e+00 3.28043316518615490907e+00 2.17401607222327575286e+00 3.59960170860500250356e+00 +1214 6065.00 2.78865524149910477547e+01 2.18524864226128112676e+00 3.68445675935282368485e+00 2.16145382189706580789e+00 3.50405167341887846533e+00 2.20316115786702626522e+00 3.28377409665975328323e+00 2.17598799432876388593e+00 3.60303762220570833463e+00 +1215 6070.00 2.79125877232038774878e+01 2.18741607704258278488e+00 3.68825236414476975710e+00 2.16343011270960117187e+00 3.50733198270438784050e+00 2.20517357459924578933e+00 3.28711531964442826848e+00 2.17796003033572427299e+00 3.60647428940094449956e+00 +1216 6075.00 2.79386233459671728951e+01 2.18958365013281586187e+00 3.69204891479568697576e+00 2.16540651029310682318e+00 3.51061229191734813782e+00 2.20718609456827774551e+00 3.29045683335250682688e+00 2.17993218158112611604e+00 3.60991171143440148228e+00 +1217 6080.00 2.79646592830736615554e+01 2.19175136059921094045e+00 3.69584641033135019583e+00 2.16738301516578957262e+00 3.51389260122358582095e+00 2.20919871783630750173e+00 3.29379863696522523497e+00 2.18190444938121119733e+00 3.61334988954977287534e+00 +1218 6085.00 2.79906955346269796792e+01 2.19391920745717783348e+00 3.69964484978789842629e+00 2.16935962788730885009e+00 3.51717291044690982815e+00 2.21121144443442574357e+00 3.29714072969491178711e+00 2.18387683505221952274e+00 3.61678882500111420484e+00 +1219 6090.00 2.80167321006271272665e+01 2.19608718976358430197e+00 3.70344423221183349781e+00 2.17133634896550731241e+00 3.52045321971169089537e+00 2.21322427442481828308e+00 3.30048311072280231571e+00 2.18584933992075614029e+00 3.62022851902175268890e+00 +1220 6095.00 2.80427689809704716595e+01 2.19825530654420431276e+00 3.70724455661856655553e+00 2.17331317894968112370e+00 3.52373352897647196258e+00 2.21523720783857713812e+00 3.30382577927159015729e+00 2.18782196532379025200e+00 3.62366897285538236417e+00 +1221 6100.00 2.80688061757606455160e+01 2.20042355683517643072e+00 3.71104582206496447228e+00 2.17529011837876451452e+00 3.52701383823088931990e+00 2.21725024472752219040e+00 3.30716873451214565804e+00 2.18979471258792646182e+00 3.62711018774569371459e+00 +1222 6105.00 2.80948436849976488361e+01 2.20259193967263966485e+00 3.71484802756643661681e+00 2.17726716777096118705e+00 3.53029414745421332711e+00 2.21926338514347509800e+00 3.31051197565679888868e+00 2.19176758306049856984e+00 3.63055216492601573464e+00 +1223 6110.00 2.81208815085778454090e+01 2.20476045409273169184e+00 3.71865117215912199811e+00 2.17924432768593456800e+00 3.53357445677081560831e+00 2.22127662910716328071e+00 3.31385550188678479344e+00 2.19374057807847488988e+00 3.63399490561931193255e+00 +1224 6115.00 2.81469196466048785510e+01 2.20692909913159196478e+00 3.72245525486879547117e+00 2.18122159865225206943e+00 3.53685476605632453939e+00 2.22328997668077210648e+00 3.31719931240406706863e+00 2.19571369898918922203e+00 3.63743841107963872261e+00 +1225 6120.00 2.81729580989750942877e+01 2.20909787381499445047e+00 3.72626027471086729292e+00 2.18319898120884792192e+00 3.54013507525892112682e+00 2.22530342788502855100e+00 3.32054340640024658882e+00 2.19768694713997447820e+00 3.64088268251959590316e+00 +1226 6125.00 2.81989968657921465933e+01 2.21126677718944231188e+00 3.73006623073184018224e+00 2.18517647590501917776e+00 3.54341538454443005790e+00 2.22731698278211842634e+00 3.32388778306692378450e+00 2.19966032388852772428e+00 3.64432772118287529040e+00 +1227 6130.00 2.82250359470560248099e+01 2.21343580827034580594e+00 3.73387312193676024208e+00 2.18715408327969917934e+00 3.54669569380921112511e+00 2.22933064139276959637e+00 3.32723244159569819800e+00 2.20163383059254691432e+00 3.64777352827171341687e+00 +1228 6135.00 2.82510753427667360427e+01 2.21560496611457091731e+00 3.73768094735140188334e+00 2.18913180388218497896e+00 3.54997600110481270619e+00 2.23134440376880149870e+00 3.33057738116780610582e+00 2.20360746860972822603e+00 3.65122010504016580867e+00 +1229 6140.00 2.82771150528206405284e+01 2.21777424972716508123e+00 3.74148970600153996102e+00 2.19110963824104620912e+00 3.55325631230768079760e+00 2.23335826993094421766e+00 3.33392260098521120426e+00 2.20558123930813421154e+00 3.65466745268010484438e+00 +1230 6145.00 2.83031550773213780303e+01 2.21994365816499428234e+00 3.74529939690258473206e+00 2.19308758692630823006e+00 3.55653662158282557471e+00 2.23537223993101630271e+00 3.33726810022915021392e+00 2.20755514406618891243e+00 3.65811557243522145200e+00 +1231 6150.00 2.83291954161652981270e+01 2.22211319043310506771e+00 3.74911001906994600930e+00 2.19506565046653978612e+00 3.55981693086833494988e+00 2.23738631378974739405e+00 3.34061387809122223302e+00 2.20952918423122701697e+00 3.66156446550775260818e+00 +1232 6155.00 2.83552360694560583454e+01 2.22428284557800060028e+00 3.75292157151903538193e+00 2.19704382942140297175e+00 3.56309724010202444333e+00 2.23940049154859321945e+00 3.34395993375266442627e+00 2.21150336120240176285e+00 3.66501413312066182115e+00 +1233 6160.00 2.83812770371936480274e+01 2.22645262262545484688e+00 3.75673405325489806472e+00 2.19902212434019528331e+00 3.56637754937716922043e+00 2.24141477323864668492e+00 3.34730626640507633596e+00 2.21347767635813763576e+00 3.66846457648654844519e+00 +1234 6165.00 2.84073183193780671729e+01 2.22862252060124221842e+00 3.76054746331367217849e+00 2.20100053577221332901e+00 3.56965785863158613367e+00 2.24342915889099980831e+00 3.35065287524005794850e+00 2.21545213106649674373e+00 3.67191579681801361090e+00 +1235 6170.00 2.84333599159056795713e+01 2.23079253854150127978e+00 3.76436180069004144855e+00 2.20297906426675549341e+00 3.57293816789636720088e+00 2.24544364853674416338e+00 3.35399975942848138644e+00 2.21742672672663321265e+00 3.67536779530692792051e+00 +1236 6175.00 2.84594018268801249860e+01 2.23296267547200688597e+00 3.76817706438905153377e+00 2.20495771037311794061e+00 3.57621847727515307369e+00 2.24745824220697310025e+00 3.35734691815158337036e+00 2.21940146473769983615e+00 3.67882057318661903622e+00 +1237 6180.00 2.84854440521977601009e+01 2.23513293040816929391e+00 3.77199325343647684505e+00 2.20693647465096276505e+00 3.57949878642592933531e+00 2.24947293993277819268e+00 3.36069435061132670839e+00 2.22137634647812287625e+00 3.68227413163859518264e+00 +1238 6185.00 2.85114865919622211266e+01 2.23730330239649077839e+00 3.77581036681663517740e+00 2.20891535765995161711e+00 3.58277909565961794058e+00 2.25148774173488863681e+00 3.36404205596821936908e+00 2.22335137335741972464e+00 3.68572847187545615810e+00 +1239 6190.00 2.85375294461735187213e+01 2.23947379044201833054e+00 3.77962840355530094172e+00 2.21089435994938154906e+00 3.58605940493476271769e+00 2.25350264764439511822e+00 3.36739003342422638099e+00 2.22532654677474317495e+00 3.68918359508907389710e+00 +1240 6195.00 2.85635726147280060161e+01 2.24164439359125422513e+00 3.78344736265752157323e+00 2.21287348208927836524e+00 3.58933971416845132296e+00 2.25551765768202727713e+00 3.37073828213985482449e+00 2.22730186812924824125e+00 3.69263950249204819798e+00 +1241 6200.00 2.85896160977293263272e+01 2.24381511084924456512e+00 3.78726724310761353465e+00 2.21485272461857496396e+00 3.59262002345396069813e+00 2.25753277187887668731e+00 3.37408680130670557418e+00 2.22927733885118062318e+00 3.69609619526588550897e+00 +1242 6205.00 2.86156598951774761019e+01 2.24598594125212880357e+00 3.79108804392098752700e+00 2.21683208810729714955e+00 3.59590033266692143954e+00 2.25954799025567165671e+00 3.37743559009564986439e+00 2.23125296032932984858e+00 3.69955367461282280672e+00 +1243 6210.00 2.86417040070724624456e+01 2.24815688382568001913e+00 3.79490976410269142960e+00 2.21881157311510657237e+00 3.59918064197315867858e+00 2.26156331283314093739e+00 3.38078464768792441575e+00 2.23322873399394117300e+00 3.70301194171436742764e+00 +1244 6215.00 2.86677484333106313841e+01 2.25032793758530935690e+00 3.79873240263704214925e+00 2.22079118021202903677e+00 3.60246095122757603590e+00 2.26357873963201194911e+00 3.38413397326476417248e+00 2.23520466126489703029e+00 3.70647099777275412791e+00 +1245 6220.00 2.86937931738919971281e+01 2.25249910156715582588e+00 3.80255595853944905471e+00 2.22277090994736026275e+00 3.60574126049235710312e+00 2.26559427067301344394e+00 3.38748356598667754724e+00 2.23718074356207941022e+00 3.70993084395912786633e+00 +1246 6225.00 2.87198382290238320991e+01 2.25467037477626508490e+00 3.80638043079423216142e+00 2.22475076289112783101e+00 3.60902156975713817033e+00 2.26760990598723743972e+00 3.39083342505562912450e+00 2.23915698231573356836e+00 3.71339148147572295500e+00 +1247 6230.00 2.87458835984988603229e+01 2.25684175624877569888e+00 3.81020581839607208607e+00 2.22673073960299250373e+00 3.61230187902191879346e+00 2.26962564558504809042e+00 3.39418354961139812076e+00 2.24113337895610653661e+00 3.71685291148332064282e+00 +1248 6235.00 2.87719292823170782469e+01 2.25901324500009836882e+00 3.81403212035001626390e+00 2.22871084066334379514e+00 3.61558218827633570669e+00 2.27164148947680955004e+00 3.39753393885594823232e+00 2.24310993492380861269e+00 3.72031513517379064382e+00 +1249 6240.00 2.87979752806857689507e+01 2.26118484005600750564e+00 3.81785933564038204580e+00 2.23069106663184291151e+00 3.61886249749966015798e+00 2.27365743768325012653e+00 3.40088459194978742772e+00 2.24508665165944787390e+00 3.72377815372864073851e+00 +1250 6245.00 2.88240215933976529072e+01 2.26335654042154921228e+00 3.82168746326185182483e+00 2.23267141806815194727e+00 3.62214280679553368714e+00 2.27567349022509768375e+00 3.40423550805342500780e+00 2.24706353058290764224e+00 3.72724196831901499749e+00 +1251 6250.00 2.88500682205563627747e+01 2.26552834513286249774e+00 3.82551650220910799405e+00 2.23465189554229670676e+00 3.62542311603958600230e+00 2.27768964710235222171e+00 3.40758668635845829442e+00 2.24904057316589067739e+00 3.73070658010569289331e+00 +1252 6255.00 2.88761151620582694477e+01 2.26770025320535717483e+00 3.82934645146646834846e+00 2.23663249963466537196e+00 3.62870342529400291554e+00 2.27970590835647080041e+00 3.41093812602539747658e+00 2.25101778084900683297e+00 3.73417199028054547227e+00 +1253 6260.00 2.89021624180069984789e+01 2.26987226366480854267e+00 3.83317731001825068304e+00 2.23861323091528463536e+00 3.63198373457951273480e+00 2.28172227396672511190e+00 3.41428982621475007875e+00 2.25299515507286463034e+00 3.73763819999398849703e+00 +1254 6265.00 2.89282099884025711845e+01 2.27204437550589766204e+00 3.83700907686950198894e+00 2.24059408995418030131e+00 3.63526404384429380201e+00 2.28373874396420628585e+00 3.41764178610775148925e+00 2.25497269730916816144e+00 3.74110521042752974807e+00 +1255 6270.00 2.89542578731413264848e+01 2.27421658777512769589e+00 3.84084175099417635124e+00 2.24257507731101313198e+00 3.63854435310907442513e+00 2.28575531835927936442e+00 3.42099400485454507859e+00 2.25695040900889143387e+00 3.74457302273158365580e+00 +1256 6275.00 2.89803060723269148014e+01 2.27638889946718148138e+00 3.84467533137659067677e+00 2.24455619358690139364e+00 3.64182466236349133837e+00 2.28777199715194434759e+00 3.42434648163636667917e+00 2.25892829164373587503e+00 3.74804163807729340263e+00 +1257 6280.00 2.90063545858556928181e+01 2.27856130960783254125e+00 3.84850981700106409278e+00 2.24653743933114213860e+00 3.64510497163863655956e+00 2.28978878035256583345e+00 3.42769921561372559182e+00 2.26090634667504097877e+00 3.75151105761507519532e+00 +1258 6285.00 2.90324034139349507200e+01 2.28073381722285617457e+00 3.85234520686227854824e+00 2.24851881513448947914e+00 3.64838528091378178075e+00 2.29180566797150664371e+00 3.43105220594712800875e+00 2.26288457557450772839e+00 3.75498128250570806230e+00 +1259 6290.00 2.90584525563573912166e+01 2.28290642130693388623e+00 3.85618149993418724009e+00 2.25050032156696877550e+00 3.65166559014747038603e+00 2.29382266000876766654e+00 3.43440545180744738474e+00 2.26486297980347561776e+00 3.75845231390997103205e+00 +1260 6295.00 2.90845020131230178606e+01 2.28507912089620468521e+00 3.86001869520110929557e+00 2.25248195921933458408e+00 3.65494589941225189733e+00 2.29583975647471305592e+00 3.43775895234482575802e+00 2.26684156086473942437e+00 3.76192415297827986720e+00 +1261 6300.00 2.91105517844391279425e+01 2.28725191499571423037e+00 3.86385679164736339786e+00 2.25446372865124722296e+00 3.65822620867703296454e+00 2.29785695736934192368e+00 3.44111270673013613930e+00 2.26882032020927182359e+00 3.76539680085068528825e+00 +1262 6305.00 2.91366018700984277245e+01 2.28942480261050951285e+00 3.86769578823653725763e+00 2.25644563045345991625e+00 3.66150651797290604961e+00 2.29987426270301975606e+00 3.44446671411352189907e+00 2.27079925933986892517e+00 3.76887025867760261377e+00 +1263 6310.00 2.91626522701009136540e+01 2.29159778276636494354e+00 3.87153568396331504431e+00 2.25842766521672899671e+00 3.66478682718586634692e+00 2.30189167246538151090e+00 3.44782097367621886974e+00 2.27277837973859631049e+00 3.77234452760944716232e+00 +1264 6315.00 2.91887029845502325998e+01 2.29377085447869077939e+00 3.87537647781201410879e+00 2.26040983350071345015e+00 3.66806713639882708833e+00 2.30390918666679089810e+00 3.45117548454764344612e+00 2.27475768289788549126e+00 3.77581960879663425246e+00 +1265 6320.00 2.92147540134463810091e+01 2.29594401675253312334e+00 3.87921816873585934005e+00 2.26239213590653198693e+00 3.67134744568433646350e+00 2.30592680530724880583e+00 3.45453024590902968427e+00 2.27673717031016620282e+00 3.77929550335848718490e+00 +1266 6325.00 2.92408053567893659874e+01 2.29811726860330223232e+00 3.88306075572953401931e+00 2.26437457301457500947e+00 3.67462775496984539458e+00 2.30794452837639063603e+00 3.45788525690015946523e+00 2.27871684347823366679e+00 3.78277221245578409992e+00 +1267 6330.00 2.92668570144755406659e+01 2.30029060904640925145e+00 3.88690423775662763362e+00 2.26635714540523114380e+00 3.67790806424499017169e+00 2.30996235587421727686e+00 3.46124051669190357927e+00 2.28069670389451806258e+00 3.78624973720784874232e+00 +1268 6335.00 2.92929089866085412552e+01 2.30246403707653568560e+00 3.89074861380145886613e+00 2.26833985365889079233e+00 3.68118837348904337503e+00 2.31198028780072739607e+00 3.46459602442404035472e+00 2.28267675306181461181e+00 3.78972807875473227668e+00 +1269 6340.00 2.93189612730847386501e+01 2.30463755172982009967e+00 3.89459388283798091379e+00 2.27032269837667044499e+00 3.68446868275382488633e+00 2.31399832414555728377e+00 3.46795177925707998057e+00 2.28465699249328135778e+00 3.79320723822612126952e+00 +1270 6345.00 2.93450138741114052721e+01 2.30681115199058117682e+00 3.89844004382978415180e+00 2.27230568013896228052e+00 3.68774899201860595355e+00 2.31601646490870782813e+00 3.47130778034116538322e+00 2.28663742370207723198e+00 3.79668721675170406371e+00 +1271 6350.00 2.93710667894812651468e+01 2.30898483688459243979e+00 3.90228709575082222116e+00 2.27428879953651730261e+00 3.69102930127302242269e+00 2.31803471009017769688e+00 3.47466402683680364305e+00 2.28861804819099790009e+00 3.80016801546116589350e+00 +1272 6355.00 2.93971200191943147217e+01 2.31115860541690087970e+00 3.90613503757504831881e+00 2.27627205714972724593e+00 3.69430961050671102797e+00 2.32005305965887576036e+00 3.47802051789413857463e+00 2.29059886749392882521e+00 3.80364963547383094777e+00 +1273 6360.00 2.94231735633541937602e+01 2.31333245660291675350e+00 3.90998386827641830621e+00 2.27825545357970860039e+00 3.69758991979222040314e+00 2.32207151362516572846e+00 3.48137725265295072674e+00 2.29257988312402982700e+00 3.80713207791938579305e+00 +1274 6365.00 2.94492274219609093677e+01 2.31550638943732245423e+00 3.91383358682888493618e+00 2.28023898941721592237e+00 3.70087022902590900841e+00 2.32409007196831929321e+00 3.48473423026338302577e+00 2.29456109659445983695e+00 3.81061534390678913198e+00 +1275 6370.00 2.94752815950144544388e+01 2.31768040294589194872e+00 3.91768419218567487405e+00 2.28222266525300288009e+00 3.70415053830105378552e+00 2.32610873468833601052e+00 3.48809144988594299619e+00 2.29654250944946891622e+00 3.81409943454500011129e+00 +1276 6375.00 2.95013360824111856573e+01 2.31985449611294392014e+00 3.92153568332074042857e+00 2.28420648167782358584e+00 3.70743084758656316069e+00 2.32812750175412386255e+00 3.49144891065004703279e+00 2.29852412320221732855e+00 3.81758435097406945147e+00 +1277 6380.00 2.95273908842547534448e+01 2.32202866796425233531e+00 3.92538805920803790528e+00 2.28619043928243081965e+00 3.71071115682025176596e+00 2.33014637317604789146e+00 3.49480661171620177186e+00 2.30050593940731840092e+00 3.82107009428222887948e+00 +1278 6385.00 2.95534460004415073797e+01 2.32420291749449914320e+00 3.92924131881115457077e+00 2.28817453867830788994e+00 3.71399146608503372136e+00 2.33216534891265014906e+00 3.49816455222418776216e+00 2.30248795958829610697e+00 3.82455666559916407365e+00 +1279 6390.00 2.95795014310750943309e+01 2.32637724370873133495e+00 3.93309546109368168842e+00 2.29015878043547838061e+00 3.71727177534981434448e+00 2.33418442897429567751e+00 3.50152273132414837420e+00 2.30447018528940184012e+00 3.82804406601310631686e+00 +1280 6395.00 2.96055571761555178512e+01 2.32855164562235916748e+00 3.93695048501920963346e+00 2.29214316517579064225e+00 3.72055208461459541169e+00 2.33620361332989245895e+00 3.50488114814549955867e+00 2.30645261804452195165e+00 3.83153229664337802163e+00 +1281 6400.00 2.96316132355791275188e+01 2.33072612224042874374e+00 3.94080638956169204690e+00 2.29412769347963285682e+00 3.72383239388974018880e+00 2.33822290195871129725e+00 3.50823980183838424196e+00 2.30843525941863614293e+00 3.83502135857821091491e+00 +1282 6405.00 2.96576696095532135189e+01 2.33290067255762201270e+00 3.94466317368471752758e+00 2.29611236595848788866e+00 3.72711270314415754612e+00 2.34024229485038848253e+00 3.51159869155294623866e+00 2.31041811094563076523e+00 3.83851125292656281118e+00 +1283 6410.00 2.96837262977668459030e+01 2.33507529558934967540e+00 3.94852083634151318492e+00 2.29809718319274391973e+00 3.73039301239857401526e+00 2.34226179197383288511e+00 3.51495781641860149946e+00 2.31240117419048551994e+00 3.84200198079739330126e+00 +1284 6415.00 2.97097833005309510668e+01 2.33724999033029323670e+00 3.95237937650603354811e+00 2.30008214580424885654e+00 3.73367332166335508248e+00 2.34428139331867857464e+00 3.51831717557512968497e+00 2.31438445069745180049e+00 3.84549354325820402778e+00 +1285 6420.00 2.97358406176382459307e+01 2.33942475577513597784e+00 3.95623879313150261794e+00 2.30206725438375547910e+00 3.73695363094886445765e+00 2.34630109886419813137e+00 3.52167676816231001169e+00 2.31636794203150886418e+00 3.84898594142831829146e+00 +1286 6425.00 2.97618982491923738110e+01 2.34159959094965186566e+00 3.96009908518151165779e+00 2.30405250954274620767e+00 3.74023394018255306293e+00 2.34832090856893493935e+00 3.52503659331992169612e+00 2.31835164975763508011e+00 3.85247917637523862311e+00 +1287 6430.00 2.97879561950896984968e+01 2.34377449483815913922e+00 3.96396025163001386460e+00 2.30603791186161011240e+00 3.74351424945769784003e+00 2.35034082243288944269e+00 3.52839665018774528704e+00 2.32033557544081103785e+00 3.85597324919755957140e+00 +1288 6435.00 2.98140144554338490934e+01 2.34594946644570390148e+00 3.96782229143023501550e+00 2.30802346197255792148e+00 3.74679455868102229132e+00 2.35236084041460591365e+00 3.53175693788483169300e+00 2.32231972064601510652e+00 3.85946816099387568499e+00 +1289 6440.00 2.98400730302248220482e+01 2.34812450477733225540e+00 3.97168520353540221990e+00 2.31000916045597870507e+00 3.75007486791471134069e+00 2.35438096248299011393e+00 3.53511745557168888254e+00 2.32430408694859069740e+00 3.86296391282132578482e+00 +1290 6445.00 2.98661319193589989140e+01 2.35029960882772703812e+00 3.97554898690910407666e+00 2.31199500793371948149e+00 3.75335517723131317780e+00 2.35640118862767877772e+00 3.53847820236736776423e+00 2.32628867592388166585e+00 3.86646050577850441954e+00 +1291 6450.00 2.98921911229400016907e+01 2.35247477760193346441e+00 3.97941364051492962872e+00 2.31398100500689718473e+00 3.75663548648573009103e+00 2.35842151879685202331e+00 3.54183917740128428875e+00 2.32827348915759557713e+00 3.86995794093291456406e+00 +1292 6455.00 2.99182506409678374837e+01 2.35465001009463392734e+00 3.98327916331647058357e+00 2.31596715227663008108e+00 3.75991579575051071416e+00 2.36044195298014525264e+00 3.54520037980285396273e+00 2.33025852820434709045e+00 3.87345621936242112682e+00 +1293 6460.00 2.99443104733388665295e+01 2.35682530532124001610e+00 3.98714555425658767618e+00 2.31795345035440059078e+00 3.76319610499456391750e+00 2.36246249113610184978e+00 3.54856180872222015665e+00 2.33224379468093578893e+00 3.87695534214489168079e+00 +1294 6465.00 2.99703706201567214862e+01 2.35900066225570537171e+00 3.99101281230923543575e+00 2.31993989986205351173e+00 3.76647641425934498471e+00 2.36448313323363068506e+00 3.55192346326807006918e+00 2.33422929015234181804e+00 3.88045531034782964497e+00 +1295 6470.00 2.99964310814214165646e+01 2.36117607991343891882e+00 3.99488093641727504135e+00 2.32192650139034428847e+00 3.76975672352412605193e+00 2.36650387924163752018e+00 3.55528534258018469316e+00 2.33621501621463645293e+00 3.88395612503873488563e+00 +1296 6475.00 3.00224918570292942377e+01 2.36335155728912438278e+00 3.99874992555466057809e+00 2.32391325555075312081e+00 3.77303703281999869290e+00 2.36852472911866795968e+00 3.55864744577761316080e+00 2.33820097446389096874e+00 3.88745778727474888825e+00 +1297 6480.00 3.00485529470840084798e+01 2.36552709338780697834e+00 4.00261977867461826719e+00 2.32590016296512747118e+00 3.77631734204332358829e+00 2.37054568284399236333e+00 3.56200977200013690904e+00 2.34018716650654123868e+00 3.89096029813373567308e+00 +1298 6485.00 3.00746143515855521855e+01 2.36770268718344123471e+00 4.00649049472000839955e+00 2.32788722424494931573e+00 3.77959765132883340755e+00 2.37256674036579040532e+00 3.56537232036680595826e+00 2.34217359391793067402e+00 3.89446365866247123932e+00 +1299 6490.00 3.01006760704302820386e+01 2.36987833770180156279e+00 4.01036207266478683664e+00 2.32987444000169929836e+00 3.78287796057288616680e+00 2.37458790164260635791e+00 3.56873508999667254926e+00 2.34416025831485930198e+00 3.89796786992845634146e+00 +1300 6495.00 3.01267381037218520135e+01 2.37205404391684249177e+00 4.01423451145181253708e+00 2.33186181083649657353e+00 3.78615826983766678993e+00 2.37660916665371146905e+00 3.57209808001915218867e+00 2.34614716131412626154e+00 3.90147293298883068857e+00 +1301 6500.00 3.01528004514602514519e+01 2.37422980483360923643e+00 4.01810781003431483072e+00 2.33384933738155098126e+00 3.78943857908171954918e+00 2.37863053533692125896e+00 3.57546128956366038310e+00 2.34813430450144000616e+00 3.90497884889036717126e+00 +1302 6505.00 3.01788631135418370377e+01 2.37640561944678463391e+00 4.02198196738624602631e+00 2.33583702024834494182e+00 3.79271888835686477037e+00 2.38065200767150741967e+00 3.57882471774924848518e+00 2.35012168949359967485e+00 3.90848561867984090057e+00 +1303 6510.00 3.02049260900702591925e+01 2.37858148676141523126e+00 4.02585698245046685884e+00 2.33782486003799494512e+00 3.79599919760091797372e+00 2.38267358360565006947e+00 3.58218836368460369357e+00 2.35210931791776900468e+00 3.91199324340402698752e+00 +1304 6515.00 3.02309893810455072582e+01 2.38075740575145422540e+00 4.02973285418020488180e+00 2.33981285738271216346e+00 3.79927950687606275082e+00 2.38469526308752755028e+00 3.58555222649914151489e+00 2.35409719138038431296e+00 3.91550172412006158851e+00 +1305 6520.00 3.02570529863639485768e+01 2.38293337542194816336e+00 4.03360958152868409599e+00 2.34180101289397812891e+00 3.80255981615120752792e+00 2.38671704608604873243e+00 3.58891630531191285769e+00 2.35608531150860889269e+00 3.91901106186435610468e+00 +1306 6525.00 3.02831169061292229117e+01 2.38510939476757943822e+00 4.03748716345949532069e+00 2.34378932719363941573e+00 3.80584012540562532934e+00 2.38873893253902869205e+00 3.59228059924196951869e+00 2.35807367991924277106e+00 3.92252125767332104900e+00 +1307 6530.00 3.03091811403413267101e+01 2.38728546278302999895e+00 4.04136559891550017909e+00 2.34577780090354215403e+00 3.80912043464967764450e+00 2.39076092241537452310e+00 3.59564510740836285052e+00 2.36006229823944968516e+00 3.92603231259373020023e+00 +1308 6535.00 3.03352456888966273141e+01 2.38946157846298268268e+00 4.04524488686028860229e+00 2.34776643463516787591e+00 3.81240074391445871171e+00 2.39278301566326589978e+00 3.59900982891978094003e+00 2.36205116809639426023e+00 3.92954422765162947329e+00 +1309 6540.00 3.03613105518987538289e+01 2.39163774079175484033e+00 4.04912502624708636745e+00 2.34975522901036315560e+00 3.81568105317923977893e+00 2.39480521222051923047e+00 3.60237476290563751746e+00 2.36404029112760394327e+00 3.93305700387306478305e+00 +1310 6545.00 3.03873757292440664912e+01 2.39381394876402886496e+00 4.05300601601875509772e+00 2.35174418465097323505e+00 3.81896136243365669216e+00 2.39682751205604072098e+00 3.60573990845389324988e+00 2.36602966896024202725e+00 3.93657064230480990830e+00 +1311 6550.00 3.04134412211398625914e+01 2.39599020137448714962e+00 4.05688785513888472423e+00 2.35373330218920884249e+00 3.82224167170880191335e+00 2.39884991509728262571e+00 3.60910526470432690971e+00 2.36801930324220144541e+00 3.94008514397291209619e+00 +1312 6555.00 3.04395070273788448389e+01 2.39816649761781119921e+00 4.06077054255033509378e+00 2.35572258222618824419e+00 3.82552198098394669046e+00 2.40087242131315203864e+00 3.61247083075526331797e+00 2.37000919561101008881e+00 3.94360050988268850958e+00 +1313 6560.00 3.04655731479610167867e+01 2.40034283647831925279e+00 4.06465407722706384419e+00 2.35771202541484914406e+00 3.82880229022799944971e+00 2.40289503063110077008e+00 3.61583660572575116277e+00 2.37199934770419584851e+00 3.94711674108091292723e+00 +1314 6565.00 3.04916395829900217507e+01 2.40251921694033088173e+00 4.06853845809120162613e+00 2.35970163235630936427e+00 3.83208259947205265306e+00 2.40491774299930893832e+00 3.61920258871411526513e+00 2.37398976115928705966e+00 3.95063383856254013438e+00 +1315 6570.00 3.05177063324658561783e+01 2.40469563801925412250e+00 4.07242368412706756686e+00 2.36169140368277963304e+00 3.83536290874719743016e+00 2.40694055836595399711e+00 3.62256877884977113169e+00 2.37598043764490274299e+00 3.95415180336397931171e+00 +1316 6575.00 3.05437733963885271748e+01 2.40687209867868023849e+00 4.07630975426715913557e+00 2.36368134001610563644e+00 3.83864321799125018941e+00 2.40896347667921739699e+00 3.62593517522067765313e+00 2.37797137880893671991e+00 3.95767063650091355242e+00 +1317 6580.00 3.05698407746543807662e+01 2.40904859791329162277e+00 4.08019666746470210938e+00 2.36567144198849810266e+00 3.84192352726639585470e+00 2.41098649786654961602e+00 3.62930177693552158402e+00 2.37996258629927970318e+00 3.96119033896829497721e+00 +1318 6585.00 3.05959084673670744792e+01 2.41122513472813393420e+00 4.08408442267292226546e+00 2.36766171023216598357e+00 3.84520383652081276793e+00 2.41300962188649448237e+00 3.63266858311335516518e+00 2.38195406176382507013e+00 3.96471091178180667924e+00 +1319 6590.00 3.06219764744229507869e+01 2.41340170808679710390e+00 4.08797301885540864674e+00 2.36965214536895674158e+00 3.84848414579595798912e+00 2.41503284865613832011e+00 3.63603559286286515118e+00 2.38394580688155555137e+00 3.96823235595712953128e+00 +1320 6595.00 3.06480447959256636636e+01 2.41557831700469138880e+00 4.09186245495502465275e+00 2.37164274802071561865e+00 3.85176445504001030429e+00 2.41705617812366257979e+00 3.63940280526164672281e+00 2.38593782331072912228e+00 3.97175467248921831853e+00 +1321 6600.00 3.06741134318752095567e+01 2.41775496044540760820e+00 4.09575272993535843824e+00 2.37363351881965289891e+00 3.85504476439806831323e+00 2.41907961022688056119e+00 3.64277021944947909660e+00 2.38793011270960109371e+00 3.97527786237302649397e+00 +1322 6605.00 3.07001823822715849133e+01 2.41993163741399097688e+00 4.09964384272890836058e+00 2.37562445840834346455e+00 3.85832507355920828473e+00 2.42110314490360867268e+00 3.64613783449359418753e+00 2.38992267674679137457e+00 3.97880192662423581851e+00 +1323 6610.00 3.07262516470111428646e+01 2.42210834688439557993e+00 4.10353579229926523908e+00 2.37761556740863255754e+00 3.86160538282398935195e+00 2.42312678208129783641e+00 3.64950564952340661407e+00 2.39191551710128491592e+00 3.98232686623779974511e+00 +1324 6615.00 3.07523212261975444903e+01 2.42428508785130425451e+00 4.10742857759965307451e+00 2.37960684644236675211e+00 3.86488569206804166711e+00 2.42515052169776401669e+00 3.65287366362687571097e+00 2.39390863544170207078e+00 3.98585268218794475104e+00 +1325 6620.00 3.07783911197271322635e+01 2.42646185930939806141e+00 4.11132219758329853221e+00 2.38159829616248419626e+00 3.86816600135355104229e+00 2.42717436369082228964e+00 3.65624187590232452294e+00 2.39590203344702734611e+00 3.98937937547998711096e+00 +1326 6625.00 3.08044613277035495003e+01 2.42863866022226826402e+00 4.11521665120342738931e+00 2.38358991719083102012e+00 3.87144631060796795552e+00 2.42919830797755942342e+00 3.65961028545844069271e+00 2.39789571278588065084e+00 3.99290694710888205421e+00 +1327 6630.00 3.08305318501268033060e+01 2.43081548959496052120e+00 4.11911193740290126897e+00 2.38558171014925335385e+00 3.87472661986238575693e+00 2.43122235449579138233e+00 3.66297889137281851291e+00 2.39988967514761064592e+00 3.99643539803848968361e+00 +1328 6635.00 3.08566026869968830226e+01 2.43299234640142802988e+00 4.12300805514530921414e+00 2.38757367569068934543e+00 3.87800692910643807210e+00 2.43324650317296953261e+00 3.66634769276450978026e+00 2.40188392222156554823e+00 3.99996472927412938247e+00 +1329 6640.00 3.08826738382101559921e+01 2.43516922963635451538e+00 4.12690500338387877832e+00 2.38956581444735016717e+00 3.88128723839194744727e+00 2.43527075393654479640e+00 3.66971668872147338547e+00 2.40387845569709446281e+00 4.00349494177966125363e+00 +1330 6645.00 3.09087453037666222144e+01 2.43734613828405688452e+00 4.13080278106147069650e+00 2.39155812704108017286e+00 3.88456754765672851448e+00 2.43729510671396853994e+00 3.67308587833166999559e+00 2.40587327724281685448e+00 4.00702603655003919414e+00 +1331 6650.00 3.09348170838735612165e+01 2.43952307131848966648e+00 4.13470138713130896946e+00 2.39355061411445468877e+00 3.88784785684896094793e+00 2.43931956143269168535e+00 3.67645526070378503292e+00 2.40786838856881058035e+00 4.01055801453876092921e+00 +1332 6655.00 3.09608891783236863660e+01 2.44170002773433481025e+00 4.13860082055698708103e+00 2.39554327632041230700e+00 3.89112816615519774288e+00 2.44134411800980233309e+00 3.67982483491541323417e+00 2.40986379137478756718e+00 4.01409087674077991181e+00 +1333 6660.00 3.09869615872206445317e+01 2.44387700650554640092e+00 4.14250108028136487803e+00 2.39753611427043455961e+00 3.89440847538888679225e+00 2.44336877637275096120e+00 3.68319460006487897630e+00 2.41185948733973187785e+00 4.01762462410959386716e+00 +1334 6665.00 3.10130343104607923976e+01 2.44605400662680638746e+00 4.14640216526803140340e+00 2.39952912861745959461e+00 3.89768878469512403129e+00 2.44539353644898938001e+00 3.68656455524014159408e+00 2.41385547817372092538e+00 4.02115925760906467445e+00 +1335 6670.00 3.10391073481477768325e+01 2.44823102707206841089e+00 4.15030407445984916848e+00 2.40152232000406273826e+00 3.90096909395990509850e+00 2.44741839813487604971e+00 3.68993469953952279994e+00 2.41585176558683079051e+00 4.02469477822377896814e+00 +1336 6675.00 3.10651807002815871783e+01 2.45040806682565159846e+00 4.15420680682040810439e+00 2.40351568906245294244e+00 3.90424940317286583991e+00 2.44944336137859108860e+00 3.69330503204061866285e+00 2.41784835126841057829e+00 4.02823118689687387217e+00 +1337 6680.00 3.10912543667585907770e+01 2.45258512487187374518e+00 4.15811036130293398827e+00 2.40550923642484137943e+00 3.90752971247910307895e+00 2.45146842608685711085e+00 3.69667555184175267158e+00 2.41984523693890052343e+00 4.03176848459220860121e+00 +1338 6685.00 3.11173283476824273919e+01 2.45476220018468804795e+00 4.16201473685028666694e+00 2.40750296275452901895e+00 3.91081002174388414616e+00 2.45349359217676132872e+00 3.70004625803088282865e+00 2.42184242429801299679e+00 4.03530667226328088049e+00 +1339 6690.00 3.11434026430530970231e+01 2.45693929176914149792e+00 4.16591993242605962422e+00 2.40949686866299961352e+00 3.91409033097757319553e+00 2.45551885956539184264e+00 3.70341714968560520305e+00 2.42383991506619045353e+00 4.03884575087395258919e+00 +1340 6695.00 3.11694772527669563544e+01 2.45911639857845987223e+00 4.16982594698347686091e+00 2.41149095482391873091e+00 3.91737064029417414446e+00 2.45754422815946993452e+00 3.70678822589387779729e+00 2.42583771095350719804e+00 4.04238572136735641038e+00 +1341 6700.00 3.11955521769276415966e+01 2.46129351960732467575e+00 4.17373277946539822381e+00 2.41348522185913294535e+00 3.92065094951749903984e+00 2.45956969787608459299e+00 3.71015948574366083434e+00 2.42783581369077028356e+00 4.04592658469699006929e+00 +1342 6705.00 3.12216274155351669606e+01 2.46347065384005459165e+00 4.17764042885614550471e+00 2.41547967041121625087e+00 3.92393125876155179910e+00 2.46159526864268629609e+00 3.71353092831254816275e+00 2.42983422497769119275e+00 4.04946834180598624897e+00 +1343 6710.00 3.12477029684858749192e+01 2.46564780025060370505e+00 4.18154889407784846611e+00 2.41747430113310723954e+00 3.92721156804706117427e+00 2.46362094034526935005e+00 3.71690255268849911729e+00 2.43183294655543891238e+00 4.05301099362711347851e+00 +1344 6715.00 3.12737788358834229996e+01 2.46782495782328981093e+00 4.18545817410446385765e+00 2.41946911466737946128e+00 3.93049187729111393352e+00 2.46564671292165016325e+00 3.72027435794910976696e+00 2.43383198014445456536e+00 4.05655454112423541346e+00 +1345 6720.00 3.12998550177277934381e+01 2.47000212553206699440e+00 4.18936826789957983408e+00 2.42146411165660824238e+00 3.93377218655589455665e+00 2.46767258625782304193e+00 3.72364634318233855836e+00 2.43583132746517927458e+00 4.06009898520939049860e+00 +1346 6725.00 3.13259315139153571295e+01 2.47217930236125305044e+00 4.19327917439569475277e+00 2.42345929274336713277e+00 3.93705249582067606795e+00 2.46969856026051193254e+00 3.72701850746577978413e+00 2.43783099024841698466e+00 4.06364432682571408151e+00 +1347 6730.00 3.13520083245497502844e+01 2.47435648728480250824e+00 4.19719089256676181066e+00 2.42545465858059472453e+00 3.94033280508545713516e+00 2.47172463485716686904e+00 3.73039084986666535926e+00 2.43983097023533757053e+00 4.06719056691633706890e+00 +1348 6735.00 3.13780854496309871138e+01 2.47653367929739687270e+00 4.20110342136600856122e+00 2.42745020982122916564e+00 3.94361311433987404840e+00 2.47375080994414808799e+00 3.73376336948331832843e+00 2.44183126915674586499e+00 4.07073770639330234644e+00 +1349 6740.00 3.14041628890554065379e+01 2.47871087735226236504e+00 4.20501675974665989344e+00 2.42944594709748162842e+00 3.94689342361501882550e+00 2.47577708540744900745e+00 3.73713606537260512042e+00 2.44383188875380996663e+00 4.07428574618937844320e+00 +1350 6745.00 3.14302406429266554255e+01 2.48088808045444508821e+00 4.20893090667230485025e+00 2.43144187106228892858e+00 3.95017373286943573873e+00 2.47780346117452188182e+00 3.74050893662248462590e+00 2.44583283075733559642e+00 4.07783468723733477646e+00 +1351 6750.00 3.14563187112447373295e+01 2.48306528755717081935e+00 4.21284586109616920879e+00 2.43343798235822683651e+00 3.95345404212385309606e+00 2.47982993714172605948e+00 3.74388198230018787172e+00 2.44783409690849218521e+00 4.08138453044921067914e+00 +1352 6755.00 3.14823970939060124863e+01 2.48524249765512195154e+00 4.21676162198184378838e+00 2.43543428164859676599e+00 3.95673435134717754735e+00 2.48185651320541955656e+00 3.74725520148331003867e+00 2.44983568895881154148e+00 4.08493527674741319089e+00 +1353 6760.00 3.15084757910141135540e+01 2.48741970972225212577e+00 4.22067818828255436614e+00 2.43743076957597359922e+00 3.96001466065341478640e+00 2.48388318926196172143e+00 3.75062859325981046155e+00 2.45183760865982813826e+00 4.08848692704398164466e+00 +1354 6765.00 3.15345548024654078745e+01 2.48959692274288002523e+00 4.22459555896188998503e+00 2.43942744679329504010e+00 3.96329496990783169963e+00 2.48590996520771190248e+00 3.75400215667619097104e+00 2.45383985775271051821e+00 4.09203948225095803792e+00 +1355 6770.00 3.15606341284671785274e+01 2.49177413567023098295e+00 4.22851373297307731036e+00 2.44142431394313641491e+00 3.96657527918297736491e+00 2.48793684095975686787e+00 3.75737589082041134603e+00 2.45584243799935508790e+00 4.09559294328038259181e+00 +1356 6775.00 3.15867137688121388805e+01 2.49395134750935065782e+00 4.23243270927970449691e+00 2.44342137168879869336e+00 3.96985558842703012417e+00 2.48996381639372810213e+00 3.76074979474933890344e+00 2.45784535113056801237e+00 4.09914731104429641562e+00 +1357 6780.00 3.16127937235002853811e+01 2.49612855722383031321e+00 4.23635248684536414032e+00 2.44541862067285808990e+00 3.97313589768144659331e+00 2.49199089140598317726e+00 3.76412386755093164581e+00 2.45984859892897400613e+00 4.10270258644437646467e+00 +1358 6785.00 3.16388739926352684506e+01 2.49830576378762314604e+00 4.24027306463364439537e+00 2.44741606155861557426e+00 3.97641620697732012246e+00 2.49401806590324648383e+00 3.76749810828205689006e+00 2.46185218313574161186e+00 4.10625877037193642849e+00 +1359 6790.00 3.16649545762170774310e+01 2.50048296617468279734e+00 4.24419444159777103920e+00 2.44941369497828187463e+00 3.97969651616955255591e+00 2.49604533976114861815e+00 3.77087251602030937292e+00 2.46385610552313316646e+00 4.10981586373901475184e+00 +1360 6795.00 3.16910354742457265331e+01 2.50266016336932750619e+00 4.24811661670133400293e+00 2.45141152160552344696e+00 3.98297682545506148699e+00 2.49807271288641219442e+00 3.77424708982255552314e+00 2.46586036784268136657e+00 4.11337386744729105459e+00 +1361 6800.00 3.17171166866175582300e+01 2.50483735434551224586e+00 4.25203958890792499403e+00 2.45340954209327888336e+00 3.98625713477166288001e+00 2.50010018516503240704e+00 3.77762182875602769982e+00 2.46786497186664721681e+00 4.11693278236734627740e+00 +1362 6805.00 3.17431982134362264958e+01 2.50701453807718976918e+00 4.25596335718113039093e+00 2.45540775708412173373e+00 3.98953744399498733131e+00 2.50212775647264029644e+00 3.78099673188795559753e+00 2.46986991936729216590e+00 4.12049260941122508228e+00 +1363 6810.00 3.17692800545980809090e+01 2.50919171353831416127e+00 4.25988792049490605507e+00 2.45740616723099192242e+00 3.99281775325976839852e+00 2.50415542671595803270e+00 3.78437179827520608910e+00 2.47187521210651395265e+00 4.12405334944951107445e+00 +1364 6815.00 3.17953622102067754440e+01 2.51136887970284039540e+00 4.26381327779211449780e+00 2.45940477320755457313e+00 3.99609806251418619993e+00 2.50618319577061710035e+00 3.78774702699537435535e+00 2.47388085185657313758e+00 4.12761500338387943287e+00 +1365 6820.00 3.18214446802622958899e+01 2.51354603554472166849e+00 4.26773942804670891604e+00 2.46140357566674872203e+00 3.99937837178933097704e+00 2.50821106353297684777e+00 3.79112241710532726913e+00 2.47588684040009576748e+00 4.13117757209527880491e+00 +1366 6825.00 3.18475274647646457993e+01 2.51572318003791162155e+00 4.27166637023264250672e+00 2.46340257525114791903e+00 4.00265868103338373629e+00 2.51023902987866742720e+00 3.79449796766193081510e+00 2.47789317949897869298e+00 4.13474105645429634848e+00 +1367 6830.00 3.18736105636101889615e+01 2.51790031216672938186e+00 4.27559410331350697732e+00 2.46540177262405535430e+00 4.00593899030852895748e+00 2.51226709468331943498e+00 3.79787367773241735236e+00 2.47989987094621122665e+00 4.13830545733151300425e+00 +1368 6835.00 3.18996939769025580347e+01 2.52007743089476399234e+00 4.27952262624252544043e+00 2.46740116844877377389e+00 4.00921929955258171674e+00 2.51429525784329221949e+00 3.80124954637365242149e+00 2.48190691651405481721e+00 4.14187077561824423810e+00 +1369 6840.00 3.19257777045381274661e+01 2.52225453519596909402e+00 4.28345193799365553389e+00 2.46940076338860503569e+00 4.01249960881736278395e+00 2.51632351924458141923e+00 3.80462557264250333944e+00 2.48391431798513595552e+00 4.14543701217470861309e+00 +1370 6845.00 3.19518617466205263611e+01 2.52443162404430054835e+00 4.28738203754084779007e+00 2.47140055808612357779e+00 4.01577991808214385117e+00 2.51835187874208843439e+00 3.80800175559583697904e+00 2.48592207715244217781e+00 4.14900416787149328712e+00 +1371 6850.00 3.19779461031497511669e+01 2.52660869642407392988e+00 4.29131292383732976248e+00 2.47340055320463170219e+00 4.01906022733655987622e+00 2.52038033623217216928e+00 3.81137809429051976906e+00 2.48793019579860041901e+00 4.15257224357917920088e+00 +1372 6855.00 3.20040307741258089891e+01 2.52878575128851679210e+00 4.29524459586741791384e+00 2.47540074940743215492e+00 4.02234053660134094343e+00 2.52240889159046455248e+00 3.81475458779378318042e+00 2.48993867570623583774e+00 4.15614124015799024647e+00 +1373 6860.00 3.20301157594450600641e+01 2.53096278763231063991e+00 4.29917705260506899378e+00 2.47740114735782768207e+00 4.02562084583503043689e+00 2.52443754469259529216e+00 3.81813123515212904380e+00 2.49194751867870145645e+00 4.15971115845777994480e+00 +1374 6865.00 3.20562010591075008392e+01 2.53313980440868125044e+00 4.30311029299314196095e+00 2.47940174771912014151e+00 4.02890115512053892388e+00 2.52646629541419587284e+00 3.82150803542242467614e+00 2.49395672650898658773e+00 4.16328199934913367741e+00 +1375 6870.00 3.20822866733204179468e+01 2.53531680060194686277e+00 4.30704431603668513873e+00 2.48140255114424812533e+00 4.03218146438531999110e+00 2.52849514362053273686e+00 3.82488498765117324041e+00 2.49596630097971861062e+00 4.16685376368190940610e+00 +1376 6875.00 3.21083726018765247545e+01 2.53749377517569740803e+00 4.31097912067855748575e+00 2.48340355829651482367e+00 4.03546177363973779251e+00 2.53052408919760107864e+00 3.82826209090560443116e+00 2.49797624390461292521e+00 4.17042645230596065176e+00 +1377 6880.00 3.21344588448794539204e+01 2.53967072711425023712e+00 4.31491470590308079380e+00 2.48540476983922165033e+00 4.03874208290451885972e+00 2.53255313201066645235e+00 3.83163934422185814554e+00 2.49998655707666017634e+00 4.17400006607114448798e+00 +1378 6885.00 3.21605454022255869972e+01 2.54184765537083245945e+00 4.31885107068420737164e+00 2.48740618643567135138e+00 4.04202239215893577295e+00 2.53458227193536078659e+00 3.83501674666716407813e+00 2.50199724228884967658e+00 4.17757460582731887655e+00 +1379 6890.00 3.21866322740185424323e+01 2.54402455894012513582e+00 4.32278821399588952801e+00 2.48940780874916667287e+00 4.04530270146517256791e+00 2.53661150882658681383e+00 3.83839429727766079381e+00 2.50400830136526275638e+00 4.18115007240361169494e+00 +1380 6895.00 3.22127194602583344363e+01 2.54620143677535493154e+00 4.32672613480171897038e+00 2.49140963744300991678e+00 4.04858301067813286522e+00 2.53864084257033839620e+00 3.84177199511021694178e+00 2.50601973608852590658e+00 4.18472646664987646403e+00 +1381 6900.00 3.22388069608413161404e+01 2.54837828786083919752e+00 4.33066483209637809182e+00 2.49341167318050427326e+00 4.05186331994291393244e+00 2.54067027302151871027e+00 3.84514983921133302047e+00 2.50803154828272001353e+00 4.18830378940560787981e+00 +1382 6905.00 3.22648947758711273082e+01 2.55055511116016742079e+00 4.33460430483309089311e+00 2.49541391662495115611e+00 4.05514362915587511793e+00 2.54269980004539464247e+00 3.84852782862751352511e+00 2.51004373975119898788e+00 4.19188204151029797373e+00 +1383 6910.00 3.22909829053477679395e+01 2.55273190563693042066e+00 4.33854455200654243185e+00 2.49741636843965331138e+00 4.05842393846211191288e+00 2.54472942351759634505e+00 3.85190596241562355218e+00 2.51205631231804504822e+00 4.19546122377234631529e+00 +1384 6915.00 3.23170713491676053764e+01 2.55490867028581059017e+00 4.34248557259068235226e+00 2.49941902929827763913e+00 4.06170424773725713408e+00 2.54675914329302699457e+00 3.85528423960143795668e+00 2.51406926777624706304e+00 4.19904133704160820173e+00 +1385 6920.00 3.23431601074342722768e+01 2.55708540404966866433e+00 4.34642736555947006849e+00 2.50142189986412688540e+00 4.06498455696058247355e+00 2.54878895923695347747e+00 3.85866265925218820954e+00 2.51608260796025140493e+00 4.20262238213684913291e+00 +1386 6925.00 3.23692491801477686408e+01 2.55926210592318748027e+00 4.35036992988685522477e+00 2.50342498080050246401e+00 4.06826486624609184872e+00 2.55081887120427763804e+00 3.86204122040401287563e+00 2.51809633467341154045e+00 4.20620435988719698628e+00 +1387 6930.00 3.23953385672044547050e+01 2.56143877485959237106e+00 4.35431326455715783652e+00 2.50542827277070756509e+00 4.07154517551087202776e+00 2.55284887907063007262e+00 3.86541992209305096395e+00 2.52011044975017295400e+00 4.20978727110105044318e+00 +1388 6935.00 3.24214282687079773382e+01 2.56361540983283742179e+00 4.35825736856505852046e+00 2.50743177644840908869e+00 4.07482548475492478701e+00 2.55487898268055024786e+00 3.86879876337616801507e+00 2.52212495500425459838e+00 4.21337111660753915743e+00 +1389 6940.00 3.24475182846583294349e+01 2.56579200981687671757e+00 4.36220224086378571826e+00 2.50943549249690844860e+00 4.07810579403007000820e+00 2.55690918188894045215e+00 3.87217774328950348206e+00 2.52413985224937231777e+00 4.21695589721506269854e+00 +1390 6945.00 3.24736086149518712318e+01 2.56796857378566389940e+00 4.36614788045838331243e+00 2.51143942158987387714e+00 4.08138610326375861348e+00 2.55893947657143039365e+00 3.87555686086919504163e+00 2.52615514333033797101e+00 4.22054161372165559385e+00 +1391 6950.00 3.24996992596922495977e+01 2.57014510070278934251e+00 4.37009428632280627625e+00 2.51344356439060634401e+00 4.08466641259072371639e+00 2.56096986656219627321e+00 3.87893611515138259094e+00 2.52817083007123244442e+00 4.22412826696681076299e+00 +1392 6955.00 3.25257902188794503218e+01 2.57232158953184297800e+00 4.37404145744137284879e+00 2.51544792157277274924e+00 4.08794672181404905587e+00 2.56300035172650364501e+00 3.88231550519293300283e+00 2.53018691428577380265e+00 4.22771585772783620172e+00 +1393 6960.00 3.25518814924098478514e+01 2.57449803925714260089e+00 4.37798939279840038097e+00 2.51745249379967672709e+00 4.09122703106846596910e+00 2.56503093191925524152e+00 3.88569503002998306584e+00 2.53220339782913494986e+00 4.23130438682349652169e+00 +1394 6965.00 3.25779730803870748446e+01 2.57667444883191398830e+00 4.38193809137820711186e+00 2.51945728174498295715e+00 4.09450734033324703631e+00 2.56706160698498919714e+00 3.88907468868830896724e+00 2.53422028250467157307e+00 4.23489385504146120809e+00 +1395 6970.00 3.26040649828111313013e+01 2.57885081724047493523e+00 4.38588755217547632270e+00 2.52146228607199507366e+00 4.09778764959802810353e+00 2.56909237677860913251e+00 3.89245448020404838374e+00 2.53623757017792073043e+00 4.23848426320049664895e+00 +1396 6975.00 3.26301571995783845637e+01 2.58102714344641581690e+00 4.38983777417452536440e+00 2.52346750746474368654e+00 4.10106795885244412858e+00 2.57112324115501689192e+00 3.89583440363406818818e+00 2.53825526266259959840e+00 4.24207561206754402150e+00 +1397 6980.00 3.26562497307924672896e+01 2.58320342641332612033e+00 4.39378875634930743388e+00 2.52547294658653109778e+00 4.10434826811722519579e+00 2.57315419994838645579e+00 3.89921445799377908159e+00 2.54027336181388330161e+00 4.24566790245100555978e+00 +1398 6985.00 3.26823425764533794791e+01 2.58537966512552497278e+00 4.39774049771523412034e+00 2.52747860410066005343e+00 4.10762857737164388539e+00 2.57518525302398559873e+00 3.90259464232968378283e+00 2.54229186945585361457e+00 4.24926113512818837137e+00 +1399 6990.00 3.27084357364574884741e+01 2.58755585852587222107e+00 4.40169299723589357853e+00 2.52948448069116116343e+00 4.11090888663642495260e+00 2.57721640021598741299e+00 3.90597495566755714691e+00 2.54431078744368432965e+00 4.25285531089712609543e+00 +1400 6995.00 3.27345292109084198273e+01 2.58973200560905159051e+00 4.40564625391633413187e+00 2.53149057702133628567e+00 4.11418919585974851572e+00 2.57924764136893180932e+00 3.90935539704353596235e+00 2.54633011761182048716e+00 4.25645043052476523826e+00 +1401 7000.00 3.27606229997025479861e+01 2.59190810533865212406e+00 4.40960026675123728523e+00 2.53349689376485276426e+00 4.11746950513489373691e+00 2.58127897633772063202e+00 3.91273596549376145859e+00 2.54834986181543809991e+00 4.26004649480913943904e+00 +1402 7005.00 3.27867171030471453719e+01 2.59408415666790004295e+00 4.41355503472492127770e+00 2.53550343160574076506e+00 4.12074981441003895810e+00 2.58331040494616370751e+00 3.91611666005436998006e+00 2.55037002189934591811e+00 4.26364350450682927374e+00 +1403 7010.00 3.28128115207349395632e+01 2.59626015858111269807e+00 4.41751055684243176813e+00 2.53751019120730392231e+00 4.12403012367482002531e+00 2.58534192705952836633e+00 3.91949747974077267187e+00 2.55239059971871817822e+00 4.26724146041586926970e+00 +1404 7015.00 3.28389062527659163493e+01 2.59843611004188135283e+00 4.42146683207772195345e+00 2.53951717324320691560e+00 4.12731043292923605037e+00 2.58737354250162443492e+00 3.92287842359947269699e+00 2.55441159710800080873e+00 4.27084036328247673708e+00 +1405 7020.00 3.28650012992437225989e+01 2.60061201001379460607e+00 4.42542385945656846502e+00 2.54152437838711797724e+00 4.13059074218365385178e+00 2.58940525111699049177e+00 3.92625949065624402223e+00 2.55643301592236849018e+00 4.27444021388395700711e+00 +1406 7025.00 3.28910966601683725230e+01 2.60278785747080698698e+00 4.42938163795292361158e+00 2.54353180732306638490e+00 4.13387105145879818480e+00 2.59143705275016600353e+00 3.92964067993686194669e+00 2.55845485802735916891e+00 4.27804101298725569791e+00 +1407 7030.00 3.29171923355398448052e+01 2.60496365137650798260e+00 4.43334016657183482835e+00 2.54553946070399161883e+00 4.13715136072357925201e+00 2.59346894722495990848e+00 3.93302199046709954899e+00 2.56047712527814619321e+00 4.28164276135931398670e+00 +1408 7035.00 3.29432883252545138930e+01 2.60713939071521583202e+00 4.43729944430798362021e+00 2.54754733922428844295e+00 4.14043166996763289944e+00 2.59550093438591167327e+00 3.93640342128309672631e+00 2.56249981952990513179e+00 4.28524545974634918366e+00 +1409 7040.00 3.29693846294160195498e+01 2.60931507442979260247e+00 4.44125947016641564602e+00 2.54955544355762286912e+00 4.14371197923241396666e+00 2.59753301405683023617e+00 3.93978497140026284740e+00 2.56452294263780888883e+00 4.28884910891530424237e+00 +1410 7045.00 3.29954812479207006959e+01 2.61149070150455653305e+00 4.44522024315217922918e+00 2.55156377437766135330e+00 4.14699228849719503387e+00 2.59956518609262010600e+00 3.94316663985473692122e+00 2.56654649646739629887e+00 4.29245370961239203211e+00 +1411 7050.00 3.30215781808722184110e+01 2.61366627090309666670e+00 4.44918176225995409823e+00 2.55357233235807079552e+00 4.15027259780343271700e+00 2.60159745030672562294e+00 3.94654842567229335870e+00 2.56857048288420486415e+00 4.29605926258383163940e+00 +1412 7055.00 3.30476754282705726951e+01 2.61584178159936708852e+00 4.45314402649478768836e+00 2.55558111817251853992e+00 4.15355290701639301432e+00 2.60362980654368580957e+00 3.94993032786834286085e+00 2.57059490374340926522e+00 4.29966576858620097568e+00 +1413 7060.00 3.30737729901157564427e+01 2.61801723254659401974e+00 4.45710703486172654664e+00 2.55759013250503386416e+00 4.15683321627080903937e+00 2.60566225462731182461e+00 3.95331234546865939450e+00 2.57261976092091249058e+00 4.30327322836571646292e+00 +1414 7065.00 3.30998708663041298905e+01 2.62019262272909614353e+00 4.46107078637618137407e+00 2.55959937601892084658e+00 4.16011352553559010659e+00 2.60769479438141349448e+00 3.95669447749901781464e+00 2.57464505627188744441e+00 4.30688164265822592824e+00 +1415 7070.00 3.31259690569393328019e+01 2.62236795111046161466e+00 4.46503528002246952155e+00 2.56160884940857247472e+00 4.16339383481073621596e+00 2.60972742565052850949e+00 3.96007672298519253218e+00 2.57667079168260126920e+00 4.31049101219958341602e+00 +1416 7075.00 3.31520675619177325189e+01 2.62454321664391709845e+00 4.46900051481600080194e+00 2.56361855334765653680e+00 4.16667414406515224101e+00 2.61176014823773972040e+00 3.96345908095295795803e+00 2.57869696900822775731e+00 4.31410133772563941790e+00 +1417 7080.00 3.31781663813429545939e+01 2.62671841832414498796e+00 4.47296648977218680443e+00 2.56562848850983904470e+00 4.16995445330920500027e+00 2.61379296198758570569e+00 3.96684155040736063924e+00 2.58072359012466945316e+00 4.31771261997224442553e+00 +1418 7085.00 3.32042655152150203435e+01 2.62889355509400779454e+00 4.47693320390643645368e+00 2.56763865556878734253e+00 4.17323476259471526362e+00 2.61582586672387673588e+00 3.97022413038453914069e+00 2.58275065691819261104e+00 4.32132485966488655293e+00 +1419 7090.00 3.32303649634302686877e+01 2.63106862592745738283e+00 4.48090065621343391911e+00 2.56964905521889486195e+00 4.17651507183876802287e+00 2.61785886226005759525e+00 3.97360681988953912125e+00 2.58477817125433606549e+00 4.32493805752905213780e+00 +1420 7095.00 3.32564647261959933644e+01 2.63324362980881332419e+00 4.48486884570858812538e+00 2.57165968812346523720e+00 4.17979538111391235589e+00 2.61989194843030492876e+00 3.97698961795850003398e+00 2.58680613499863687466e+00 4.32855221430059344812e+00 +1421 7100.00 3.32825648032012608724e+01 2.63541856568093679769e+00 4.48883777140731066169e+00 2.57367055497689323218e+00 4.18307569035796600332e+00 2.62192512503769936671e+00 3.98037252359646709365e+00 2.58883455005809093308e+00 4.33216733068426851361e+00 +1422 7105.00 3.33086651947570047128e+01 2.63759343252814604242e+00 4.49280743233537371850e+00 2.57568165644248070478e+00 4.18635599959165372042e+00 2.62395839192677993168e+00 3.98375553582921604345e+00 2.59086341828787114494e+00 4.33578340740556456012e+00 +1423 7110.00 3.33347659006559382533e+01 2.63976822931403098949e+00 4.49677782748746146524e+00 2.57769299321462286301e+00 4.18963630885643478763e+00 2.62599174890062814214e+00 3.98713865366179254224e+00 2.59289274157424465272e+00 4.33940044517960465953e+00 +1424 7115.00 3.33608669208980685994e+01 2.64194295500218157002e+00 4.50074895588934875690e+00 2.57970456595662200883e+00 4.19291661815230831678e+00 2.62802519577269011464e+00 3.99052187613033426672e+00 2.59492252181384186471e+00 4.34301844472151188370e+00 +1425 7120.00 3.33869682556906681725e+01 2.64411760856655142504e+00 4.50472081656680778394e+00 2.58171637537323706013e+00 4.19619692742745442615e+00 2.63005873237714160595e+00 3.99390520222952538631e+00 2.59695276087220117134e+00 4.34663740672567922019e+00 +1426 7125.00 3.34130699048264574458e+01 2.64629218898109463964e+00 4.50869340852488775795e+00 2.58372842211740616492e+00 4.19947723671296291315e+00 2.63209235851706280229e+00 3.99728863099550268956e+00 2.59898346064595253679e+00 4.35025733190723240540e+00 +1427 7130.00 3.34391718684090761826e+01 2.64846669518867283699e+00 4.51266673079972502336e+00 2.58574070689388912925e+00 4.20275754594665151842e+00 2.63412607400590115247e+00 4.00067216142294945769e+00 2.60101462302136354765e+00 4.35387822096056531507e+00 +1428 7135.00 3.34652741463348846196e+01 2.65064112618396885424e+00 4.51664078239636612722e+00 2.58775323037635152090e+00 4.20603785523216089359e+00 2.63615987866746692703e+00 4.00405579254800425559e+00 2.60304624989506327992e+00 4.35750007460080102106e+00 +1429 7140.00 3.34913767387075296256e+01 2.65281548092020802443e+00 4.52061556234058681270e+00 2.58976599323846023992e+00 4.20931816446584949887e+00 2.63819377230484120034e+00 4.00743952335498310191e+00 2.60507834313259101222e+00 4.36112289351196924514e+00 +1430 7145.00 3.35174796455270040951e+01 2.65498975837134354450e+00 4.52459106965816015844e+00 2.59177899617461005022e+00 4.21259847377208718200e+00 2.64022775473147097713e+00 4.01082335288002767015e+00 2.60711090465130457261e+00 4.36474667838846475121e+00 +1431 7150.00 3.35435828666896682648e+01 2.65716395750096623374e+00 4.52856730338522606161e+00 2.59379223985846740774e+00 4.21587878297468332534e+00 2.64226182576080237396e+00 4.01420728012818273100e+00 2.60914393633747154766e+00 4.36837142992468407954e+00 +1432 7155.00 3.35696864022991690035e+01 2.65933807728303017726e+00 4.53254426252682929288e+00 2.59580572497406381061e+00 4.21915909220837281879e+00 2.64429598520628195146e+00 4.01759130410449483151e+00 2.61117744008772145747e+00 4.37199714880465606370e+00 +1433 7160.00 3.35957902523554992058e+01 2.66151211667076026401e+00 4.53652194612947479158e+00 2.59781945220542853647e+00 4.22243940145242468986e+00 2.64633023286062663004e+00 4.02097542383473793848e+00 2.61321141777795729055e+00 4.37562383571241308999e+00 +1434 7165.00 3.36218944167550120028e+01 2.66368607464847517718e+00 4.54050035320856970600e+00 2.59983342223659352754e+00 4.22571971076902652698e+00 2.64836456853728297034e+00 4.02435963830323029100e+00 2.61524587133590147303e+00 4.37925149134234725778e+00 +1435 7170.00 3.36479988956013684742e+01 2.66585995017976529198e+00 4.54447948280025482148e+00 2.60184763575158894966e+00 4.22900002002344344021e+00 2.65039899204969797708e+00 4.02774394654611089805e+00 2.61728080263745654932e+00 4.38288011634740115596e+00 +1436 7175.00 3.36741036888945544092e+01 2.66803374222821965134e+00 4.54845933393030588121e+00 2.60386209342408125877e+00 4.23228032927786124162e+00 2.65243350319058857067e+00 4.03112834756842630668e+00 2.61931621358961663759e+00 4.38650971142196510755e+00 +1437 7180.00 3.37002087965309229389e+01 2.67020744976779234037e+00 4.55243990564522249542e+00 2.60587679595882937278e+00 4.23556063850118391656e+00 2.65446810177340086767e+00 4.03451284036485713358e+00 2.62135210609937718829e+00 4.39014027723970734485e+00 +1438 7185.00 3.37263142186141280376e+01 2.67238107177243744417e+00 4.55642119696041536514e+00 2.60789174401913559365e+00 4.23884094778669417991e+00 2.65650278760121816291e+00 4.03789742395081585613e+00 2.62338848205300401162e+00 4.39377181445356868039e+00 +1439 7190.00 3.37524199551441697054e+01 2.67455460718501658590e+00 4.56040320692239031786e+00 2.60990693829939557347e+00 4.24212125706183940110e+00 2.65853756045639322281e+00 4.04128209733134724502e+00 2.62542534336785582383e+00 4.39740432374757617140e+00 +1440 7195.00 3.37785260060173939678e+01 2.67672805500021260272e+00 4.56438593455691865586e+00 2.61192237948363947808e+00 4.24540156632661958014e+00 2.66057242016273676199e+00 4.04466685952186288944e+00 2.62746269195092807536e+00 4.40103780577466974222e+00 +1441 7200.00 3.38046323713374547992e+01 2.67890141418161409348e+00 4.56836937892086858426e+00 2.61393806825589747334e+00 4.24868187552921661165e+00 2.66260736651296658906e+00 4.04805170951704251792e+00 2.62950052970921444029e+00 4.40467226118778754085e+00 +1442 7205.00 3.38307390510007053308e+01 2.68107468368244772350e+00 4.57235353902965080408e+00 2.61595400530020105734e+00 4.25196218483545340661e+00 2.66464239929980095667e+00 4.05143664632193534203e+00 2.63153885852898161701e+00 4.40830769066059779959e+00 +1443 7210.00 3.38568460452144179840e+01 2.68324786248703173186e+00 4.57633841395049412171e+00 2.61797019131094454991e+00 4.25524249411059951598e+00 2.66667751831595811751e+00 4.05482166895195028644e+00 2.63357768034831662973e+00 4.41194409484603600191e+00 +1444 7215.00 3.38829533537713345481e+01 2.68542094956931975958e+00 4.58032400269881101451e+00 2.61998662695143069712e+00 4.25852280336501554103e+00 2.66871272337488285586e+00 4.05820677641213389819e+00 2.63561699705348573275e+00 4.41558147437631376420e+00 +1445 7220.00 3.39090609766714408124e+01 2.68759394387217342981e+00 4.58431030432110464545e+00 2.62200331292641797276e+00 4.26180311262979660825e+00 2.67074801424856600462e+00 4.06159196769716857034e+00 2.63765681057221224037e+00 4.41921982992509843058e+00 +1446 7225.00 3.39351689140183765403e+01 2.68976684439027424744e+00 4.58829731788460382091e+00 2.62402024991993743086e+00 4.26508342188421440966e+00 2.67278339075045412443e+00 4.06497724181210084993e+00 2.63969712281149027078e+00 4.42285916211423479893e+00 +1447 7230.00 3.39612771658121417317e+01 2.69193965007684976598e+00 4.59228504240472013009e+00 2.62603743861601923726e+00 4.26836373114899547687e+00 2.67481885266289998171e+00 4.06836259776197550764e+00 2.64173793567831438622e+00 4.42649947159666190544e+00 +1448 7235.00 3.39873857320527434922e+01 2.69411235990585229416e+00 4.59627347694868415573e+00 2.62805487969869444598e+00 4.27164404040341239011e+00 2.67685439977862271732e+00 4.07174803454147671289e+00 2.64377925110040834511e+00 4.43014075900459047830e+00 +1449 7240.00 3.40134946126365349528e+01 2.69628497285123636118e+00 4.60026262056299817260e+00 2.63007257385199455513e+00 4.27492434964746426118e+00 2.67889003189033925167e+00 4.07513355116601250216e+00 2.64582107098476537743e+00 4.43378302499095777733e+00 +1450 7245.00 3.40396038076671558770e+01 2.69845748787659234225e+00 4.60425247228380118969e+00 2.63209052177031255226e+00 4.27820465890188206259e+00 2.68092574878040412756e+00 4.07851914663026793306e+00 2.64786339724874553170e+00 4.43742627016724533462e+00 +1451 7250.00 3.40657133170409665013e+01 2.70062990395587343428e+00 4.60824303117832556609e+00 2.63410872413768082367e+00 4.28148496819775470357e+00 2.68296155025189930754e+00 4.08190481993928777626e+00 2.64990623182007034586e+00 4.44107049516566476655e+00 +1452 7255.00 3.40918231409652463526e+01 2.70280222005267045660e+00 4.61223429629307180022e+00 2.63612718163812909111e+00 4.28476527746253577078e+00 2.68499743607681429225e+00 4.08529057007738849450e+00 2.65194957660573615854e+00 4.44471570062879006713e+00 +1453 7260.00 3.41179332792327230095e+01 2.70497443514093616201e+00 4.61622626667454305505e+00 2.63814589496605211849e+00 4.28804558671695268401e+00 2.68703340604786777845e+00 4.08867639607034671911e+00 2.65399343353346406360e+00 4.44836188716810276844e+00 +1454 7265.00 3.41440437318433893665e+01 2.70714654819462507973e+00 4.62021894138997080148e+00 2.64016486480548095983e+00 4.29132589596100544327e+00 2.68906945995777624248e+00 4.09206229689211742340e+00 2.65603780452061366546e+00 4.45200905539508529074e+00 +1455 7270.00 3.41701544989008851871e+01 2.70931855817732714087e+00 4.62421231948585731431e+00 2.64218409184044622506e+00 4.29460620523615155264e+00 2.69110559756816680732e+00 4.09544827155810775565e+00 2.65808269149490739025e+00 4.45565720594194569770e+00 +1456 7275.00 3.41962655804052104713e+01 2.71149046406299687462e+00 4.62820640002943406444e+00 2.64420357676534267810e+00 4.29788651450093261985e+00 2.69314181868212143556e+00 4.09883431905263861950e+00 2.66012809637370439830e+00 4.45930633942016907412e+00 +1457 7280.00 3.42223769763563794299e+01 2.71366226481522332392e+00 4.63220118206720243847e+00 2.64622332025383721898e+00 4.30116682370352787501e+00 2.69517812308199333771e+00 4.10222043839111805141e+00 2.66217402108472755984e+00 4.46295645644123695206e+00 +1458 7285.00 3.42484886866507238778e+01 2.71583395940796101797e+00 4.63619666467675894950e+00 2.64824332302105203141e+00 4.30444713297867398438e+00 2.69721451052940830451e+00 4.10560662855786606684e+00 2.66422046756606345497e+00 4.46660755760626493327e+00 +1459 7290.00 3.42746007112882651313e+01 2.71800554681516315370e+00 4.64019284691497002626e+00 2.65026358573029074961e+00 4.30772744226418335955e+00 2.69925098082744918671e+00 4.10899288854756505884e+00 2.66626743772470664595e+00 4.47025964352673810254e+00 +1460 7295.00 3.43007130504762827172e+01 2.72017702600042055039e+00 4.64418972783870120935e+00 2.65228410908631140330e+00 4.31100775152896442677e+00 2.70128753373774044277e+00 4.11237921737562306390e+00 2.66831493349874415699e+00 4.47391271479340701944e+00 +1461 7300.00 3.43268257040074828979e+01 2.72234839594805100305e+00 4.64818730651518485786e+00 2.65430489377314415833e+00 4.31428806080410875978e+00 2.70332416904263661550e+00 4.11576561401599505530e+00 2.67036295681589930240e+00 4.47756677201775499242e+00 +1462 7305.00 3.43529386719855267529e+01 2.72451965561128028881e+00 4.65218558201165066635e+00 2.65632594047482095689e+00 4.31756837005852567302e+00 2.70536088652449135949e+00 4.11915207747372935643e+00 2.67241150961425866228e+00 4.48122181579053702194e+00 +1463 7310.00 3.43790519543067460972e+01 2.72669080397442531449e+00 4.65618455340569514789e+00 2.65834724988573567472e+00 4.32084867931294258625e+00 2.70739768595529550765e+00 4.12253860674350569582e+00 2.67446059381118050879e+00 4.48487784669214128996e+00 +1464 7315.00 3.44051655510748091160e+01 2.72886184001144149747e+00 4.66018421975418384307e+00 2.66036882270028351982e+00 4.32412898857772454164e+00 2.70943456709667307436e+00 4.12592520082000735471e+00 2.67651021134475231023e+00 4.48853486533404932857e+00 +1465 7320.00 3.44312794622897015984e+01 2.73103276267555461487e+00 4.66418458013471148860e+00 2.66239065960249554621e+00 4.32740929792541706433e+00 2.71147152974134320047e+00 4.12931185869791583798e+00 2.67856036415306109078e+00 4.49219287229665376060e+00 +1466 7325.00 3.44573936879514235443e+01 2.73320357096144661568e+00 4.66818563362487548574e+00 2.66441276127640147564e+00 4.33068960708655747993e+00 2.71350857366129449844e+00 4.13269857937191442687e+00 2.68061105416382972066e+00 4.49585186814997594951e+00 +1467 7330.00 3.44835082279563280849e+01 2.73537426383270654284e+00 4.67218737929190375269e+00 2.66643512841639651612e+00 4.33396991634097528134e+00 2.71554569860779038137e+00 4.13608536183668373809e+00 2.68266228331514433592e+00 4.49951185347440851814e+00 +1468 7335.00 3.45096230823044365366e+01 2.73754484025292521565e+00 4.67618981620302864854e+00 2.66845776170651127757e+00 4.33725022559539130640e+00 2.71758290437354688152e+00 4.13947220507654289889e+00 2.68471405354509240482e+00 4.50317282886070557879e+00 +1469 7340.00 3.45357382512030071098e+01 2.73971529920642087319e+00 4.68019294345657232981e+00 2.67048066186186927595e+00 4.34053053482907991167e+00 2.71962019070982652380e+00 4.14285910808617519052e+00 2.68676636678139724168e+00 4.50683479487888938309e+00 +1470 7345.00 3.45618537344447815940e+01 2.74188563965678255840e+00 4.68419676010940300159e+00 2.67250382953540821518e+00 4.34381084412495344083e+00 2.72165755739898340693e+00 4.14624606987062449548e+00 2.68881922496214498253e+00 4.51049775209898928807e+00 +1471 7350.00 3.45879695321333784364e+01 2.74405586057796435639e+00 4.68820126525984282040e+00 2.67452726545261576518e+00 4.34709115340009866202e+00 2.72369500420264332163e+00 4.14963308941420994103e+00 2.69087263004615140360e+00 4.51416170108066516775e+00 +1472 7355.00 3.46140856441651649789e+01 2.74622596095428539442e+00 4.69220645797512414532e+00 2.67655097027679422794e+00 4.35037146267524477139e+00 2.72573253088243072639e+00 4.15302016570125065442e+00 2.69292658394041062309e+00 4.51782664238357778430e+00 +1473 7360.00 3.46402020706437809849e+01 2.74839593973897011736e+00 4.69621233735356824468e+00 2.67857494472306578714e+00 4.35365177188820418053e+00 2.72777013719997185603e+00 4.15640729772642636419e+00 2.69498108861410168302e+00 4.52149257658811709604e+00 +1474 7365.00 3.46663188115692335600e+01 2.75056579592670091827e+00 4.70021890246240658939e+00 2.68059918946509823101e+00 4.35693208118407770968e+00 2.72980782293762125335e+00 4.15979448448442212793e+00 2.69703614599494878590e+00 4.52515950424358148751e+00 +1475 7370.00 3.46924358668378758352e+01 2.75273552848106817237e+00 4.70422615239996222414e+00 2.68262370518692172539e+00 4.36021239043849462291e+00 2.73184558784664011100e+00 4.16318172496991767417e+00 2.69909175803140088945e+00 4.52882742589926667875e+00 +1476 7375.00 3.47185532365533475740e+01 2.75490513637602596475e+00 4.70823408625419581597e+00 2.68464849260365889805e+00 4.36349269970327569013e+00 2.73388343167828962166e+00 4.16656901815686886437e+00 2.70114792666154635015e+00 4.53249634211483609647e+00 +1477 7380.00 3.47446709207156629873e+01 2.75707461859589209041e+00 4.71224270310270032525e+00 2.68667355238897709313e+00 4.36677300894732756120e+00 2.73592135421492432812e+00 4.16995636305032046920e+00 2.70320465382347219219e+00 4.53616625342922219488e+00 +1478 7385.00 3.47707889192211609952e+01 2.75924397409389232649e+00 4.71625200205416472699e+00 2.68869888524763478443e+00 4.37005331823283693637e+00 2.73795935519744126907e+00 4.17334375863459161593e+00 2.70526194147599285955e+00 4.53983716040208484799e+00 +1479 7390.00 3.47969072321734884667e+01 2.76141320186470906606e+00 4.72026198218618286973e+00 2.69072449185329842791e+00 4.37333362748725473779e+00 2.73999743439782994514e+00 4.17673120389399965546e+00 2.70731979155719537644e+00 4.54350906356199590874e+00 +1480 7395.00 3.48230258595726454018e+01 2.76358230087193179614e+00 4.72427264260744106394e+00 2.69275037291072649737e+00 4.37661393675203580500e+00 2.74203559156735243718e+00 4.18011869782322698086e+00 2.70937820600516765523e+00 4.54718196344788694319e+00 +1481 7400.00 3.48491448013149920371e+01 2.76575127009987875581e+00 4.72828398239553759907e+00 2.69477652910395093500e+00 4.37989424597535936812e+00 2.74407382646763409184e+00 4.18350623940659271938e+00 2.71143718677872325173e+00 4.55085586060905633587e+00 +1482 7405.00 3.48752640575041823467e+01 2.76792010852250358610e+00 4.73229600065915612106e+00 2.69680296112736561653e+00 4.38317455527123378545e+00 2.74611213884993743406e+00 4.18689382763877837590e+00 2.71349673581595007832e+00 4.55453075556370823307e+00 +1483 7410.00 3.49013836281401879091e+01 2.77008881510339755039e+00 4.73630869649662233911e+00 2.69882966968572901578e+00 4.38645486450492150254e+00 2.74815052847588647822e+00 4.19028146150410041315e+00 2.71555685507566302306e+00 4.55820664885077597717e+00 +1484 7415.00 3.49275035131193973825e+01 2.77225738883724126538e+00 4.74032206900625929791e+00 2.70085665545270936505e+00 4.38973517379043176589e+00 2.75018899508637959528e+00 4.19366913997651380441e+00 2.71761754650631326413e+00 4.56188354098846460261e+00 +1485 7420.00 3.49536237125454292141e+01 2.77442582868762466219e+00 4.74433611729675241975e+00 2.70288391912269920780e+00 4.39301548305521283311e+00 2.75222753844304257598e+00 4.19705686206106776126e+00 2.71967881204598738165e+00 4.56556143250534507416e+00 +1486 7425.00 3.49797442263146578512e+01 2.77659413362850315821e+00 4.74835084045606148351e+00 2.70491146140045968238e+00 4.39629579234072220828e+00 2.75426615829713616890e+00 4.20044462674207519370e+00 2.72174065365350115187e+00 4.56924032392998391572e+00 +1487 7430.00 3.50058650546343557153e+01 2.77876230265455648194e+00 4.75236623761360377216e+00 2.70693928295965546837e+00 4.39957610155368161742e+00 2.75630485438955918909e+00 4.20383243300385878172e+00 2.72380307327730486477e+00 4.57292021575985963011e+00 +1488 7435.00 3.50319861972972503850e+01 2.78093033471901351916e+00 4.75638230784697224607e+00 2.70896738451541052584e+00 4.40285641081846268463e+00 2.75834362649230069309e+00 4.20722027983073232349e+00 2.72586607287621429663e+00 4.57660110852354051758e+00 +1489 7440.00 3.50581076543033276494e+01 2.78309822882691815238e+00 4.76039905029594656583e+00 2.71099576674139175481e+00 4.40613672009360790582e+00 2.76038247433589445379e+00 4.21060816619665434501e+00 2.72792965438831602754e+00 4.58028300272886745859e+00 +1490 7445.00 3.50842294257562414828e+01 2.78526598393149704691e+00 4.76441646403812324451e+00 2.71302443033199303102e+00 4.40941702929620404916e+00 2.76242139767160033159e+00 4.21399609111703199460e+00 2.72999381978278865546e+00 4.58396589888368222176e+00 +1491 7450.00 3.51103515116559776743e+01 2.78743359902743259582e+00 4.76843454821328016635e+00 2.71505337599197416054e+00 4.41269733862317004025e+00 2.76446039624031847382e+00 4.21738405354509282574e+00 2.73205857100808513493e+00 4.58764979748546153360e+00 +1492 7455.00 3.51364739120025575403e+01 2.78960107307831428614e+00 4.77245330191974215239e+00 2.71708260440536486513e+00 4.41597764786722368768e+00 2.76649946980367245075e+00 4.22077205249624487493e+00 2.73412391002301813359e+00 4.59133469904204627454e+00 +1493 7460.00 3.51625966266923271064e+01 2.79176840508918822081e+00 4.77647272427655966709e+00 2.71911211626656035278e+00 4.41925795714236713252e+00 2.76853861809219692347e+00 4.22416008692371747202e+00 2.73618983876567689606e+00 4.59502060405091317108e+00 +1494 7465.00 3.51887196558289190307e+01 2.79393559400291646710e+00 4.78049281440278317490e+00 2.72114191225959167753e+00 4.42253826638642077995e+00 2.77057784085715219646e+00 4.22754815584291776531e+00 2.73825635920523868805e+00 4.59870751299917390753e+00 +1495 7470.00 3.52148429994123546294e+01 2.79610263883490928194e+00 4.78451357140710253901e+00 2.72317199309958146713e+00 4.42581857563047353921e+00 2.77261713783943708478e+00 4.23093625821743657411e+00 2.74032347330052061807e+00 4.60239542638430698673e+00 +1496 7475.00 3.52409666573389728228e+01 2.79826953853839244246e+00 4.78853499441893148969e+00 2.72520235944983202359e+00 4.42909888492634795654e+00 2.77465650877994818302e+00 4.23432439304195629148e+00 2.74239118299997164385e+00 4.60608434469342409301e+00 +1497 7480.00 3.52670906297124204798e+01 2.80043629210804789764e+00 4.79255708256768464537e+00 2.72723301202546686284e+00 4.43237919417040071579e+00 2.77669595341958297396e+00 4.23771255929043189070e+00 2.74445949027277258381e+00 4.60977426841363957521e+00 +1498 7485.00 3.52932149164290649423e+01 2.80260289851783017667e+00 4.79657983496205186924e+00 2.72926395152087986062e+00 4.43565950342481674085e+00 2.77873547149923938449e+00 4.24110075595754487665e+00 2.74652839706737417202e+00 4.61346519802170007551e+00 +1499 7490.00 3.53193395175925388685e+01 2.80476935675205574228e+00 4.80060325072108184941e+00 2.73129517860973880516e+00 4.43893981268959780806e+00 2.78077506275981489736e+00 4.24448898201724755808e+00 2.74859790534259040840e+00 4.61715713400471905459e+00 +1500 7495.00 3.53454644332028493636e+01 2.80693566579504549807e+00 4.80462732899492017680e+00 2.73332669399680128208e+00 4.44222012196474302925e+00 2.78281472693184195322e+00 4.24787723646422499257e+00 2.75066801705723751326e+00 4.62085007682908255333e+00 +1501 7500.00 3.53715896632599822169e+01 2.80910182462075175280e+00 4.80865206889225405007e+00 2.73535849837646338756e+00 4.44550043121915994249e+00 2.78485446375621936710e+00 4.25126551827242860071e+00 2.75273873417013081877e+00 4.62454402698190136789e+00 +1502 7505.00 3.53977152076603118758e+01 2.81126783221349185737e+00 4.81267746955286135346e+00 2.73739059244311899732e+00 4.44878074048394012152e+00 2.78689427296348002372e+00 4.25465382642617839792e+00 2.75481005865044847880e+00 4.62823898490883234302e+00 +1503 7510.00 3.54238410665074709982e+01 2.81343368756794909302e+00 4.81670353010615936995e+00 2.73942297688079960949e+00 4.45206104973835792293e+00 2.78893415430488511575e+00 4.25804215990979084694e+00 2.75688199244664300380e+00 4.63193495108662389725e+00 +1504 7515.00 3.54499672396978198208e+01 2.81559938964771383496e+00 4.82073024969192687195e+00 2.74145565239426280968e+00 4.45534135899277483617e+00 2.79097410749023966403e+00 4.26143051770758507502e+00 2.75895453753825625753e+00 4.63563192599202533728e+00 +1505 7520.00 3.54760937273350052124e+01 2.81776493744746669989e+00 4.82475762742921521209e+00 2.74348861967790424998e+00 4.45862166824719263758e+00 2.79301413228116945930e+00 4.26481889880387932124e+00 2.76102769586337615237e+00 4.63932991006032935388e+00 +1506 7525.00 3.55022205294190200675e+01 2.81993032994116266110e+00 4.82878566246816909313e+00 2.74552187940539038635e+00 4.46190197752233697059e+00 2.79505422837711581252e+00 4.26820730218299004832e+00 2.76310146940154588435e+00 4.64302890375791932343e+00 +1507 7530.00 3.55283476459498643862e+01 2.82209556613384782153e+00 4.83281435394856728749e+00 2.74755543229184473475e+00 4.46518228672493311393e+00 2.79709439553970495851e+00 4.27159572680850985194e+00 2.76517586010121574347e+00 4.64672890754081624465e+00 +1508 7535.00 3.55544750768239055105e+01 2.82426064498911211231e+00 4.83684370099982441360e+00 2.74958927902129701693e+00 4.46846259605189910502e+00 2.79913463347874147402e+00 4.27498417168548261458e+00 2.76725086994192936984e+00 4.65042992186504022811e+00 +1509 7540.00 3.55806028220411221241e+01 2.82642556549127377252e+00 4.84087370277208606240e+00 2.75162342027777828690e+00 4.47174290536850005395e+00 2.80117494193512284184e+00 4.27837263578786330953e+00 2.76932650087213927392e+00 4.65413194715551981062e+00 +1510 7545.00 3.56067308818088221756e+01 2.82859032664537846102e+00 4.84490435841549427209e+00 2.75365785677641161655e+00 4.47502321456073204331e+00 2.80321532062901779270e+00 4.28176111808960602190e+00 2.77140275486102227731e+00 4.65783498387864103307e+00 +1511 7550.00 3.56328592559197119272e+01 2.83075492741501699712e+00 4.84893566705946632567e+00 2.75569258919086390591e+00 4.47830352383587815268e+00 2.80525576930132469755e+00 4.28514961758539136838e+00 2.77347963387775964250e+00 4.66153903245932799138e+00 +1512 7555.00 3.56589879444774311423e+01 2.83291936679487044159e+00 4.85296762785414337316e+00 2.75772761823625778277e+00 4.48158383309029506592e+00 2.80729628765148442326e+00 4.28853813324917698679e+00 2.77555713988116492530e+00 4.66524409333287692903e+00 +1513 7560.00 3.56851169473783542685e+01 2.83508364377962207570e+00 4.85700023996003604765e+00 2.75976294457589554909e+00 4.48486414232398455937e+00 2.80933687543075771842e+00 4.29192666406527667533e+00 2.77763527483005479013e+00 4.66895016695530618023e+00 +1514 7565.00 3.57112462647260926474e+01 2.83724775734322465226e+00 4.86103350252728549918e+00 2.76179856892490072084e+00 4.48814445160949215818e+00 2.81137753234895093613e+00 4.29531520901801133761e+00 2.77971404070397110075e+00 4.67265725373081686200e+00 +1515 7570.00 3.57373758965206675953e+01 2.83941170649072560650e+00 4.86506741469567316472e+00 2.76383449197766672967e+00 4.49142476087427322540e+00 2.81341825814696067098e+00 4.29870376707097090474e+00 2.78179343946173007751e+00 4.67636535409470077695e+00 +1516 7575.00 3.57635058426584322433e+01 2.84157549018571442545e+00 4.86910197562570612462e+00 2.76587071441822685003e+00 4.49470507012869102681e+00 2.81545905252422823395e+00 4.30209233722919837106e+00 2.78387347307251031836e+00 4.68007446847188557371e+00 +1517 7580.00 3.57896361032430263549e+01 2.84373910743323676797e+00 4.87313718446752908164e+00 2.76790723694097318131e+00 4.49798537939347209402e+00 2.81749991521128784200e+00 4.30548091846665226257e+00 2.78595414348476344557e+00 4.68378459728729978906e+00 +1518 7585.00 3.58157666782744641409e+01 2.84590255720724716326e+00 4.87717304039201060561e+00 2.76994406024030181968e+00 4.50126568865825227306e+00 2.81954084593867149167e+00 4.30886950975728311164e+00 2.78803545269876051904e+00 4.68749574095550780584e+00 +1519 7590.00 3.58418975676490774163e+01 2.84806583852315675642e+00 4.88120954255966221780e+00 2.77198118501060752905e+00 4.50454599791267007447e+00 2.82158184440582093799e+00 4.31225811008541004554e+00 2.79011740264222352081e+00 4.69120789988070807652e+00 +1520 7595.00 3.58680287714705272606e+01 2.85022895034455414631e+00 4.88524669011026357879e+00 2.77401861194628462925e+00 4.50782630717745114168e+00 2.82362291035363277558e+00 4.31564671843535219153e+00 2.79219999531542573123e+00 4.69492107448783180246e+00 +1521 7600.00 3.58941602897388136739e+01 2.85239189167648632406e+00 4.88928448223541156636e+00 2.77605634174172832829e+00 4.51110661644223220890e+00 2.82566404349191424572e+00 4.31903533378106185836e+00 2.79428323266681744030e+00 4.69863526518107565977e+00 +1522 7605.00 3.59202921223502826820e+01 2.85455466149290693068e+00 4.89332291807488850566e+00 2.77809437508096968017e+00 4.51438692567592081417e+00 2.82770524353046859289e+00 4.32242395511722321544e+00 2.79636711667594228814e+00 4.70235047236464165366e+00 +1523 7610.00 3.59464242694085882590e+01 2.85671725880922666718e+00 4.89736199679956474284e+00 2.78013271267913086859e+00 4.51766723494070188138e+00 2.82974651018946632419e+00 4.32581258140742352936e+00 2.79845164930161427463e+00 4.70606669643236585898e+00 +1524 7615.00 3.59725567309137232996e+01 2.85887968259939917459e+00 4.90140171759067744262e+00 2.78217135519951419553e+00 4.52094754421584621440e+00 2.83178784318907528217e+00 4.32920121164634785771e+00 2.80053683251301466228e+00 4.70978393778844584006e+00 +1525 7620.00 3.59986895067620551458e+01 2.86104193185810729005e+00 4.90544207960873457353e+00 2.78421030335724317695e+00 4.52422785348062728161e+00 2.83382924223910181993e+00 4.33258984480794762106e+00 2.80262266827932027269e+00 4.71350219682671944810e+00 +1526 7625.00 3.60248225970572164556e+01 2.86320400558003207436e+00 4.90948308203496974755e+00 2.78624955783634886686e+00 4.52750816274540834883e+00 2.83587070704935051424e+00 4.33597847987654283486e+00 2.80470915856971281244e+00 4.71722147394102186979e+00 +1527 7630.00 3.60509560017992072289e+01 2.86536590275985636467e+00 4.91352472402989448597e+00 2.78828911933122514100e+00 4.53078847199982526206e+00 2.83791223733999098400e+00 4.33936711582608580784e+00 2.80679630535336910313e+00 4.72094176950446087204e+00 +1528 7635.00 3.60770897208843877024e+01 2.86752762239226255403e+00 4.91756700477474062438e+00 2.79032898854663180543e+00 4.53406878124387802131e+00 2.83995383282082825005e+00 4.34275575165125982124e+00 2.80888411058910625329e+00 4.72466308393159994949e+00 +1529 7640.00 3.61032237544164047449e+01 2.86968916346156799335e+00 4.92160992345074710386e+00 2.79236916615623487203e+00 4.53734909051902413069e+00 2.84199549320166777733e+00 4.34614438631565569437e+00 2.81097257626682983656e+00 4.72838541757482122563e+00 +1530 7645.00 3.61293581023952441456e+01 2.87185052497282011785e+00 4.92565347923915020090e+00 2.79440965286479281460e+00 4.54062939978380430972e+00 2.84403721819231414258e+00 4.34953301881395226758e+00 2.81306170434535651736e+00 4.73210877081759306861e+00 +1531 7650.00 3.61554927647172803518e+01 2.87401170592069954424e+00 4.92969767130045610770e+00 2.79645044935633757532e+00 4.54390970901749380317e+00 2.84607900749220865677e+00 4.35292164812010717867e+00 2.81515149679386533776e+00 4.73583314405375244149e+00 +1532 7655.00 3.61816277414861460215e+01 2.87617270528952628794e+00 4.93374249884699356272e+00 2.79849155633562718393e+00 4.54719001830300317835e+00 2.84812086082152049471e+00 4.35631027321843689037e+00 2.81724195557117074173e+00 4.73955853763567880321e+00 +1533 7660.00 3.62077630327018482603e+01 2.87833352208434511965e+00 4.93778796103927053451e+00 2.80053297448669225034e+00 4.55047032753669089544e+00 2.85016277787969141144e+00 4.35969889308289459962e+00 2.81933308266718052337e+00 4.74328495193647992068e+00 +1534 7665.00 3.62338986382607330938e+01 2.88049415529983843243e+00 4.94183405706888656539e+00 2.80257470451429124836e+00 4.55375063682220027061e+00 2.85220475838688924952e+00 4.36308750670816447581e+00 2.82142488004071045893e+00 4.74701238731889940681e+00 +1535 7670.00 3.62600345582664616018e+01 2.88265460393068906342e+00 4.94588078613780712800e+00 2.80461674709209196621e+00 4.55703094607661718385e+00 2.85424680203219249819e+00 4.36647611306819793953e+00 2.82351734966093870227e+00 4.75074084415604591669e+00 +1536 7675.00 3.62861707926153655990e+01 2.88481486698194267149e+00 4.94992814741690256852e+00 2.80665910292485287769e+00 4.56031125534139825106e+00 2.85628890851504158022e+00 4.36986471113695174040e+00 2.82561049349704473954e+00 4.75447032280029713291e+00 +1537 7680.00 3.63123073415147530341e+01 2.88697494344828120560e+00 4.95397614011850251359e+00 2.80870177270696830263e+00 4.56359156460617931828e+00 2.85833107756597026849e+00 4.37325329990910649514e+00 2.82770431351820805688e+00 4.75820082359366924862e+00 +1538 7685.00 3.63384442047573230639e+01 2.88913483232438839110e+00 4.95802476341347819755e+00 2.81074475713283344902e+00 4.56687187387096038549e+00 2.86037330886368978966e+00 4.37664187834825213486e+00 2.82979881170397185031e+00 4.76193234690926914254e+00 +1539 7690.00 3.63645813823430970047e+01 2.89129453261530811048e+00 4.96207401651415835886e+00 2.81278805687611432873e+00 4.57015218313574145270e+00 2.86241560211800738500e+00 4.38003044545943520660e+00 2.83189399002351605006e+00 4.76566489307874885384e+00 +1540 7695.00 3.63907188743756933036e+01 2.89345404331572497725e+00 4.96612389861214342801e+00 2.81483167265193490181e+00 4.57343249237979510013e+00 2.86445795702836347729e+00 4.38341900019588148751e+00 2.83398985042529094613e+00 4.76939846246485199543e+00 +1541 7700.00 3.64168566808551190661e+01 2.89561336343068331800e+00 4.97017440890939532494e+00 2.81687560513396118012e+00 4.57671280164457616735e+00 2.86650037329419848930e+00 4.38680754157300079044e+00 2.83608639490956848661e+00 4.77313305538886556434e+00 +1542 7705.00 3.64429948017813813976e+01 2.89777249195486641398e+00 4.97422554659751714468e+00 2.81891985503731579144e+00 4.57999311090935723456e+00 2.86854285061495373199e+00 4.39019606854401978069e+00 2.83818362542479807331e+00 4.77686867221353317348e+00 +1543 7710.00 3.64691332370508334293e+01 2.89993142790368452211e+00 4.97827731088883496113e+00 2.82096442302530148183e+00 4.58327342018450156758e+00 2.87058538869007051630e+00 4.39358458010361996315e+00 2.84028154395052556680e+00 4.78060531324977766587e+00 +1544 7715.00 3.64952719867671220300e+01 2.90209017026145454921e+00 4.98232970098531513514e+00 2.82300930981304176726e+00 4.58655372942855432683e+00 2.87262798721899015320e+00 4.39697307522575542293e+00 2.84238015245592912095e+00 4.78434297883961434650e+00 +1545 7720.00 3.65214110508265861199e+01 2.90424871803322481867e+00 4.98638271608891958664e+00 2.82505451608456636947e+00 4.58983403869333539404e+00 2.87467064589078935555e+00 4.40036155290510944127e+00 2.84447945291018777780e+00 4.78808166932505852031e+00 +1546 7725.00 3.65475504293328938843e+01 2.90640707023440469925e+00 4.99043635541197794225e+00 2.82710004253427182874e+00 4.59311434794775230728e+00 2.87671336441527270011e+00 4.40375001211563432690e+00 2.84657944728248057942e+00 4.79182138500666887637e+00 +1547 7730.00 3.65736901222860240068e+01 2.90856522587004029390e+00 4.99449061816681716408e+00 2.82914588984618653456e+00 4.59639465722289664029e+00 2.87875614247115363398e+00 4.40713845184164920710e+00 2.84868013754198745602e+00 4.79556212622646160781e+00 +1548 7735.00 3.65998301296859906984e+01 2.91072318393481355159e+00 4.99854550355540450113e+00 2.83119205871470613900e+00 4.59967496647731444170e+00 2.88079897975787346809e+00 4.41052687106747054457e+00 2.85078152566825160363e+00 4.79930389329535866949e+00 +1549 7740.00 3.66259704514291613009e+01 2.91288094342340775356e+00 5.00260101081079433527e+00 2.83323854984459000406e+00 4.60295527573173046676e+00 2.88284187597487306931e+00 4.41391526876705508897e+00 2.85288361362008702216e+00 4.80304668653464794659e+00 +1550 7745.00 3.66521110876191471561e+01 2.91503850337195968834e+00 5.00665713913494947462e+00 2.83528536390950458568e+00 4.60623558499651242215e+00 2.88488483081122870644e+00 4.41730364394544761097e+00 2.85498640336667452999e+00 4.80679050624488901633e+00 +1551 7750.00 3.66782520381523298170e+01 2.91719586276478937137e+00 5.01071388774020043400e+00 2.83733250160384420369e+00 4.60951589423020102743e+00 2.88692784394565471473e+00 4.42069199555587299955e+00 2.85708989688755687908e+00 4.81053535274736709937e+00 +1552 7755.00 3.67043933031323419414e+01 2.91935302060694201742e+00 5.01477125585960337162e+00 2.83937996362200406608e+00 4.61279620358825948045e+00 2.88897091508795478276e+00 4.42408032260337868991e+00 2.85919409614154851340e+00 4.81428122634264266111e+00 +1553 7760.00 3.67305348825591835293e+01 2.92150997591382877161e+00 5.01882924270548702594e+00 2.84142775065837893678e+00 4.61607651277012731583e+00 2.89101404392720695569e+00 4.42746862406191965533e+00 2.86129900309782980727e+00 4.81802812733127527878e+00 +1554 7765.00 3.67566767763292148175e+01 2.92366672770085811450e+00 5.02288784750054162487e+00 2.84347586340736357968e+00 4.61935682203490838305e+00 2.89305723013175875025e+00 4.43085689891581147037e+00 2.86340461973594351264e+00 4.82177605601382097689e+00 +1555 7770.00 3.67828189846497295434e+01 2.92582327496271554779e+00 5.02694706947782510298e+00 2.84552430255298904882e+00 4.62263713129968856208e+00 2.89510047341141607546e+00 4.43424514614937415047e+00 2.86551094801470451756e+00 4.82552501269084110902e+00 +1556 7775.00 3.68089615072097799953e+01 2.92797961672517148557e+00 5.03100690784966619873e+00 2.84757306877928506594e+00 4.62591744055410636349e+00 2.89714377344489237842e+00 4.43763336475728831232e+00 2.86761798991365690625e+00 4.82927499764216694444e+00 +1557 7780.00 3.68351043443203138850e+01 2.93013575198291142954e+00 5.03506736186984937831e+00 2.84962216279101099303e+00 4.62919774982925069651e+00 2.89918712991089977393e+00 4.44102155371350892921e+00 2.86972574740197883258e+00 4.83302601116835539585e+00 +1558 7785.00 3.68612474957740374748e+01 2.93229167975134386026e+00 5.03912843074033833801e+00 2.85167158526183373013e+00 4.63247805908366849792e+00 2.90123054250887957295e+00 4.44440971200235424021e+00 2.87183422242812236291e+00 4.83677805355960188649e+00 +1559 7790.00 3.68873909616745905282e+01 2.93444739903551621296e+00 5.04319011371491932039e+00 2.85372133690687546093e+00 4.63575836833808541115e+00 2.90327401091754433438e+00 4.44779783860814248442e+00 2.87394341698199395907e+00 4.84053112508537353165e+00 +1560 7795.00 3.69135347419183332818e+01 2.93660290887156705253e+00 5.04725241000591839935e+00 2.85577141838943937557e+00 4.63903867758213817041e+00 2.90531753482597121518e+00 4.45118593252555427853e+00 2.87605333302240984139e+00 4.84428522602550160059e+00 +1561 7800.00 3.69396788366089054989e+01 2.93875820824381328578e+00 5.05131531887748508325e+00 2.85782183041428439196e+00 4.64231898685728250342e+00 2.90736111390250862030e+00 4.45457399272854637218e+00 2.87816397251854905193e+00 4.84804035667017974021e+00 +1562 7805.00 3.69658232457463071796e+01 2.94091329618839436577e+00 5.05537883955231226452e+00 2.85987257367580438583e+00 4.64559929612206357064e+00 2.90940474784659874885e+00 4.45796201820143433991e+00 2.88027533743959018864e+00 4.85179651726814675783e+00 +1563 7810.00 3.69919679692269056659e+01 2.94306817169999224149e+00 5.05944297126345610138e+00 2.86192364884766714539e+00 4.64887960538684463785e+00 2.91144843633695282747e+00 4.46135000793890146298e+00 2.88238742975471229357e+00 4.85555370810959807670e+00 +1564 7815.00 3.70181130071543407212e+01 2.94522283380438132383e+00 5.06350771326470194822e+00 2.86397505663463114445e+00 4.65215991467235401302e+00 2.91349217904192148154e+00 4.46473796093562924625e+00 2.88450025143309574105e+00 4.85931192945363576996e+00 +1565 7820.00 3.70442583595285981346e+01 2.94737728151697275791e+00 5.06757306478910596326e+00 2.86602679772072699294e+00 4.65544022387495104454e+00 2.91553597565058009167e+00 4.46812587615520762085e+00 2.88661380442319082107e+00 4.86307118155936191073e+00 +1566 7825.00 3.70704040262460452482e+01 2.94953151385317591249e+00 5.07163902510081676667e+00 2.86807887278998485669e+00 4.65872053316046041971e+00 2.91757982584164254902e+00 4.47151375260268491019e+00 2.88872809071490488364e+00 4.86683146469624361430e+00 +1567 7830.00 3.70965500074103289307e+01 2.95168552983876608664e+00 5.07570559343289140486e+00 2.87013128253679994373e+00 4.66200084242524059874e+00 2.91962372929382141251e+00 4.47490158925201164664e+00 2.89084311225668955103e+00 4.87059277910265553402e+00 +1568 7835.00 3.71226963030214420769e+01 2.95383932846842389708e+00 5.07977276902874841369e+00 2.87218402765556746203e+00 4.66528115167965840016e+00 2.92166768568582835286e+00 4.47828938509787377598e+00 2.89295887102808713109e+00 4.87435512504806300882e+00 +1569 7840.00 3.71488429129757520286e+01 2.95599290878865383903e+00 5.08384055115253996604e+00 2.87423710881995342348e+00 4.66856146094443946737e+00 2.92371169469637814942e+00 4.48167713913494925038e+00 2.89507536899827844223e+00 4.87811850276047831443e+00 +1570 7845.00 3.71749898373768843385e+01 2.95814626979413741736e+00 5.08790893905804875175e+00 2.87629052673471719004e+00 4.67184177019885549242e+00 2.92575575599381876302e+00 4.48506485033719570765e+00 2.89719260811571244218e+00 4.88188291250936590160e+00 +1571 7850.00 3.72011370762248532174e+01 2.96029941052101364107e+00 5.09197793198869508302e+00 2.87834428208388892756e+00 4.67512207945327240566e+00 2.92779986925686275256e+00 4.48845251770965791849e+00 2.89931059034957039344e+00 4.88564835452273715788e+00 +1572 7855.00 3.72272846294160117964e+01 2.96245232998469232299e+00 5.09604752920862758003e+00 2.88039837555149969006e+00 4.67840238870768931889e+00 2.92984403415385896707e+00 4.49184014022628996798e+00 2.90142931766903089397e+00 4.88941482904933177878e+00 +1573 7860.00 3.72534324970540069444e+01 2.96460502720058327597e+00 5.10011772998199752749e+00 2.88245280782157964339e+00 4.68168269798283454008e+00 2.93188825037388456352e+00 4.49522771687140920704e+00 2.90354879204327209763e+00 4.89318233631715759913e+00 +1574 7865.00 3.72795806791388244505e+01 2.96675750120482639716e+00 5.10418853356258672704e+00 2.88450757959888859361e+00 4.68496300723725234150e+00 2.93393251758528839090e+00 4.49861524666042722487e+00 2.90566901543110978068e+00 4.89695087655422689465e+00 +1575 7870.00 3.73057291755668316569e+01 2.96890975100246778950e+00 5.10825993921454557523e+00 2.88656269155709210850e+00 4.68824331649166836655e+00 2.93597683544605470018e+00 4.50200272855693395258e+00 2.90778998979136016345e+00 4.90072044999891076600e+00 +1576 7875.00 3.73318779864416825376e+01 2.97106177562964512973e+00 5.11233194620202269220e+00 2.88861814438022124207e+00 4.69152362576681358775e+00 2.93802120364526153651e+00 4.50539016156597416085e+00 2.90991171708283680175e+00 4.90449105686885911126e+00 +1577 7880.00 3.73580271116597160130e+01 2.97321357411213282873e+00 5.11640455378916669815e+00 2.89067393877303491223e+00 4.69480393502123138916e+00 2.94006562184089270673e+00 4.50877754467186697696e+00 2.91203419929544882194e+00 4.90826269740244480744e+00 +1578 7885.00 3.73841765514282258209e+01 2.97536514546534291981e+00 5.12047776124012710142e+00 2.89273007540920046310e+00 4.69808424429637572217e+00 2.94211008971166032566e+00 4.51216487686929479395e+00 2.91415743835691687380e+00 4.91203537179658500378e+00 +1579 7890.00 3.74103263055399253290e+01 2.97751648872541263557e+00 5.12455156783977994195e+00 2.89478655497274761643e+00 4.70136455355079263541e+00 2.94415460692591413050e+00 4.51555215714257496273e+00 2.91628143624678548562e+00 4.91580908027929197601e+00 +1580 7895.00 3.74364763739948074317e+01 2.97966760290775223297e+00 5.12862597285227295174e+00 2.89684337816843484603e+00 4.70464486280520954864e+00 2.94619917314163881628e+00 4.51893938449675491853e+00 2.91840619493423414355e+00 4.91958382305784436284e+00 +1581 7900.00 3.74626267568965261034e+01 2.98181848705886487494e+00 5.13270097555212156948e+00 2.89890054565956578614e+00 4.70792517206999061585e+00 2.94824378804791109587e+00 4.52232655790578785826e+00 2.92053171635734987177e+00 4.92335960034989117418e+00 +1582 7905.00 3.74887774542450813442e+01 2.98396914018379666445e+00 5.13677657521383768113e+00 2.90095805815089891055e+00 4.71120548132440752909e+00 2.95028845128198691228e+00 4.52571367638508359477e+00 2.92265800249567586633e+00 4.92713641234198629348e+00 +1583 7910.00 3.75149284660404660485e+01 2.98611956131868705455e+00 5.14085277112229821483e+00 2.90301591632646527330e+00 4.71448579057882355414e+00 2.95233316253294475473e+00 4.52910073890859798951e+00 2.92478505529766241722e+00 4.93091425926213844377e+00 +1584 7915.00 3.75410797921790333476e+01 2.98826974949967283379e+00 5.14492956254165090257e+00 2.90507412085992999806e+00 4.71776609985396966351e+00 2.95437792145876798600e+00 4.53248774448137581317e+00 2.92691287673248856649e+00 4.93469314128653735452e+00 +1585 7920.00 3.75672314327644443210e+01 2.99041970375252974534e+00 5.14900694876713771464e+00 2.90713267245605377909e+00 4.72104640909802242277e+00 2.95642272772780501100e+00 4.53587469208773352847e+00 2.92904146874860726868e+00 4.93847305862246610531e+00 +1586 7925.00 3.75933833877966847581e+01 2.99256942311339635410e+00 5.15308492907327320154e+00 2.90919157177813758608e+00 4.72432671838353179794e+00 2.95846758099804185704e+00 4.53926158073272123517e+00 2.93117083331519578948e+00 4.94225401146684184539e+00 +1587 7930.00 3.76195356571721148953e+01 2.99471890661841122494e+00 5.15716350276565993482e+00 2.91125081953094166920e+00 4.72760702760685713741e+00 2.96051248093782604087e+00 4.54264840941101866179e+00 2.93330097238070619525e+00 4.94603599998549015027e+00 +1588 7935.00 3.76456882409943744960e+01 2.99686815328298417072e+00 5.16124266909808504522e+00 2.91331041638813115213e+00 4.73088733688200147043e+00 2.96255742720514403388e+00 4.54603517710694315923e+00 2.93543188790395381815e+00 4.94981902438569321134e+00 +1589 7940.00 3.76718411391598166915e+01 2.99901716215361879847e+00 5.16532242739687941224e+00 2.91537036304410213106e+00 4.73416764614678253764e+00 2.96460241945797786656e+00 4.54942188282554305090e+00 2.93756358185411681205e+00 4.95360308484364164627e+00 +1590 7945.00 3.76979943517721025614e+01 3.00116593226645234083e+00 5.16940277692619343242e+00 2.91743066018288477181e+00 4.73744795540119945088e+00 2.96664745737504231826e+00 4.55280852556150072985e+00 2.93969605615891893535e+00 4.95738818152516014237e+00 +1591 7950.00 3.77241478788312178949e+01 3.00331446264726098505e+00 5.17348371698126907603e+00 2.91949130846778182047e+00 4.74072826464525221013e+00 2.96869254059359288789e+00 4.55619510430949681279e+00 2.94182931280826753806e+00 4.96117431462716762525e+00 +1592 7955.00 3.77503017203371626920e+01 3.00546275234254567366e+00 5.17756524687807395679e+00 2.92155230861391501662e+00 4.74400857394112485110e+00 2.97073766879234346661e+00 4.55958161806421280460e+00 2.94396335372988460222e+00 4.96496148430512285188e+00 +1593 7960.00 3.77764558761863042946e+01 3.00761080038844630380e+00 5.18164736589112084886e+00 2.92361366128458843860e+00 4.74728888320590591832e+00 2.97278284161891415138e+00 4.56296806583069791685e+00 2.94609818088258590407e+00 4.96874969073521910445e+00 +1594 7965.00 3.78026103464822682554e+01 3.00975860581073684230e+00 5.18573007332601587649e+00 2.92567536717419640624e+00 4.75056919246032371973e+00 2.97482805873128830498e+00 4.56635444660363187808e+00 2.94823379623555092977e+00 4.97253893407291513995e+00 +1595 7970.00 3.78287651311214290217e+01 3.01190616766628416201e+00 5.18981336848836516396e+00 2.92773742696676952946e+00 4.75384950169401232500e+00 2.97687331979781655278e+00 4.56974075938806123531e+00 2.95037020172686670350e+00 4.97632921448403831022e+00 +1596 7975.00 3.78549202302074121462e+01 3.01405348498086222975e+00 5.19389725067340712883e+00 2.92979984133597382012e+00 4.75712981097952081200e+00 2.97891862446611899173e+00 4.57312700317867015798e+00 2.95250739931534722515e+00 4.98012053213441419075e+00 +1597 7980.00 3.78810756437402389452e+01 3.01620055680097509665e+00 5.19798171919711293754e+00 2.93186261096584033226e+00 4.76041012024430276739e+00 2.98096397239417942870e+00 4.57651317697013748642e+00 2.95464539094944500519e+00 4.98391288717950242670e+00 +1598 7985.00 3.79072313716162554442e+01 3.01834738216275999534e+00 5.20206677335472456036e+00 2.93392573655076471795e+00 4.76369042948835552664e+00 2.98300936323998344690e+00 4.57989927976751154404e+00 2.95678417858797404350e+00 4.98770627975403968435e+00 +1599 7990.00 3.79333874139390943014e+01 3.02049396012308379866e+00 5.20615241246220961102e+00 2.93598921876441254497e+00 4.76697073876350074784e+00 2.98505479665115114329e+00 4.58328531058620392002e+00 2.95892376415865765438e+00 4.99150071001348383248e+00 +1600 7995.00 3.79595437707087697277e+01 3.02264028970772180571e+00 5.21023863582517332560e+00 2.93805305829081442326e+00 4.77025104803864508085e+00 2.98710027228566721291e+00 4.58667126840016603495e+00 2.96106414964103903387e+00 4.99529617811329806898e+00 +1601 8000.00 3.79857004419252746175e+01 3.02478636996317629126e+00 5.21432544274922182836e+00 2.94011725581400140683e+00 4.77353135728269784011e+00 2.98914578980151679488e+00 4.59005715223517363199e+00 2.96320533696284149627e+00 4.99909268417785224159e+00 +1602 8005.00 3.80118574274849692074e+01 3.02693219994631412817e+00 5.21841283257105370552e+00 2.94218181200763995164e+00 4.77681166653711564152e+00 2.99119134884631998617e+00 4.59344296108590910421e+00 2.96534732808287948558e+00 5.00289022836260688365e+00 +1603 8010.00 3.80380147274915003663e+01 3.02907777870363759121e+00 5.22250080458590648647e+00 2.94424672756612526570e+00 4.78009197576044009281e+00 2.99323694907806148180e+00 4.59682869394705395649e+00 2.96749012493924002598e+00 5.00668881078156768893e+00 +1604 8015.00 3.80641723418412212254e+01 3.03122310526092153538e+00 5.22658935810975311398e+00 2.94631200316312336085e+00 4.78337228506667688777e+00 2.99528259013399722477e+00 4.60021434983401800167e+00 2.96963372948037518384e+00 5.01048843159019519078e+00 +1605 8020.00 3.80903302706377715481e+01 3.03336817868539609933e+00 5.23067849247929039791e+00 2.94837763948266529113e+00 4.78665259433145795498e+00 2.99732827168247695226e+00 4.60359992776221371713e+00 2.97177814366509851496e+00 5.01428909089213181716e+00 +1606 8025.00 3.81164885138811513343e+01 3.03551299801320162430e+00 5.23476820701048506379e+00 2.95044363720878166646e+00 4.78993290358587575639e+00 2.99937399336075660727e+00 4.60698542670559429979e+00 2.97392336942113333365e+00 5.01809078882210890526e+00 +1607 8030.00 3.81426470714677279261e+01 3.03765756230120365089e+00 5.23885850101930916622e+00 2.95250999701513849871e+00 4.79321321281956436167e+00 3.00141975482682088483e+00 4.61037084570029698227e+00 2.97606940870729586024e+00 5.02189352550449807921e+00 +1608 8035.00 3.81688059435011410869e+01 3.03980187060626905193e+00 5.24294937384245862688e+00 2.95457671958576728599e+00 4.79649352210507284866e+00 3.00346555571792572792e+00 4.61375618374100504582e+00 2.97821626345130807678e+00 5.02569730105330325642e+00 +1609 8040.00 3.81949651299813695005e+01 3.04194592196453550415e+00 5.24704082479590461219e+00 2.95664380559433448425e+00 4.79977383136985391587e+00 3.00551139569205716384e+00 4.61714143983276414929e+00 2.98036393561198487134e+00 5.02950211557216508851e+00 +1610 8045.00 3.82211246308048089304e+01 3.04408971543287165673e+00 5.25113285321634304381e+00 2.95871125572487070343e+00 4.80305414063463498309e+00 3.00755727439683484548e+00 4.62052661298062261608e+00 2.98251242712741326812e+00 5.03330796919581846538e+00 +1611 8050.00 3.82472844460750636131e+01 3.04623325006814349436e+00 5.25522545844047161978e+00 2.96077907066140610937e+00 4.80633444989941605030e+00 3.00960319147987975796e+00 4.62391170221035174848e+00 2.98466173992531613735e+00 5.03711486200717395434e+00 +1612 8055.00 3.82734445757921477593e+01 3.04837652492721788988e+00 5.25931863979462477232e+00 2.96284725108797131199e+00 4.80961475915383296353e+00 3.01164914656808324622e+00 4.62729670651663571590e+00 2.98681187595414465719e+00 5.04092279412023813734e+00 +1613 8060.00 3.82996050198524287111e+01 3.05051953905659711808e+00 5.26341239660513515730e+00 2.96491579766786994554e+00 4.81289506839788572279e+00 3.01369513932979504744e+00 4.63068162490452017721e+00 2.98896283716235089400e+00 5.04473176563865166599e+00 +1614 8065.00 3.83257657783595462320e+01 3.05266229151314849588e+00 5.26750672822942789253e+00 2.96698471108513128769e+00 4.81617537772485171388e+00 3.01574116941263481451e+00 4.63406645639978087559e+00 2.99111462547765505349e+00 5.04854177665569103794e+00 +1615 8070.00 3.83519268513134932164e+01 3.05480478136410171786e+00 5.27160163398347325625e+00 2.96905399201342401483e+00 4.81945568693781201119e+00 3.01778723643313195879e+00 4.63745120000746169353e+00 2.99326724283814682437e+00 5.05235282725426948502e+00 +1616 8075.00 3.83780882386106299009e+01 3.05694700765596127923e+00 5.27569711322469636627e+00 2.97112364114713933816e+00 4.82273599619222892443e+00 3.01983334005963488522e+00 4.64083585474297510842e+00 2.99542069118191189858e+00 5.05616491754839181283e+00 +1617 8080.00 3.84042499403545960490e+01 3.05908896945595687455e+00 5.27979316530015996278e+00 2.97319365914958400055e+00 4.82601630544664583766e+00 3.02187947992939953679e+00 4.64422041961136589094e+00 2.99757497244703641215e+00 5.05997804760024294524e+00 +1618 8085.00 3.84304119565453916607e+01 3.06123066582095582078e+00 5.28388978953619581347e+00 2.97526404670478550329e+00 4.82929661471142690488e+00 3.02392565567968318874e+00 4.64760489362804651847e+00 2.99973008857160916563e+00 5.06379221751346531022e+00 +1619 8090.00 3.84565742870793840780e+01 3.06337209580782454665e+00 5.28798698530059496647e+00 2.97733480448641252281e+00 4.83257692397620797209e+00 3.02597186695810504986e+00 4.65098927580842502749e+00 3.00188604147298754299e+00 5.06760742735024116712e+00 +1620 8095.00 3.84827369320601988534e+01 3.06551325848379363492e+00 5.29208475191969007767e+00 2.97940593317849344857e+00 4.83585723324098815112e+00 3.02801811339155868552e+00 4.65437356517827716118e+00 3.00404283310998687639e+00 5.07142367720384790175e+00 +1621 8100.00 3.85088998914878644086e+01 3.06765415290573084661e+00 5.29618308876127130702e+00 2.98147743344433235890e+00 4.83913754250576921834e+00 3.03006439463802834666e+00 4.65775776073228531260e+00 3.00620046538960217219e+00 5.07524096713647132617e+00 +1622 8105.00 3.85350631652586983478e+01 3.06979477814086720855e+00 5.30028199516203635255e+00 2.98354930596795986375e+00 4.84241785171873040383e+00 3.03211071033477086445e+00 4.66114186150658760255e+00 3.00835894024992001050e+00 5.07905929722065874188e+00 +1623 8110.00 3.85612267534763759613e+01 3.07193513324606781723e+00 5.30438147050013952821e+00 2.98562155142304286315e+00 4.84569816103533135276e+00 3.03415706010867758380e+00 4.66452586650623057807e+00 3.01051825963939156949e+00 5.08287866751859507275e+00 +1624 8115.00 3.85873906560372432750e+01 3.07407521730929289561e+00 5.30848151411227853202e+00 2.98769417049361107885e+00 4.84897847027938500020e+00 3.03620344361773453201e+00 4.66790977475698731780e+00 3.01267842545464681336e+00 5.08669907809246613084e+00 +1625 8120.00 3.86135548731485798157e+01 3.07621502936668056449e+00 5.31258212535587670544e+00 2.98976716384296681284e+00 4.85225877950270945149e+00 3.03824986047846890003e+00 4.67129358527427029912e+00 3.01483943965450240654e+00 5.09052052901481921765e+00 +1626 8125.00 3.86397194046031060566e+01 3.07835456851655520083e+00 5.31668330359872687296e+00 2.99184053215514156321e+00 4.85553908873639805677e+00 3.04029631033850122890e+00 4.67467729707348844670e+00 3.01700130414595157902e+00 5.09434302032711183728e+00 +1627 8130.00 3.86658842504008291030e+01 3.08049383380541819122e+00 5.32078504820861564184e+00 2.99391427609343807603e+00 4.85881939807372820184e+00 3.04234279283508923797e+00 4.67806090918041661553e+00 3.01916402086708135499e+00 5.09816655208116298326e+00 +1628 8135.00 3.86920494106453816130e+01 3.08263282431086516056e+00 5.32488735853260930497e+00 2.99598839634188696124e+00 4.86209970731778007291e+00 3.04438930760548842613e+00 4.68144442061046639481e+00 3.02132759172488718491e+00 5.10199112433915846765e+00 +1629 8140.00 3.87182148853367635866e+01 3.08477153910012669158e+00 5.32899023394885684723e+00 2.99806289357415334251e+00 4.86538001656183283217e+00 3.04643585428695518047e+00 4.68482783039977412898e+00 3.02349201866781847059e+00 5.10581673714255401819e+00 +1630 8145.00 3.87443806744749750237e+01 3.08690997725079796510e+00 5.33309367382515109313e+00 3.00013776846390500808e+00 4.86866032580588647960e+00 3.04848243250638128998e+00 4.68821113755338814144e+00 3.02565730360287199474e+00 5.10964339052244298500e+00 +1631 8150.00 3.87705467779563832664e+01 3.08904813784047327374e+00 5.33719767752928131443e+00 3.00221302167444425990e+00 4.87194063504993923885e+00 3.05052904190102447402e+00 4.69159434110744477664e+00 3.02782344845776973941e+00 5.11347108453064613798e+00 +1632 8155.00 3.87967131958846209727e+01 3.09118601992602037853e+00 5.34130224441867174079e+00 3.00428865390016675008e+00 4.87522094436654018779e+00 3.05257568210814111964e+00 4.69497744007735740013e+00 3.02999045513950582276e+00 5.11729981919825327452e+00 +1633 8160.00 3.88228799281560483792e+01 3.09332362259539861427e+00 5.34540737389220677045e+00 3.00636466578364469626e+00 4.87850125362095710102e+00 3.05462235276498672576e+00 4.69836043349926235635e+00 3.03215832559653142297e+00 5.12112959454599536713e+00 +1634 8165.00 3.88490469749779521180e+01 3.09546094491583856367e+00 5.34951306530731152122e+00 3.00844105802963879270e+00 4.88178156288573905641e+00 3.05666905348808981557e+00 4.70174332039893450030e+00 3.03432706171511323845e+00 5.12496041062569052116e+00 +1635 8170.00 3.88752143360393986882e+01 3.09759798597529822928e+00 5.35361931804213764252e+00 3.01051783128072347751e+00 4.88506187214015596965e+00 3.05871578392507137423e+00 4.70512609978142037903e+00 3.03649666543333784929e+00 5.12879226744770466695e+00 +1636 8175.00 3.89013820116513215908e+01 3.09973474485137323597e+00 5.35772613148520626680e+00 3.01259498622092714015e+00 4.88834218143602861062e+00 3.06076254370282363482e+00 4.70850877070358730947e+00 3.03866713865820115004e+00 5.13262516503276611246e+00 +1637 8180.00 3.89275500016064341935e+01 3.10187122061129505468e+00 5.36183350500430577767e+00 3.01467252353428305511e+00 4.89162249066971810407e+00 3.06280933245860298442e+00 4.71189133218084510446e+00 3.04083848331742467863e+00 5.13645910340160138929e+00 +1638 8185.00 3.89537183060083762598e+01 3.10400741234302257610e+00 5.36594143799831879704e+00 3.01675044387372848220e+00 4.89490279992413412913e+00 3.06485614980893750214e+00 4.71527378323896773082e+00 3.04301070130763839927e+00 5.14029408256457642779e+00 +1639 8190.00 3.89798869247535080262e+01 3.10614331912415098103e+00 5.37004992983503459669e+00 3.01882874791292898919e+00 4.89818310917855193054e+00 3.06690299539108401916e+00 4.71865612291409419754e+00 3.04518379454620191638e+00 5.14413010254241687136e+00 +1640 8195.00 3.90060558579454834671e+01 3.10827894004263827199e+00 5.37415897990297075637e+00 3.02090743632555325249e+00 4.90146341846406041753e+00 3.06894986883193476856e+00 4.72203835024236351359e+00 3.04735776495047483436e+00 5.14796716334549042671e+00 +1641 8200.00 3.90322251055842812661e+01 3.11041427417607918571e+00 5.37826858761137494014e+00 3.02298650977490224179e+00 4.90474372770811317679e+00 3.07099676976874569334e+00 4.72542046424955053396e+00 3.04953261442745038323e+00 5.15180526496343027532e+00 +1642 8205.00 3.90583946676699156342e+01 3.11254932062279943139e+00 5.38237875232803641978e+00 3.02506596894500656703e+00 4.90802403697289424400e+00 3.07304369781804531669e+00 4.72880246396142833731e+00 3.05170834489448816740e+00 5.15564440740660145934e+00 +1643 8210.00 3.90845645440987254915e+01 3.11468407845002737133e+00 5.38648947345183604085e+00 3.02714581448880659664e+00 4.91130434622731115724e+00 3.07509065261709046979e+00 4.73218434843486512875e+00 3.05388495823785399708e+00 5.15948459066463982481e+00 +1644 8215.00 3.91107347349743790232e+01 3.11681854674572367259e+00 5.39060075038165731343e+00 3.02922604707996656614e+00 4.91458465556464130231e+00 3.07713763379277382981e+00 4.73556611668526983294e+00 3.05606245638527074249e+00 5.16332581474790863751e+00 +1645 8220.00 3.91369052401932293606e+01 3.11895272460821049165e+00 5.39471258250601870543e+00 3.03130666740251752955e+00 4.91786496474651002586e+00 3.07918464096162214361e+00 4.73894776774878234704e+00 3.05824084124373296589e+00 5.16716807963568047768e+00 +1646 8225.00 3.91630760598588949506e+01 3.12108661112544805150e+00 5.39882496922380106241e+00 3.03338767609903525724e+00 4.92114527400092605092e+00 3.08123167376089357461e+00 4.74232930067190405765e+00 3.06042011469950825386e+00 5.17101138530722792552e+00 +1647 8230.00 3.91892471939714042151e+01 3.12322020538539435464e+00 5.40293790993388789445e+00 3.03546907385354902686e+00 4.92442558321388723641e+00 3.08327873180711575785e+00 4.74571071449077486193e+00 3.06260027866995399037e+00 5.17485573177291424685e+00 +1648 8235.00 3.92154186424271102851e+01 3.12535350647600873586e+00 5.40705140405588746688e+00 3.03755086131899787460e+00 4.92770589249939661158e+00 3.08532581472718048232e+00 4.74909200824153288067e+00 3.06478133504133687381e+00 5.17870111898091778357e+00 +1649 8240.00 3.92415904053296316079e+01 3.12748651349561379575e+00 5.41116545096795498182e+00 3.03963303917941196630e+00 4.93098620177454094460e+00 3.08737292215834457920e+00 4.75247318097068038867e+00 3.06696328574137977441e+00 5.18254754693124120024e+00 +1650 8245.00 3.92677624826789894996e+01 3.12961922553217020138e+00 5.41528005007933721515e+00 3.04171560808772989404e+00 4.93426651104968616579e+00 3.08942005370677286180e+00 4.75585423170399312909e+00 3.06914613263562197076e+00 5.18639501559278937037e+00 +1651 8250.00 3.92939348743715441969e+01 3.13175164167363639933e+00 5.41939520082000747436e+00 3.04379856871761855786e+00 4.93754682038701631086e+00 3.09146720899935578686e+00 4.75923515949833575434e+00 3.07132987765178455675e+00 5.19024352492410923077e+00 +1652 8255.00 3.93201075806145681213e+01 3.13388376103906329817e+00 5.42351090256812007340e+00 3.04588192173237981564e+00 4.94082712957924830022e+00 3.09351438767335240598e+00 4.76261596340021231555e+00 3.07351452266577052086e+00 5.19409307490446892075e+00 +1653 8260.00 3.93462806010971419823e+01 3.13601558269568148063e+00 5.42762715475365009610e+00 3.04796566780568145560e+00 4.94410743881293601731e+00 3.09556158933492531204e+00 4.76599664243539766773e+00 3.07570006958457531354e+00 5.19794366549241360076e+00 +1654 8265.00 3.93724539361301850704e+01 3.13814710576254407570e+00 5.43174395679620758415e+00 3.05004980758009613950e+00 4.94738774810881043464e+00 3.09760881361096718223e+00 4.76937719565039408565e+00 3.07788652029446474501e+00 5.20179529664648754306e+00 +1655 8270.00 3.93986275855064249640e+01 3.14027832933797190762e+00 5.43586130808431011729e+00 3.05213434173965580953e+00 4.95066805733213577412e+00 3.09965606012836936145e+00 4.77275762211243215205e+00 3.08007387669206922354e+00 5.20564796833559739753e+00 +1656 8275.00 3.94248015492258474524e+01 3.14240925250992564344e+00 5.43997920805829604518e+00 3.05421927094766187949e+00 4.95394836662800841509e+00 3.10170332850366214927e+00 4.77613792084728494558e+00 3.08226214066365500344e+00 5.20950168048719586267e+00 +1657 8280.00 3.94509758274957462731e+01 3.14453987438709292590e+00 5.44409765611704798971e+00 3.05630459585705382963e+00 4.95722867599643013392e+00 3.10375061836373600244e+00 4.77951809091182244771e+00 3.08445131410585249299e+00 5.21335643307018870019e+00 +1658 8285.00 3.94771504201088490049e+01 3.14667019407816006549e+00 5.44821665170090341235e+00 3.05839031713113351785e+00 4.96050898504356485574e+00 3.10579792931475662243e+00 4.78289813136291019902e+00 3.08664139890492927876e+00 5.21721222603275602836e+00 +1659 8290.00 3.95033253270651272260e+01 3.14880021067108595290e+00 5.45233619421911175351e+00 3.06047643544356784417e+00 4.96378929436016669285e+00 3.10784526098361535418e+00 4.78627804123668632030e+00 3.08883239694715028278e+00 5.22106905930235054569e+00 +1660 8295.00 3.95295005485718817795e+01 3.15092992328492194076e+00 5.45645628310164365615e+00 3.06256295145765866650e+00 4.96706960366640437599e+00 3.10989261299720443077e+00 4.78965781957965308635e+00 3.09102431011878264755e+00 5.22492693282715059411e+00 +1661 8300.00 3.95556760844218189277e+01 3.15305933102835700410e+00 5.46057691776811093831e+00 3.06464986581598131110e+00 4.97034991290009298126e+00 3.11193998496168955370e+00 4.79303746546940523388e+00 3.09321714029572936155e+00 5.22878584654497124973e+00 +1662 8305.00 3.95818519346149528815e+01 3.15518843298934870134e+00 5.46469809764848868383e+00 3.06673717920256505565e+00 4.97363022216487404847e+00 3.11398737650396073562e+00 4.79641697793171939423e+00 3.09541088937461905672e+00 5.23264580038326432287e+00 +1663 8310.00 3.96080280993585631677e+01 3.15731722829731298319e+00 5.46881982218311435417e+00 3.06882489225998567051e+00 4.97691053145038342365e+00 3.11603478723018323393e+00 4.79979635603382437381e+00 3.09760555923135694201e+00 5.23650679427984488967e+00 +1664 8315.00 3.96342045784453560486e+01 3.15944571605057245023e+00 5.47294209078123561341e+00 3.07091300566190827936e+00 4.98019084069443618290e+00 3.11808221677761476798e+00 4.80317559883258660136e+00 3.09980115173147829921e+00 5.24036882814143734066e+00 +1665 8320.00 3.96603813718753528406e+01 3.16157389536817934328e+00 5.47706490289355318879e+00 3.07300152007163651646e+00 4.98347114995921636194e+00 3.12012966474205288847e+00 4.80655470538487605836e+00 3.10199766878197946696e+00 5.24423190190585408743e+00 +1666 8325.00 3.96865584797521719906e+01 3.16370176534845670702e+00 5.48118825795004305235e+00 3.07509043613174437581e+00 4.98675145921363416335e+00 3.12217713075039160486e+00 4.80993367474755650903e+00 3.10419511222767008363e+00 5.24809601547982129688e+00 +1667 8330.00 3.97127359020758206043e+01 3.16582932512081915988e+00 5.48531215538067762338e+00 3.07717975451589786928e+00 4.99003176847841523056e+00 3.12422461441915899627e+00 4.81331250597749438214e+00 3.10639348396518011342e+00 5.25196116879078811479e+00 +1668 8335.00 3.97389136388463057870e+01 3.16795657379395567688e+00 5.48943659463616295824e+00 3.07926947587703647713e+00 4.99331207773283214379e+00 3.12627211536488358590e+00 4.81669119813155965915e+00 3.10859278587041298891e+00 5.25582736174548070807e+00 +1669 8340.00 3.97650916899599806698e+01 3.17008351047655168031e+00 5.49356157514647058804e+00 3.08135960087846072497e+00 4.99659238691469997917e+00 3.12831963319372885479e+00 4.82006975027698114644e+00 3.11079301979854250249e+00 5.25969459425061813818e+00 +1670 8345.00 3.97912700555204850161e+01 3.17221013429802356498e+00 5.49768709636230301641e+00 3.08345013017311098125e+00 4.99987269625202923606e+00 3.13036716752222288207e+00 4.82344816147062349643e+00 3.11299418763583490843e+00 5.26356286621292568384e+00 +1671 8350.00 3.98174487355278259315e+01 3.17433644436705897363e+00 5.50181315772400214570e+00 3.08554106441392539395e+00 5.00315300553753949941e+00 3.13241471796689463503e+00 4.82682643077972262091e+00 3.11519629123746311095e+00 5.26743217752876269344e+00 +1672 8355.00 3.98436277298783565470e+01 3.17646243981307296878e+00 5.50593975868226603865e+00 3.08763240427456997494e+00 5.00643331479195641265e+00 3.13446228414427263687e+00 4.83020455727150554992e+00 3.11739933247933143079e+00 5.27130252809448673901e+00 +1673 8360.00 3.98698070386757166261e+01 3.17858811974475230500e+00 5.51006689867743659761e+00 3.08972415039761871824e+00 5.00971362405673659168e+00 3.13650986567088363444e+00 4.83358254000283871221e+00 3.11960331323734108011e+00 5.27517391781682309926e+00 +1674 8365.00 3.98959866618162664054e+01 3.18071348329151382117e+00 5.51419457716021454985e+00 3.09181630344637481400e+00 5.01299393321787611910e+00 3.13855746214252873116e+00 4.83696037805132039722e+00 3.12180823535630214138e+00 5.27904634657140015008e+00 +1675 8370.00 3.99221665995072925170e+01 3.18283852957240842585e+00 5.51832279358130417535e+00 3.09390886406341136805e+00 5.01627424257593546031e+00 3.14060507318610060423e+00 4.84033807047381525734e+00 3.12401410071211760311e+00 5.28291981425457723986e+00 +1676 8375.00 3.99483468514378614600e+01 3.18496325771685073747e+00 5.52245154739140797773e+00 3.09600183292239661270e+00 5.01955455176816744967e+00 3.14265269841812733276e+00 4.84371561634791891748e+00 3.12622091115995992539e+00 5.28679432075235045119e+00 +1677 8380.00 3.99745274179189067354e+01 3.18708766684389210866e+00 5.52658083806195499221e+00 3.09809521067626736368e+00 5.02283486106404009064e+00 3.14470033743440824381e+00 4.84709301474086107220e+00 3.12842866856536971909e+00 5.29066986594034993630e+00 +1678 8385.00 4.00007082987431417109e+01 3.18921175609331397638e+00 5.53071066503328445663e+00 3.10018899796759983545e+00 5.02611517040137023571e+00 3.14674798986183601457e+00 4.85047026473023734638e+00 3.13063737477315573443e+00 5.29454644969420673561e+00 +1679 8390.00 4.00268894940142132555e+01 3.19133552457380220702e+00 5.53484102776646302857e+00 3.10228319545969410953e+00 5.02939547960396637905e+00 3.14879565529621130437e+00 4.85384736537291505698e+00 3.13284703165922007173e+00 5.29842407187918684741e+00 +1680 8395.00 4.00530710037321142636e+01 3.19345897143550061514e+00 5.53897192573292240780e+00 3.10437780379512640039e+00 5.03267578882729171852e+00 3.15084333335406130416e+00 4.85722431575685398286e+00 3.13505764106837281346e+00 5.30230273239165139643e+00 +1681 8400.00 4.00792528277931978664e+01 3.19558209579746010931e+00 5.54310335837300094397e+00 3.10647282364756227580e+00 5.03595609812316524767e+00 3.15289102364155082725e+00 4.86060111495964708439e+00 3.13726920485578819608e+00 5.30618243107613452025e+00 +1682 8405.00 4.01054349661974853802e+01 3.19770489679946212647e+00 5.54723532517885775661e+00 3.10856825564921201988e+00 5.03923640739830958069e+00 3.15493872577520884093e+00 4.86397776204852672066e+00 3.13948172486627719024e+00 5.31006316779790843441e+00 +1683 8410.00 4.01316174191522350156e+01 3.19982737357091995278e+00 5.55136782559083208355e+00 3.11066410045301466880e+00 5.04251671663199907414e+00 3.15698643936119838216e+00 4.86735425611145089420e+00 3.14169520295501225604e+00 5.31394494242223558444e+00 +1684 8415.00 4.01578001864501814566e+01 3.20194952524125042714e+00 5.55550085909071622581e+00 3.11276035872227208046e+00 5.04579702592787171511e+00 3.15903416400568293199e+00 4.87073059621565196409e+00 3.14390964097716851811e+00 5.31782775480401959101e+00 +1685 8420.00 4.01839832681949573612e+01 3.20407135095023232196e+00 5.55963442513957861735e+00 3.11485703110992240283e+00 5.04907733518228862835e+00 3.16108189932519323406e+00 4.87410678144908704468e+00 3.14612504076719190493e+00 5.32171160478779992076e+00 +1686 8425.00 4.02101666642829229659e+01 3.20619284983764618602e+00 5.56376852321921422373e+00 3.11695411824817636415e+00 5.05235764441597723362e+00 3.16312964491552683910e+00 4.87748281088935353722e+00 3.14834140416989249900e+00 5.32559649223884168379e+00 +1687 8430.00 4.02363503749213577976e+01 3.20831402104327079172e+00 5.56790315279068881438e+00 3.11905162081069997626e+00 5.05563795374294322471e+00 3.16517740039321360257e+00 4.88085868361404440208e+00 3.15055873304044364858e+00 5.32948241700168612311e+00 +1688 8435.00 4.02625343997993496714e+01 3.21043486370688668785e+00 5.57203831334616328519e+00 3.12114953941934070158e+00 5.05891826295590352203e+00 3.16722516535405285154e+00 4.88423439872148446028e+00 3.15277702921329172625e+00 5.33336937890014084473e+00 +1689 8440.00 4.02887187392278036668e+01 3.21255537696827175864e+00 5.57617400433634013979e+00 3.12324787475812781778e+00 5.06219857224141289720e+00 3.16927293942493770729e+00 4.88760995529963082618e+00 3.15499629452288310461e+00 5.33725737778910858111e+00 +1690 8445.00 4.03149033929994615733e+01 3.21467555996720788514e+00 5.58031022526374087533e+00 3.12534662743854330103e+00 5.06547888146473734849e+00 3.17132072219130245472e+00 4.89098535241571585885e+00 3.15721653080366326805e+00 5.34114641349240137913e+00 +1691 8450.00 4.03410883612179489432e+01 3.21679541185383666146e+00 5.58444697559979719159e+00 3.12744579813425449544e+00 5.06875919075024672367e+00 3.17336851326967650522e+00 4.89436058916806260299e+00 3.15943773991080600894e+00 5.34503648586492019490e+00 +1692 8455.00 4.03672736437796189080e+01 3.21891493175757537060e+00 5.58858425481593901196e+00 3.12954538748783495095e+00 5.07203949999430037110e+00 3.17541631226622422801e+00 4.89773566464463083747e+00 3.16165992366839398997e+00 5.34892759470974787916e+00 +1693 8460.00 4.03934592407881254417e+01 3.22103411884929435871e+00 5.59272206241468960997e+00 3.13164539614185910565e+00 5.07531980925908143831e+00 3.17746411878710954824e+00 4.90111057794374094243e+00 3.16388308390050809749e+00 5.35281973986105796826e+00 +1694 8465.00 4.04196451522434685444e+01 3.22315297226877417458e+00 5.59686039786748246172e+00 3.13374582474926643982e+00 5.07860011852386161735e+00 3.17951193242813268114e+00 4.90448532814299120730e+00 3.16610722245195930213e+00 5.35671292114266250906e+00 +1695 8470.00 4.04458313780419942418e+01 3.22527149115579359062e+00 5.60099926066647402223e+00 3.13584667395262961520e+00 5.08188042778864268456e+00 3.18155975279545710777e+00 4.90785991435106705438e+00 3.16833234113646478036e+00 5.36060713836800584176e+00 +1696 8475.00 4.04720179182873494028e+01 3.22738967466049775368e+00 5.60513865029345925706e+00 3.13794794439452395807e+00 5.08516073704305959780e+00 3.18360757950561135132e+00 4.91123433565592826255e+00 3.17055844178847046066e+00 5.36450239136089912506e+00 +1697 8480.00 4.04982047729795482383e+01 3.22950752195375700992e+00 5.60927856625096232790e+00 3.14004963672788717233e+00 5.08844104629747651103e+00 3.18565541215439607114e+00 4.91460859114553372251e+00 3.17278552624242227154e+00 5.36839867992442520972e+00 +1698 8485.00 4.05243919420149225630e+01 3.23162503217535235223e+00 5.61341900802077820032e+00 3.14215175158492998619e+00 5.09172135554152927028e+00 3.18770325033761103839e+00 4.91798267992856974473e+00 3.17501359631203783351e+00 5.37229600386166428194e+00 +1699 8490.00 4.05505794254971334567e+01 3.23374220447542581880e+00 5.61755997510542837148e+00 3.14425428961859054766e+00 5.09500166489958683513e+00 3.18975109367178299991e+00 4.92135660110336203843e+00 3.17724265381103521122e+00 5.37619436299642750043e+00 +1700 8495.00 4.05767672234261880249e+01 3.23585903802485130853e+00 5.62170146699707373728e+00 3.14635725147144329483e+00 5.09828197409181971267e+00 3.19179894175271439138e+00 4.92473035376823098375e+00 3.17947270057385988906e+00 5.38009375711106851981e+00 +1701 8500.00 4.06029553356984180823e+01 3.23797553196340581749e+00 5.62584348318787341725e+00 3.14846063778606222172e+00 5.10156228334623662590e+00 3.19384679417620409581e+00 4.92810393701113724774e+00 3.18170373841422993166e+00 5.38399418600867019080e+00 +1702 8505.00 4.06291437624174847087e+01 3.24009168546196457683e+00 5.62998602319071217437e+00 3.15056444920502132234e+00 5.10484259261101769312e+00 3.19589465055878063637e+00 4.93147734996149722519e+00 3.18393576914586251547e+00 5.38789564949231447599e+00 +1703 8510.00 4.06553325035833879042e+01 3.24220749768103244648e+00 5.63412908649775268088e+00 3.15266868638126007696e+00 5.10812290187579876033e+00 3.19794251049624378425e+00 4.93485059170726803046e+00 3.18616879457211288340e+00 5.39179814733399087601e+00 +1704 8515.00 4.06815215590924807998e+01 3.24432296778111828317e+00 5.63827267261151554578e+00 3.15477334993662372753e+00 5.11140321114057982754e+00 3.19999037359475702047e+00 4.93822366134677270821e+00 3.18840281652742474350e+00 5.39570167933678046523e+00 +1705 8520.00 4.07077109290483960535e+01 3.24643809492273005546e+00 5.64241678102415988860e+00 3.15687844051368626808e+00 5.11468352035354012486e+00 3.20203823943975773858e+00 4.94159655800942854142e+00 3.19063783680478874061e+00 5.39960624527267363248e+00 +1706 8525.00 4.07339006134511478763e+01 3.24855287826637617599e+00 5.64656141126930233298e+00 3.15898395876538629068e+00 5.11796382962868445787e+00 3.20408610764777357360e+00 4.94496928078319442079e+00 3.19287385721792249527e+00 5.40351184493438996270e+00 +1707 8530.00 4.07600906121970965046e+01 3.25066731699329114491e+00 5.65070656283910022211e+00 3.16108990533429912162e+00 5.12124413890383056724e+00 3.20613397781460474079e+00 4.94834182878711992259e+00 3.19511087958054407210e+00 5.40741847809391718016e+00 +1708 8535.00 4.07862809253898674910e+01 3.25278141025362010907e+00 5.65485223523607860585e+00 3.16319628084226955878e+00 5.12452444815824659230e+00 3.20818184954641472117e+00 4.95171420112989402185e+00 3.19734890567527818561e+00 5.41132614451288063151e+00 +1709 8540.00 4.08124715530294750465e+01 3.25489515722859712454e+00 5.65899842799385144332e+00 3.16530308594223708241e+00 5.12780475744375685565e+00 3.21022972242864046422e+00 4.95508639693056718301e+00 3.19958793732620661032e+00 5.41523484397363663589e+00 +1710 8545.00 4.08386624950122723021e+01 3.25700855707873282441e+00 5.66314514059421547643e+00 3.16741032126641020028e+00 5.13108506667744457275e+00 3.21227759606744545096e+00 4.95845841529782749291e+00 3.20182797632631954698e+00 5.41914457623780965179e+00 +1711 8550.00 4.08648537514418990213e+01 3.25912160898526082065e+00 5.66729237258114881826e+00 3.16951798745736468277e+00 5.13436537595259068212e+00 3.21432547006899360653e+00 4.96183025535072630419e+00 3.20406902447897046216e+00 5.42305534107738917982e+00 +1712 8555.00 4.08910453223183623095e+01 3.26123431210868996999e+00 5.67144012345717296597e+00 3.17162608514730992582e+00 5.13764568521737174933e+00 3.21637334402908559028e+00 4.96520191619794992732e+00 3.20631108356678495852e+00 5.42696713824363730083e+00 +1713 8560.00 4.09172372075380224032e+01 3.26334666563025610486e+00 5.67558839274554305376e+00 3.17373461497882081161e+00 5.14092599448215281654e+00 3.21842121753315701937e+00 4.96857339697927891109e+00 3.20855415539311517037e+00 5.43087996748781343115e+00 +1714 8565.00 4.09434294072044906443e+01 3.26545866873119550178e+00 5.67973717995914473278e+00 3.17584357757374302622e+00 5.14420630373656884160e+00 3.22046909019773641702e+00 4.97194469678267125801e+00 3.21079824175095263072e+00 5.43479382857154647013e+00 +1715 8570.00 4.09696219213178096652e+01 3.26757032058237939509e+00 5.68388648462122780813e+00 3.17795297358501471763e+00 5.14748661297025744688e+00 3.22251696161862399848e+00 4.97531581475827255900e+00 3.21304334442292161000e+00 5.43870872123573256829e+00 +1716 8575.00 4.09958147497743183862e+01 3.26968162036504361723e+00 5.68803630625504563767e+00 3.18006280363448334825e+00 5.15076692226613097603e+00 3.22456483139161864671e+00 4.97868675002513239036e+00 3.21528946521237557477e+00 5.44262464523163291830e+00 +1717 8580.00 4.10220078926776565709e+01 3.27179256726042622105e+00 5.69218664439421306867e+00 3.18217306836472069165e+00 5.15404723156200450518e+00 3.22661269910215775525e+00 4.98205750169193883892e+00 3.21753660589157686189e+00 5.44654160031050871282e+00 +1718 8585.00 4.10482013499241844556e+01 3.27390316044975993037e+00 5.69633749856197990624e+00 3.18428376840793925240e+00 5.15732754077496480249e+00 3.22866056436676895913e+00 4.98542806889847156526e+00 3.21978476825351389579e+00 5.45045958619252957078e+00 +1719 8590.00 4.10743951217211886728e+01 3.27601339911428368623e+00 5.70048886827123624244e+00 3.18639490439634798236e+00 5.16060785000865340777e+00 3.23070842677088787553e+00 4.98879845076378192203e+00 3.22203395407044901333e+00 5.45437860261859341904e+00 +1720 8595.00 4.11005892077577357213e+01 3.27812328243523198879e+00 5.70464075307632345613e+00 3.18850647696215760973e+00 5.16388815929416367112e+00 3.23275628591031516379e+00 4.99216864642764868165e+00 3.22428416513537019483e+00 5.45829864931923403049e+00 +1721 8600.00 4.11267836083447591022e+01 3.28023280960420526853e+00 5.70879315247976659720e+00 3.19061848672721382059e+00 5.16716846856930800413e+00 3.23480414139121474904e+00 4.99553865501949001526e+00 3.22653540321017651138e+00 5.46221972603534755564e+00 +1722 8605.00 4.11529783232749721833e+01 3.28234197981280351186e+00 5.71294606604627119850e+00 3.19273093434445476291e+00 5.17044877783408907135e+00 3.23685199279902224845e+00 4.99890847565835372279e+00 3.22878767008785594328e+00 5.46614183248710450158e+00 +1723 8610.00 4.11791733526520076225e+01 3.28445079223189839723e+00 5.71709949328872646390e+00 3.19484382043572701093e+00 5.17372908706777767662e+00 3.23889983973990203125e+00 5.00227810749438539517e+00 3.23104096753030711753e+00 5.47006496838430944507e+00 +1724 8615.00 4.12053686963722469727e+01 3.28655924607381910718e+00 5.72125343375110961830e+00 3.19695714562287713889e+00 5.17700939634292289782e+00 3.24094768179929104690e+00 5.00564754965700053901e+00 3.23329529730979015056e+00 5.47398913345749527082e+00 +1725 8620.00 4.12315643546429555499e+01 3.28866734051980058595e+00 5.72540788697740321567e+00 3.19907091054847825262e+00 5.18028970558697565707e+00 3.24299551858335144416e+00 5.00901680128597792674e+00 3.23555066119856693518e+00 5.47791432740610328977e+00 +1726 8625.00 4.12577603272568609327e+01 3.29077507476144415222e+00 5.72956285249085528477e+00 3.20118511583437737045e+00 5.18357001486212087826e+00 3.24504334967752061658e+00 5.01238586151073395314e+00 3.23780706096889803192e+00 5.48184054996066816301e+00 +1727 8630.00 4.12839566142139418048e+01 3.29288244800071305818e+00 5.73371832984581342174e+00 3.20329976210241973433e+00 5.18685032407508117558e+00 3.24709117468796248929e+00 5.01575472948141154461e+00 3.24006449838268206776e+00 5.48576780082062942512e+00 +1728 8635.00 4.13101532156178663513e+01 3.29498945942920773433e+00 5.73787431858625396330e+00 3.20541484999518067056e+00 5.19013063338131885871e+00 3.24913899318974896957e+00 5.01912340432742620777e+00 3.24232297519145040710e+00 5.48969607968542927523e+00 +1729 8640.00 4.13363501314686203614e+01 3.29709610824889143288e+00 5.74203081825615679890e+00 3.20753038013450497701e+00 5.19341094263573666012e+00 3.25118680480977229053e+00 5.02249188520928679935e+00 3.24458249316746627500e+00 5.49362538625450635976e+00 +1730 8645.00 4.13625473616625711770e+01 3.29920239366173007056e+00 5.74618782838913855215e+00 3.20964635314224011609e+00 5.19669125189015268518e+00 3.25323460911273976137e+00 5.02586017125640882597e+00 3.24684305407262474574e+00 5.49755572023766969636e+00 +1731 8650.00 4.13887449064069841143e+01 3.30130831484895859163e+00 5.75034534854990653230e+00 3.21176276965059503965e+00 5.19997156116529790637e+00 3.25528240570481575133e+00 5.02922826162929847982e+00 3.24910465964809702655e+00 5.50148708132399288928e+00 +1732 8655.00 4.14149427653909469882e+01 3.30341387103326944441e+00 5.75450337828244062877e+00 3.21387963028141676602e+00 5.20325187040935066562e+00 3.25733019418180091975e+00 5.03259615546773719785e+00 3.25136731165577863578e+00 5.50541946919218982970e+00 +1733 8660.00 4.14411409389253790891e+01 3.30551906141662721339e+00 5.75866191713071806646e+00 3.21599693565655009309e+00 5.20653217974668081069e+00 3.25937797412912999562e+00 5.03596385192186701829e+00 3.25363101185756775635e+00 5.50935288354170360492e+00 +1734 8665.00 4.14673394268030151011e+01 3.30762388520099603895e+00 5.76282096465945059549e+00 3.21811468640820663722e+00 5.20981248892854775789e+00 3.26142574515296868043e+00 5.03933135015219590969e+00 3.25589576199463381911e+00 5.51328732405124366522e+00 +1735 8670.00 4.14935382291274734712e+01 3.30972834159870377135e+00 5.76698052041261544076e+00 3.22023288315823119632e+00 5.21309279821405713307e+00 3.26347350682838799329e+00 5.04269864929850530899e+00 3.25816156380814359039e+00 5.51722279039952567814e+00 +1736 8675.00 4.15197373457951286468e+01 3.31183242980135084110e+00 5.77114058394455575751e+00 3.22235152652847123278e+00 5.21637310752029570438e+00 3.26552125877191601333e+00 5.04606574851093814260e+00 3.26042841904963243138e+00 5.52115928227562502428e+00 +1737 8680.00 4.15459367769096061807e+01 3.31393614904199429461e+00 5.77530115483034478530e+00 3.22447061714077198857e+00 5.21965341672289095953e+00 3.26756900055862509191e+00 5.04943264697072802250e+00 3.26269632947063303874e+00 5.52509679933752639869e+00 +1738 8685.00 4.15721365224709202835e+01 3.31603949851223278600e+00 5.77946223261396063720e+00 3.22659015560661588395e+00 5.22293372597730964912e+00 3.26961673178431455611e+00 5.05279934381765816198e+00 3.26496529679158431492e+00 5.52903534125357953855e+00 +1739 8690.00 4.15983365823754311918e+01 3.31814247743476053998e+00 5.78362381686011239879e+00 3.22871014256857646885e+00 5.22621403526281724794e+00 3.27166445204478550934e+00 5.05616583821223386508e+00 3.26723532276402295338e+00 5.53297490770249655867e+00 +1740 8695.00 4.16245369567267644584e+01 3.32024508503226822853e+00 5.78778590713350737929e+00 3.23083057863813660759e+00 5.22949434450687089537e+00 3.27371216093583639051e+00 5.05953212932532725432e+00 3.26950640912911483227e+00 5.53691549834226215410e+00 +1741 8700.00 4.16507376455249342939e+01 3.32234732050672176840e+00 5.79194850298848873393e+00 3.23295146443714109807e+00 5.23277465374055950065e+00 3.27575985804290503722e+00 5.06289821630708392064e+00 3.27177855759693780868e+00 5.54085711283086013168e+00 +1742 8705.00 4.16769386487699335930e+01 3.32444918308081183156e+00 5.79611160400012792593e+00 3.23507280056670865065e+00 5.23605496301570472184e+00 3.27780754296179033247e+00 5.06626409832837332203e+00 3.27405176992938917735e+00 5.54479975082627785099e+00 +1743 8710.00 4.17031399663581225923e+01 3.32655067197723219863e+00 5.80027520973313404085e+00 3.23719458766941414751e+00 5.23933527230121409701e+00 3.27985521528829293558e+00 5.06962977456006935739e+00 3.27632604783654501901e+00 5.54874341196576903457e+00 +1744 8715.00 4.17293415982895012917e+01 3.32865178641867442977e+00 5.80443931976257943006e+00 3.23931682635673867665e+00 5.24261558155563012207e+00 3.28190287459748386567e+00 5.07299524416267910709e+00 3.27860139304921194281e+00 5.55268809592804668540e+00 +1745 8720.00 4.17555435447713634289e+01 3.33075252562783097332e+00 5.80860393365316962644e+00 3.24143951724016421423e+00 5.24589589082041118928e+00 3.28395052049552793605e+00 5.07636050631743795947e+00 3.28087780728782840711e+00 5.55663380232964332350e+00 +1746 8725.00 4.17817458055964081609e+01 3.33285288881703101183e+00 5.81276905096961371555e+00 3.24356266095190148846e+00 5.24917620009555641047e+00 3.28599815257822536196e+00 5.07972556018485388307e+00 3.28315529228320102106e+00 5.56058053083890069246e+00 +1747 8730.00 4.18079483807646425930e+01 3.33495287521933025943e+00 5.81693467128698316060e+00 3.24568625808270283528e+00 5.25245650930851670779e+00 3.28804577042064805070e+00 5.08309040493579900044e+00 3.28543384975577001939e+00 5.56452828107235308863e+00 +1748 8735.00 4.18341512704833533576e+01 3.33705248406778531844e+00 5.82110079419071357876e+00 3.24781030926478075926e+00 5.25573681858366192898e+00 3.29009337361859488524e+00 5.08645503976187374207e+00 3.28771348140524777293e+00 5.56847705267761661219e+00 +1749 8740.00 4.18603544745452467168e+01 3.33915171458508863722e+00 5.82526741925587820958e+00 3.24993481510961590430e+00 5.25901712785880803835e+00 3.29214096176786652492e+00 5.08981946382358607650e+00 3.28999418896243911448e+00 5.57242684528158704893e+00 +1750 8745.00 4.18865579929503368817e+01 3.34125056600429681808e+00 5.82943454605754762810e+00 3.25205977623905395646e+00 5.26229743710286079761e+00 3.29418853446426407316e+00 5.09318367630217139208e+00 3.29227597413742145704e+00 5.57637765851115574378e+00 +1751 8750.00 4.19127618259058962735e+01 3.34334903755846646334e+00 5.83360217416042914351e+00 3.25418519325421362609e+00 5.26557774636764097664e+00 3.29623609128285810499e+00 5.09654767638922923112e+00 3.29455883862990672739e+00 5.58032949199321315348e+00 +1752 8755.00 4.19389659732046524709e+01 3.34544712848065328714e+00 5.83777030317068845733e+00 3.25631106676657644527e+00 5.26885805564278619784e+00 3.29828363182981298962e+00 5.09991146325563260433e+00 3.29684278417070109057e+00 5.58428234535465417565e+00 +1753 8760.00 4.19651704348465912631e+01 3.34754483800391522408e+00 5.84193893265303287876e+00 3.25843739740835225405e+00 5.27213836492829557301e+00 3.30033115568020152253e+00 5.10327503609298194220e+00 3.29912781243878727722e+00 5.58823621821200600124e+00 +1754 8765.00 4.19913752110390134931e+01 3.34964216536130798829e+00 5.84610806220326217897e+00 3.26056418577029560879e+00 5.27541867416198417828e+00 3.30237866242982169851e+00 5.10663839407214847910e+00 3.30141392514424270033e+00 5.59219111017143255538e+00 +1755 8770.00 4.20175803014709714489e+01 3.35173910979625233608e+00 5.85027769139644782115e+00 3.26269143247425308374e+00 5.27869898341640109152e+00 3.30442615167447595326e+00 5.11000153639509502312e+00 3.30370112399714344065e+00 5.59614702085982695934e+00 +1756 8775.00 4.20437857064534128426e+01 3.35383567055216769148e+00 5.85444781982839135281e+00 3.26481913812134116881e+00 5.28197929268118215873e+00 3.30647362300996272566e+00 5.11336446225342466931e+00 3.30598941069720275721e+00 5.60010394986262394212e+00 +1757 8780.00 4.20699914257790368310e+01 3.35593184687247703124e+00 5.85861844708452661479e+00 3.26694730333340555006e+00 5.28525960193559907196e+00 3.30852107600099021312e+00 5.11672717082837191782e+00 3.30827878691304144709e+00 5.60406189680671662501e+00 +1758 8785.00 4.20961974595514973885e+01 3.35802763799023473723e+00 5.86278957275029100060e+00 3.26907592871156627012e+00 5.28853991120038102736e+00 3.31056851025372367303e+00 5.12008966131153542278e+00 3.31056925436510018912e+00 5.60802086127754151335e+00 +1759 8790.00 4.21224038077707945149e+01 3.36012304315922660791e+00 5.86696119642148161688e+00 3.27120501486730352880e+00 5.29182022046516120639e+00 3.31261592536396065611e+00 5.12345193290488065685e+00 3.31286081474272631198e+00 5.61198084288126075592e+00 +1760 8795.00 4.21486104703332742361e+01 3.36221806162287295550e+00 5.87113331769390445203e+00 3.27333456240173514828e+00 5.29510052971957811963e+00 3.31466332090677573419e+00 5.12681398480000893869e+00 3.31515346971454150093e+00 5.61594184120331263443e+00 +1761 8800.00 4.21748174473425905262e+01 3.36431269262459453628e+00 5.87530593616335394813e+00 3.27546457192634443700e+00 5.29838083900508749480e+00 3.31671069647796734614e+00 5.13017581619888307642e+00 3.31744722096989352877e+00 5.61990385584986107403e+00 +1762 8805.00 4.22010247387987362799e+01 3.36640693542853997045e+00 5.87947905142563342906e+00 3.27759504405261203885e+00 5.30166114821804779211e+00 3.31875805166297199733e+00 5.13353742629310261236e+00 3.31974207020849432226e+00 5.62386688639597664974e+00 +1763 8810.00 4.22272323445980717338e+01 3.36850078926776541621e+00 5.88365266306617762382e+00 3.27972597938165666420e+00 5.30494145751392043309e+00 3.32080538605758857074e+00 5.13689881430536132711e+00 3.32203801909896601074e+00 5.62783093241673171292e+00 +1764 8815.00 4.22534402648442437567e+01 3.37059425341678498000e+00 5.88782677069115045754e+00 3.28185737851459569114e+00 5.30822176675797408052e+00 3.32285269923689119409e+00 5.14025997940653045504e+00 3.32433506932029088077e+00 5.63179599351829107690e+00 +1765 8820.00 4.22796484994335983743e+01 3.37268732710865437596e+00 5.89200137391708089751e+00 3.28398924205254783004e+00 5.31150207599166268579e+00 3.32489999080704201617e+00 5.14362092082966704254e+00 3.32663322254109106169e+00 5.63576206925499700873e+00 +1766 8825.00 4.23058570484697824554e+01 3.37478000961788593415e+00 5.89617647231903863059e+00 3.28612157061735832286e+00 5.31478238529790125710e+00 3.32694726035347843052e+00 5.14698163777673389774e+00 3.32893248044035017230e+00 5.63972915921228690195e+00 +1767 8830.00 4.23320659119528102110e+01 3.37687230018790129904e+00 5.90035206551355706495e+00 3.28825436478941668383e+00 5.31806269455231728216e+00 3.32899450745127056805e+00 5.15034212944969649328e+00 3.33123284468668767744e+00 5.64369726295486717760e+00 +1768 8835.00 4.23582750898826603247e+01 3.37896419809321235661e+00 5.90452815311715806246e+00 3.29038762518020577730e+00 5.32134300380673419539e+00 3.33104173169621953221e+00 5.15370239506088356762e+00 3.33353431695908986043e+00 5.64766638004744603307e+00 +1769 8840.00 4.23844845821557072441e+01 3.38105570257724075134e+00 5.90870473471528256937e+00 3.29252135240120669124e+00 5.32462331300933033873e+00 3.33308893268412553823e+00 5.15706243383298623684e+00 3.33583689889508328008e+00 5.65163651005473166578e+00 +1770 8845.00 4.24106943888755836269e+01 3.38314681292486341135e+00 5.91288180992445600026e+00 3.29465554704317353796e+00 5.32790362231556802186e+00 3.33513611000042464738e+00 5.16042224496796997357e+00 3.33814059218401659734e+00 5.65560765255179731525e+00 +1771 8850.00 4.24369045099386568154e+01 3.38523752837949976069e+00 5.91705937836120732243e+00 3.29679020969685998566e+00 5.33118393158034908907e+00 3.33718326322018832286e+00 5.16378182768852589390e+00 3.34044539846341770328e+00 5.65957980707225605244e+00 +1772 8855.00 4.24631149455521850200e+01 3.38732784822602805974e+00 5.92123743962133719521e+00 3.29892534097374845459e+00 5.33446424085549342209e+00 3.33923039194958048981e+00 5.16714118121734689026e+00 3.34275131941227199306e+00 5.66355297318081429836e+00 +1773 8860.00 4.24893256954052844776e+01 3.38941777172859737277e+00 5.92541599333173696351e+00 3.30106094147495632285e+00 5.33774455009954618134e+00 3.34127749576367349960e+00 5.17050030476676081292e+00 3.34505835666810691365e+00 5.66752715042145549518e+00 +1774 8865.00 4.25155367598088389514e+01 3.39150729814099127779e+00 5.92959503909857144066e+00 3.30319701179123770274e+00 5.34102485938505555652e+00 3.34332457425826667929e+00 5.17385919755946144249e+00 3.34736651187881451008e+00 5.67150233834852102177e+00 +1775 8870.00 4.25417481385555973361e+01 3.39359642675845085691e+00 5.93377457653836870577e+00 3.30533355252371041644e+00 5.34430516861874416179e+00 3.34537162700843282437e+00 5.17721785882850316085e+00 3.34967578671301469129e+00 5.67547853650599165576e+00 +1776 8875.00 4.25679598317491780790e+01 3.39568515683476190858e+00 5.93795460526765772613e+00 3.30747056426312768806e+00 5.34758547789389027116e+00 3.34741865362033541587e+00 5.18057628779658152496e+00 3.35198618279787208252e+00 5.67945574442748224442e+00 +1777 8880.00 4.25941718392859556275e+01 3.39777348766516462675e+00 5.94213512491332984666e+00 3.30960804761060867207e+00 5.35086578715867133837e+00 3.34946565366904724925e+00 5.18393448368638676271e+00 3.35429770179164199462e+00 5.68343396163624348105e+00 +1778 8885.00 4.26203841612695555341e+01 3.39986141850344392168e+00 5.94631613507118483852e+00 3.31174600315690526031e+00 5.35414609640272409763e+00 3.35151262675036631933e+00 5.18729244573097414417e+00 3.35661034532148905285e+00 5.68741318769698356306e+00 +1779 8890.00 4.26465967976999991151e+01 3.40194894864484176367e+00 5.95049763537848086514e+00 3.31388443150313616314e+00 5.35742640567786931882e+00 3.35355957244973179598e+00 5.19065017317376842243e+00 3.35892411503530530226e+00 5.69139342210185983362e+00 +1780 8895.00 4.26728097485772650543e+01 3.40403607736387003868e+00 5.95467962546210838326e+00 3.31602333322969222706e+00 5.36070671492192207808e+00 3.35560649034221203380e+00 5.19400766522709300688e+00 3.36123901257061818981e+00 5.69537466440521900068e+00 +1781 8900.00 4.26990230137977277991e+01 3.40612280394540567485e+00 5.95886210492823398255e+00 3.31816270893768994199e+00 5.36398702418670314529e+00 3.35765338003397317834e+00 5.19736492114473591641e+00 3.36355503954422774271e+00 5.69935691411994760358e+00 +1782 8905.00 4.27252365933613731386e+01 3.40820912766396233451e+00 5.96304507342447376317e+00 3.32030255922824757420e+00 5.36726733347221252046e+00 3.35970024110008713691e+00 5.20072194015975242110e+00 3.36587219760402689417e+00 5.70334017075893218163e+00 +1783 8910.00 4.27514504874755019159e+01 3.41029504781478109976e+00 5.96722853055699786751e+00 3.32244288468175463791e+00 5.37054764270590023756e+00 3.36174707313635323658e+00 5.20407872151556283313e+00 3.36819048836681433912e+00 5.70732443384542253995e+00 +1784 8915.00 4.27776646959328132880e+01 3.41238056368273845465e+00 5.97141247596305735357e+00 3.32458368588896480134e+00 5.37382795198104545875e+00 3.36379387572820753860e+00 5.20743526444522508712e+00 3.37050991345975425872e+00 5.71130970289230965875e+00 +1785 8920.00 4.28038792188369541236e+01 3.41446567455271132729e+00 5.97559690925918385318e+00 3.32672496344063262086e+00 5.37710826123546237199e+00 3.36584064846108610425e+00 5.21079156819215860708e+00 3.37283047449964668019e+00 5.71529597740211325885e+00 +1786 8925.00 4.28300940560842917648e+01 3.41655037971994079982e+00 5.97978183009299613104e+00 3.32886671792751132060e+00 5.38038857046915186544e+00 3.36788739091006128490e+00 5.21414763201014785921e+00 3.37515217311365578468e+00 5.71928325688772165591e+00 +1787 8930.00 4.28563092077784588696e+01 3.41863467846930513261e+00 5.98396723809138819661e+00 3.33100894992999085886e+00 5.38366887974429708663e+00 3.36993410269166071558e+00 5.21750345514261493207e+00 3.37747501091858071121e+00 5.72327154084129485767e+00 +1788 8935.00 4.28825246739194625434e+01 3.42071857010640822949e+00 5.98815313289161554877e+00 3.33315166004918816967e+00 5.38694918902980557363e+00 3.37198078336022755153e+00 5.22085903684334340369e+00 3.37979898951049273492e+00 5.72726082877571940344e+00 +1789 8940.00 4.29087404544036488119e+01 3.42280205391612701860e+00 5.99233951411020449029e+00 3.33529484886549321132e+00 5.39022949830495079482e+00 3.37402743253229164822e+00 5.22421437636611774025e+00 3.38212411052692107916e+00 5.73125112017278937060e+00 +1790 8945.00 4.29349565493346716494e+01 3.42488512920406806828e+00 5.99652638139477911494e+00 3.33743851695929683032e+00 5.39350980753863940009e+00 3.37607404977255942669e+00 5.22756947295435914214e+00 3.38445037555357242098e+00 5.73524241452466476687e+00 +1791 8950.00 4.29611729587125310559e+01 3.42696779526547068428e+00 6.00071373439295818741e+00 3.33958266492135180670e+00 5.39679011679305720151e+00 3.37812063467683154627e+00 5.23092432587221622953e+00 3.38677778620724678760e+00 5.73923471132350648816e+00 +1792 8955.00 4.29873896824335730571e+01 3.42905005140594187907e+00 6.00490157272127067500e+00 3.34172729334241180865e+00 5.40007042602674491860e+00 3.38016718684090777813e+00 5.23427893437347435679e+00 3.38910634408401545414e+00 5.74322801006147010128e+00 +1793 8960.00 4.30136067206014516273e+01 3.43113189691035724849e+00 6.00908989603769949639e+00 3.34387240279250308461e+00 5.40335073529152598582e+00 3.38221370583986047365e+00 5.23763329771191710194e+00 3.39143605077995013986e+00 5.74722231020998730600e+00 +1794 8965.00 4.30398240732161525557e+01 3.43321333111541582284e+00 6.01327870396913954920e+00 3.34601799387274301267e+00 5.40663104456667120701e+00 3.38426019126948851579e+00 5.24098741516205812729e+00 3.39376690790148671795e+00 5.75121761126121722185e+00 +1795 8970.00 4.30660417401740573951e+01 3.43529435329562859991e+00 6.01746799617357286394e+00 3.34816406714279324319e+00 5.40991135382108812024e+00 3.38630664270486425593e+00 5.24434128598804516486e+00 3.39609891703433275367e+00 5.75521391266586501700e+00 +1796 8975.00 4.30922597215787845926e+01 3.43737496277733045602e+00 6.02165777227789433823e+00 3.35031062320377159836e+00 5.41319166310659749541e+00 3.38835305975215250740e+00 5.24769490945402861115e+00 3.39843207977455952218e+00 5.75921121391608537010e+00 +1797 8980.00 4.31184780174303483591e+01 3.43945515886612618317e+00 6.02584803194008600258e+00 3.35245766262570343841e+00 5.41647197238174271661e+00 3.39039944197606057941e+00 5.25104828481379382055e+00 3.40076639769751132292e+00 5.76320951447294937964e+00 +1798 8985.00 4.31446966276250947203e+01 3.44153494086762012927e+00 6.03003877480777195075e+00 3.35460518598897872167e+00 5.41975228164652378382e+00 3.39244578898275284118e+00 5.25440141135221416846e+00 3.40310187240962225275e+00 5.76720881380788430448e+00 +1799 8990.00 4.31709155522666776506e+01 3.44361430810814717063e+00 6.03423000050784086312e+00 3.35675319387398651827e+00 5.42303259091130396286e+00 3.39449210035766490989e+00 5.25775428834380598175e+00 3.40543850547587290123e+00 5.77120911137159531279e+00 +1800 8995.00 4.31971347913550900444e+01 3.44569325989331165516e+00 6.03842170871900751905e+00 3.35890168686111811880e+00 5.42631290008280853243e+00 3.39653837567586869284e+00 5.26110691505271610424e+00 3.40777629848196950135e+00 5.77521040662514728581e+00 +1801 9000.00 4.32233543447866992437e+01 3.44777179553908297294e+00 6.04261389906816326345e+00 3.36105066553076081703e+00 5.42959320940977452352e+00 3.39858461453316440526e+00 5.26445929076382324041e+00 3.41011525299289308677e+00 5.77921269902960865750e+00 +1802 9005.00 4.32495742126651379067e+01 3.44984991437179511209e+00 6.04680657122365783351e+00 3.36320013045294174958e+00 5.43287351864346312880e+00 3.40063081650462395444e+00 5.26781141474127512225e+00 3.41245537059434944638e+00 5.78321598802531777750e+00 +1803 9010.00 4.32757943949904060332e+01 3.45192761570741701860e+00 6.05099972482274850449e+00 3.36535008220805043067e+00 5.43615382791860834999e+00 3.40267698120677497542e+00 5.27116328628031372006e+00 3.41479665286168376781e+00 5.78722027307333863888e+00 +1804 9015.00 4.33020148916588638599e+01 3.45400489886191763844e+00 6.05519335953378057269e+00 3.36750052136611266462e+00 5.43943413719375268300e+00 3.40472310819396195569e+00 5.27451490465545091979e+00 3.41713910133914522405e+00 5.79122555360364899002e+00 +1805 9020.00 4.33282357027741582556e+01 3.45608176317199511374e+00 6.05938747499401397789e+00 3.36965144850751707750e+00 5.44271444644817048442e+00 3.40676919707234837631e+00 5.27786626916192780357e+00 3.41948271761244226852e+00 5.79523182907731460034e+00 +1806 9025.00 4.33544568282326352460e+01 3.45815820795361839046e+00 6.06358207088216083491e+00 3.37180286420229036182e+00 5.44599475572331481743e+00 3.40881524742737074263e+00 5.28121737907425803371e+00 3.42182750323619044863e+00 5.79923909890358135755e+00 +1807 9030.00 4.33806782681379559108e+01 3.46023423254348516664e+00 6.06777714683547664265e+00 3.37395476902045787782e+00 5.44927506494664015690e+00 3.41086125884446422774e+00 5.28456823368768180416e+00 3.42417345976500442362e+00 5.80324736254351680742e+00 +1808 9035.00 4.34069000224900989338e+01 3.46230983625756438826e+00 6.07197270253267440410e+00 3.37610716354240825154e+00 5.45255537423214953208e+00 3.41290723091943037915e+00 5.28791883229744108519e+00 3.42652058876386256259e+00 5.80725661941672921529e+00 +1809 9040.00 4.34331220912890714203e+01 3.46438501844291790732e+00 6.07616873762137554849e+00 3.37826004832780446563e+00 5.45583568348656644531e+00 3.41495316321697517381e+00 5.29126917417804865096e+00 3.42886889176665388135e+00 5.81126686895319366499e+00 +1810 9045.00 4.34593444744312407124e+01 3.46645977842587926787e+00 6.08036525175956477085e+00 3.38041342396739841192e+00 5.45911599273061920456e+00 3.41699905535362802311e+00 5.29461925864547389153e+00 3.43121837034872090300e+00 5.81527811058288612855e+00 +1811 9050.00 4.34855671720202465735e+01 3.46853411553278201396e+00 6.08456224462595418601e+00 3.38256729101048936315e+00 5.46239630202649184554e+00 3.41904490689409668036e+00 5.29796908499495788902e+00 3.43356902603358582482e+00 5.81929034371505249368e+00 +1812 9055.00 4.35117901840560676874e+01 3.47060802912105126339e+00 6.08875971586816433501e+00 3.38472165002710179138e+00 5.46567661129127380093e+00 3.42109071743418002853e+00 5.30131865251137668338e+00 3.43592086037586419422e+00 5.82330356776930280205e+00 +1813 9060.00 4.35380135104350998176e+01 3.47268151850665729441e+00 6.09295766516490733267e+00 3.38687650159762609903e+00 5.46895692054568982599e+00 3.42313648656967917105e+00 5.30466796051070144102e+00 3.43827387490944325066e+00 5.82731778216524709535e+00 +1814 9065.00 4.35642371512609472006e+01 3.47475458304702478074e+00 6.09715609217417142673e+00 3.38903184627135845020e+00 5.47223722985192839730e+00 3.42518221387566601521e+00 5.30801700828817146771e+00 3.44062807117857438755e+00 5.83133298631213037311e+00 +1815 9070.00 4.35904611064299842837e+01 3.47682722207885230858e+00 6.10135499656429924897e+00 3.39118768463905428945e+00 5.47551753907525196041e+00 3.42722789895830404205e+00 5.31136579514939288771e+00 3.44298345070677980218e+00 5.83534917961920207574e+00 +1816 9075.00 4.36166853760458650413e+01 3.47889943493883579961e+00 6.10555437801401001963e+00 3.39334401723964562692e+00 5.47879784832966887365e+00 3.42927354138230144898e+00 5.31471432041033509108e+00 3.44534001503831088797e+00 5.83936636148534127244e+00 +1817 9080.00 4.36429099601085752624e+01 3.48097122098440303617e+00 6.10975423617091983886e+00 3.39550084466388701898e+00 5.48207815756335836710e+00 3.43131914074345845123e+00 5.31806258337660331392e+00 3.44769776569669028632e+00 5.84338453131979562727e+00 +1818 9085.00 4.36691348586181149471e+01 3.48304257956261364981e+00 6.11395457073447268215e+00 3.39765816745071047578e+00 5.48535846680741112635e+00 3.43336469664793808576e+00 5.32141058335380279232e+00 3.45005670419507692870e+00 5.84740368851108183179e+00 +1819 9090.00 4.36953600714708372266e+01 3.48511351001016711493e+00 6.11815538135228642602e+00 3.39981598618050728788e+00 5.48863877608255634755e+00 3.43541020866045032633e+00 5.32475831967862944794e+00 3.45241683207772220854e+00 5.85142383245808428427e+00 +1820 9095.00 4.37215855987703960750e+01 3.48718401169485137103e+00 6.12235666772380415779e+00 3.40197430140257361941e+00 5.49191908533697237260e+00 3.43745567637679272366e+00 5.32810579163596198526e+00 3.45477815084742045926e+00 5.85544496255968471843e+00 +1821 9100.00 4.37478114404131588344e+01 3.48925408396373004649e+00 6.12655842949664553032e+00 3.40413311369729942868e+00 5.49519939462248174777e+00 3.43950109939276726934e+00 5.33145299857286314449e+00 3.45714066201733061234e+00 5.85946707818367062970e+00 +1822 9105.00 4.37740375965027368466e+01 3.49132372616386232878e+00 6.13076066635988858877e+00 3.40629242360361850217e+00 5.49847970388726281499e+00 3.44154647728344453839e+00 5.33479993979493549716e+00 3.45950436711097530917e+00 5.86349017872892641634e+00 +1823 9110.00 4.38002640670391514277e+01 3.49339293766304015421e+00 6.13496337800260960194e+00 3.40845223169155575604e+00 5.50176001314168061640e+00 3.44359180965498934412e+00 5.33814661463887851767e+00 3.46186926764151348124e+00 5.86751426358396788174e+00 +1824 9115.00 4.38264908519187486036e+01 3.49546171781868819650e+00 6.13916656408279237667e+00 3.41061253852077328474e+00 5.50504032240645990726e+00 3.44563709608247314975e+00 5.34149302241029566574e+00 3.46423536509101159808e+00 5.87153933210622369643e+00 +1825 9120.00 4.38527179512451894539e+01 3.49753006598823290574e+00 6.14337022428951495812e+00 3.41277334465093140636e+00 5.50832063166087859685e+00 3.44768233616169617051e+00 5.34483916245624968155e+00 3.46660266098299318926e+00 5.87556538368420966378e+00 +1826 9125.00 4.38789453650184597677e+01 3.49959798153946266552e+00 6.14757435830148946110e+00 3.41493465063132894954e+00 5.51160094092565877588e+00 3.44972752947809491175e+00 5.34818503409270995519e+00 3.46897115682025258820e+00 5.87959241767535356615e+00 +1827 9130.00 4.39051730932385595452e+01 3.50166546384016941218e+00 6.15177896579742888861e+00 3.41709645702162667646e+00 5.51488125019044073127e+00 3.45177267561710454657e+00 5.35153063666673922683e+00 3.47134085408485493218e+00 5.88362043346816943057e+00 +1828 9135.00 4.39314011358018561282e+01 3.50373251223741233318e+00 6.15598404646641128579e+00 3.41925876437112163941e+00 5.51816155944485764451e+00 3.45381777417452529022e+00 5.35487596949430422200e+00 3.47371175426923217699e+00 5.88764943040972354993e+00 +1829 9140.00 4.39576294927083353059e+01 3.50579912611971122871e+00 6.16018959999751292145e+00 3.42142157324984008682e+00 5.52144186870963782354e+00 3.45586282474615646976e+00 5.35822103192246768089e+00 3.47608385888654325413e+00 5.89167940786780341966e+00 +1830 9145.00 4.39838581641652908161e+01 3.50786530484449121658e+00 6.16439562606944502221e+00 3.42358488420707862687e+00 5.52472217795369147098e+00 3.45790782690707176883e+00 5.36156582329829234368e+00 3.47845716939812499291e+00 5.89571036518947089178e+00 +1831 9150.00 4.40100871499654289210e+01 3.50993104780027076472e+00 6.16860212436092414379e+00 3.42574869778177104607e+00 5.52800248719774334205e+00 3.45995278025307007042e+00 5.36491034294810997807e+00 3.48083168730677394720e+00 5.89974230175288028022e+00 +1832 9155.00 4.40363164502124107003e+01 3.51199635434447499094e+00 6.17280909457138626806e+00 3.42791301453357899476e+00 5.53128279648325271722e+00 3.46199768436958787987e+00 5.36825459021898243606e+00 3.48320741407382739041e+00 5.90377521688436335268e+00 +1833 9160.00 4.40625460648025750743e+01 3.51406122385525909735e+00 6.17701653637954972709e+00 3.43007783502216323512e+00 5.53456310568584974874e+00 3.46404253885242408018e+00 5.37159856445797245783e+00 3.48558435120208010005e+00 5.90780910994134877967e+00 +1834 9165.00 4.40887759938395760173e+01 3.51612565572113888734e+00 6.18122444948485316729e+00 3.43224315978645844183e+00 5.53784341500245158585e+00 3.46608734329737977475e+00 5.37494226502250516120e+00 3.48796250014250652782e+00 5.91184398028125990265e+00 +1835 9170.00 4.41150062373234064239e+01 3.51818964930990629725e+00 6.18543283357637108111e+00 3.43440898938612360070e+00 5.54112372426723176488e+00 3.46813209727952687089e+00 5.37828569123891409021e+00 3.49034186237717181100e+00 5.91587982722006788805e+00 +1836 9175.00 4.41412367951504336361e+01 3.52025320401007801863e+00 6.18964168834318506640e+00 3.43657532434973012059e+00 5.54440403355274114006e+00 3.47017680039466513975e+00 5.38162884248535267062e+00 3.49272243936741633163e+00 5.91991665011519696549e+00 +1837 9180.00 4.41674676674242832064e+01 3.52231631919980836543e+00 6.19385101347436695107e+00 3.43874216524730291766e+00 5.54768434279679301113e+00 3.47222145223859346430e+00 5.38497171810888275445e+00 3.49510423259530522699e+00 5.92395444828261563686e+00 +1838 9185.00 4.41936988541449622403e+01 3.52437899426761536148e+00 6.19806080867972752912e+00 3.44090951261777444614e+00 5.55096465207193912050e+00 3.47426605239674968217e+00 5.38831431745656708188e+00 3.49748724350144923889e+00 5.92799322107975257268e+00 +1839 9190.00 4.42199303552088380798e+01 3.52644122860201747471e+00 6.20227107362761120868e+00 3.44307736701044397876e+00 5.55424496130562772578e+00 3.47631060045456941054e+00 5.39165663989619314833e+00 3.49987147354718564074e+00 5.93203296781221034450e+00 +1840 9195.00 4.42461621707195433828e+01 3.52850302159153184078e+00 6.20648180803818938500e+00 3.44524572895387848348e+00 5.55752527056004375083e+00 3.47835509601821613046e+00 5.39499868478518784798e+00 3.50225692419385392640e+00 5.93607368781668842672e+00 +1841 9200.00 4.42723943006770852548e+01 3.53056437262467781579e+00 6.21069301160053743871e+00 3.44741459900774094294e+00 5.56080557982482570623e+00 3.48039953867312590319e+00 5.39834045149134222896e+00 3.50464359690279225745e+00 5.94011538040915443304e+00 +1842 9205.00 4.42986267449778097216e+01 3.53262528110033580120e+00 6.21490468401409934529e+00 3.44958397772132796533e+00 5.56408588909997092742e+00 3.48244392799437019193e+00 5.40168193938244467489e+00 3.50703149309388129140e+00 5.94415804490557864170e+00 +1843 9210.00 4.43248595037253707574e+01 3.53468574640702470901e+00 6.21911682497831286298e+00 3.45175386561284458509e+00 5.56736619835438784065e+00 3.48448826359847796397e+00 5.40502314782628534573e+00 3.50942061423882378790e+00 5.94820168062192777825e+00 +1844 9215.00 4.43510925769197683621e+01 3.53674576795399175921e+00 6.22332943419262019091e+00 3.45392426324195334075e+00 5.57064650757771140377e+00 3.48653254506052112660e+00 5.40836407618029024746e+00 3.51181096176786633478e+00 5.95224628687417567363e+00 +1845 9220.00 4.43773259644573485616e+01 3.53880534511938860120e+00 6.22754251135646352822e+00 3.45609517114758535428e+00 5.57392681688394997508e+00 3.48857677196593529700e+00 5.41170472383297607166e+00 3.51420253711125551987e+00 5.95629186296792578759e+00 +1846 9225.00 4.44035596664417582247e+01 3.54086447732282794121e+00 6.23175605616928240948e+00 3.45826658985831203452e+00 5.57720712613836600013e+00 3.49062094393124899838e+00 5.41504509016249802045e+00 3.51659534171996357443e+00 5.96033840820878335620e+00 +1847 9230.00 4.44297936828730186676e+01 3.54292316395282647079e+00 6.23597006834088318783e+00 3.46043851993379414367e+00 5.58048743538241964757e+00 3.49266506052116909586e+00 5.41838517452628298798e+00 3.51898937701387426458e+00 5.96438592190235095103e+00 +1848 9235.00 4.44560280136474474943e+01 3.54498140441863096584e+00 6.24018454758107044000e+00 3.46261096188187167400e+00 5.58376774464719982660e+00 3.49470912135222455674e+00 5.42172497632321004346e+00 3.52138464442323284587e+00 5.96843440333350905291e+00 +1849 9240.00 4.44822626588687199956e+01 3.54703919812948686996e+00 6.24439949358928547696e+00 3.46478391627257176211e+00 5.58704805390161673984e+00 3.49675312599948817649e+00 5.42506449493143527718e+00 3.52378114537828412978e+00 5.97248385181822616374e+00 +1850 9245.00 4.45084976184331679860e+01 3.54909654450500511302e+00 6.24861490607533198727e+00 3.46695738361373395620e+00 5.59032836317676196103e+00 3.49879707405875794990e+00 5.42840372972911300309e+00 3.52617888129891143834e+00 5.97653426662065001551e+00 +1851 9250.00 4.45347328925481065198e+01 3.55115344293370327478e+00 6.25283078473865394642e+00 3.46913136445465619673e+00 5.59360867243117887426e+00 3.50084096512583542449e+00 5.43174268011512406673e+00 3.52857785359463305142e+00 5.98058564705674999828e+00 +1852 9255.00 4.45609684809025878849e+01 3.55320989283519272917e+00 6.25704712929941742061e+00 3.47130585932390811621e+00 5.59688898172705151524e+00 3.50288479879652037141e+00 5.43508134545725862807e+00 3.53097806368532918242e+00 5.98463799240104066257e+00 +1853 9260.00 4.45872043838075384770e+01 3.55526589362908307379e+00 6.26126393945706549715e+00 3.47348086876042216886e+00 5.60016929098147020483e+00 3.50492857465624885194e+00 5.43841972517512672880e+00 3.53337951298051855531e+00 5.98869130192803389434e+00 +1854 9265.00 4.46134406010556858746e+01 3.55732144473498479442e+00 6.26548121492140275279e+00 3.47565639329276798719e+00 5.60344960020479465612e+00 3.50697229230081974904e+00 5.44175781863652030523e+00 3.53578220290008271576e+00 5.99274557493296899935e+00 +1855 9270.00 4.46396771327506556304e+01 3.55937654555177962479e+00 6.26969895541260058280e+00 3.47783243344951520371e+00 5.60672990949030403129e+00 3.50901595132603505434e+00 5.44509562526104495817e+00 3.53818613483281119159e+00 5.99680081066963399650e+00 +1856 9275.00 4.46659139788924690606e+01 3.56143119553017051260e+00 6.27391716065082416520e+00 3.48000898976959582853e+00 5.61001021874472094453e+00 3.51105955131732905272e+00 5.44843314442685944243e+00 3.54059131017785766460e+00 6.00085700843326996790e+00 +1857 9280.00 4.46921511393774721910e+01 3.56348539405867548169e+00 6.27813583032515154514e+00 3.48218606277121534021e+00 5.61329052796804450765e+00 3.51310309189123115559e+00 5.45177037554320786938e+00 3.54299773034474085875e+00 6.00491416747765693884e+00 +1858 9285.00 4.47183886143092976795e+01 3.56553914058799703568e+00 6.28235496417648420220e+00 3.48436365299330752521e+00 5.61657083725355477100e+00 3.51514657261244778397e+00 5.45510731802970205706e+00 3.54540539673261356768e+00 6.00897228706694797040e+00 +1859 9290.00 4.47446264035843199736e+01 3.56759243452738106228e+00 6.28657456190425900644e+00 3.48654176095407786207e+00 5.61985114649760664207e+00 3.51718999309750879334e+00 5.45844397126449365487e+00 3.54781431070953656715e+00 6.01303136648601999070e+00 +1860 9295.00 4.47708645073061646258e+01 3.56964527531716768749e+00 6.29079462321828142279e+00 3.48872038719245791683e+00 5.62313145579348105940e+00 3.51923335292148431463e+00 5.46178033466719359268e+00 3.55022447367466487123e+00 6.01709140496792738162e+00 +1861 9300.00 4.47971029254748600579e+01 3.57169766237696517663e+00 6.29501514785945115449e+00 3.49089953221629034630e+00 5.62641176503753293048e+00 3.52127665170090464741e+00 5.46511640765741102399e+00 3.55263588701678667547e+00 6.02115240177682142786e+00 +1862 9305.00 4.48233416580903707427e+01 3.57374959514711276753e+00 6.29923613552720684794e+00 3.49307919656450716062e+00 5.62969207431267815167e+00 3.52331988901083947852e+00 5.46845218963403301160e+00 3.55504855211432824191e+00 6.02521435616648393108e+00 +1863 9310.00 4.48495807050490782331e+01 3.57580107305758598812e+00 6.30345758595208316422e+00 3.49525938075531428240e+00 5.63297238355673179910e+00 3.52536306446781866342e+00 5.47178768002702842210e+00 3.55746247033535079041e+00 6.02927726739070291018e+00 +1864 9315.00 4.48758200664546151870e+01 3.57785209554872185578e+00 6.30767949884388379189e+00 3.49744008531728090006e+00 5.63625269283187702030e+00 3.52740617764691366531e+00 5.47512287823528343012e+00 3.55987764305828013889e+00 6.03334113469289512466e+00 +1865 9320.00 4.49020597422033418411e+01 3.57990266205049545434e+00 6.31190187393314428022e+00 3.49962131075824789406e+00 5.63953300207592889137e+00 3.52944922814392381127e+00 5.47845778369913372075e+00 3.56229407165117706313e+00 6.03740595731648532762e+00 +1866 9325.00 4.49282997323989050642e+01 3.58195277200324557754e+00 6.31612471094003335992e+00 3.50180305761714816271e+00 5.64281331135107411257e+00 3.53149221557537851268e+00 5.48179239582782695805e+00 3.56471175748210367118e+00 6.04147173450489116675e+00 +1867 9330.00 4.49545400370412906454e+01 3.58400242485767472900e+00 6.32034800958471976173e+00 3.50398532640182214237e+00 5.64609362061585606796e+00 3.53353513951634834456e+00 5.48512671404097229555e+00 3.56713070191912029472e+00 6.04553846548080553447e+00 +1868 9335.00 4.49807806561305199011e+01 3.58605162004375710438e+00 6.32457176959773814673e+00 3.50616811763047619976e+00 5.64937392987027209301e+00 3.53557799957299900839e+00 5.48846073778927401321e+00 3.56955090630956117792e+00 6.04960614949801467333e+00 +1869 9340.00 4.50070215895629388569e+01 3.58810035702255936130e+00 6.32879599068889220348e+00 3.50835143183167819103e+00 5.65265423911432485227e+00 3.53762079534112938717e+00 5.49179446648197799874e+00 3.57197237201112294258e+00 6.05367478576884465724e+00 +1870 9345.00 4.50332628373385404075e+01 3.59014863522405569540e+00 6.33302067260944223648e+00 3.51053526951327032890e+00 5.65593454837910591948e+00 3.53966352641653925204e+00 5.49512789955942082543e+00 3.57439510038150265459e+00 6.05774437353671757478e+00 +1871 9350.00 4.50595043996646111850e+01 3.59219645411967825055e+00 6.33724581505883222121e+00 3.51271963119345720372e+00 5.65921485765425114067e+00 3.54170619239502970643e+00 5.49846103645158024165e+00 3.57681909276803322584e+00 6.06181491201396127622e+00 +1872 9355.00 4.50857462763338787681e+01 3.59424381314976360002e+00 6.34147141777795653184e+00 3.51490451738007925186e+00 5.66249516689830301175e+00 3.54374879287240007741e+00 5.50179387659879193251e+00 3.57924435051804890051e+00 6.06588640042326954216e+00 +1873 9360.00 4.51119884674499829202e+01 3.59629071176501646789e+00 6.34569748049735160578e+00 3.51708992861207070391e+00 5.66577547617344912112e+00 3.54579132745481517830e+00 5.50512641944139602401e+00 3.58167087496851843653e+00 6.06995883797696844653e+00 +1874 9365.00 4.51382309729092696671e+01 3.59833714942650262358e+00 6.34992400293718617377e+00 3.51927586537654368826e+00 5.66905578534495369070e+00 3.54783379572770973809e+00 5.50845866440936493547e+00 3.58409866744604688193e+00 6.07403222389775176993e+00 +1875 9370.00 4.51644737928153929829e+01 3.60038312559528828061e+00 6.35415098483835549814e+00 3.52146232819170279527e+00 5.67233609466155463963e+00 3.54987619729724990236e+00 5.51179061097413214299e+00 3.58652772930833085852e+00 6.07810655739794647445e+00 +1876 9375.00 4.51907169271683528677e+01 3.60242863972207594259e+00 6.35837842593139512815e+00 3.52364931757575305937e+00 5.67561640397815647674e+00 3.55191853175923322183e+00 5.51512225855530591190e+00 3.58895806186124710635e+00 6.08218183767951892094e+00 +1877 9380.00 4.52169603758644953473e+01 3.60447369126793359939e+00 6.36260632594683706031e+00 3.52583683402617298341e+00 5.67889671320148003986e+00 3.55396079871982628617e+00 5.51845360661395467616e+00 3.59138966645212986961e+00 6.08625806395479607147e+00 +1878 9385.00 4.52432041390074672904e+01 3.60651827970429161851e+00 6.36683468460485268992e+00 3.52802487807153042354e+00 5.68217702244553368729e+00 3.55600299776446293620e+00 5.52178465460077916305e+00 3.59382254439721826600e+00 6.09033523541537746837e+00 +1879 9390.00 4.52694482165972758025e+01 3.60856240450257992336e+00 6.37106350165670143326e+00 3.53021345020930255032e+00 5.68545733174140721644e+00 3.55804512849930887342e+00 5.52511540197684869469e+00 3.59625669701275452184e+00 6.09441335126322769611e+00 +1880 9395.00 4.52956926085302740148e+01 3.61060606511350234982e+00 6.37529277682255379744e+00 3.53240255093696653432e+00 5.68873764097509582172e+00 3.56008719052016386897e+00 5.52844584818249895619e+00 3.59869212561497997527e+00 6.09849241070031133916e+00 +1881 9400.00 4.53219373149101016907e+01 3.61264926101885341936e+00 6.37952250985366831060e+00 3.53459218078309067579e+00 5.69201795023987600075e+00 3.56212918343319095982e+00 5.53177599268916342368e+00 3.60112883152013374399e+00 6.10257241289750140822e+00 +1882 9405.00 4.53481823357367659355e+01 3.61469199167969934550e+00 6.38375270047021903252e+00 3.53678234022442383733e+00 5.69529825953575041808e+00 3.56417110683419213757e+00 5.53510583495790609021e+00 3.60356681603409345627e+00 6.10665335706712486541e+00 +1883 9410.00 4.53744276709066198805e+01 3.61673425658820013595e+00 6.38798334842346449136e+00 3.53897302978953565145e+00 5.69857856877980228916e+00 3.56621296031896539702e+00 5.53843537444979538975e+00 3.60600608046273585217e+00 6.11073524239041798722e+00 +1884 9415.00 4.54006733205233032891e+01 3.61877605520542156015e+00 6.39221445343357519420e+00 3.54116424997590373280e+00 5.70185887802385593659e+00 3.56825474350404014956e+00 5.54176461062589797990e+00 3.60844662610157396188e+00 6.11481806803825111984e+00 +1885 9420.00 4.54269192845868232666e+01 3.62081738701315902773e+00 6.39644601526217471132e+00 3.54335600128100258743e+00 5.70513918728863611562e+00 3.57029645596448830247e+00 5.54509354296800882622e+00 3.61088845425648408138e+00 6.11890183320222735830e+00 +1886 9425.00 4.54531655629935187335e+01 3.62285825149320706018e+00 6.40067803362943532619e+00 3.54554828421267531624e+00 5.70841949654305302886e+00 3.57233809732720208885e+00 5.54842217093719369814e+00 3.61333156622297924088e+00 6.12298653705321704876e+00 +1887 9430.00 4.54794121558470578748e+01 3.62489864812736195532e+00 6.40491050828661734329e+00 3.54774109925803404764e+00 5.71169980583892655801e+00 3.57437966717761668178e+00 5.55175049400488518359e+00 3.61577596328620742838e+00 6.12707217876209053742e+00 +1888 9435.00 4.55056590631474335851e+01 3.62693857639741779053e+00 6.40914343897461691313e+00 3.54993444692491921799e+00 5.71498011508298020544e+00 3.57642116513226104857e+00 5.55507851165287735995e+00 3.61822164673131752011e+00 6.13115875749972172315e+00 +1889 9440.00 4.55319062847909847846e+01 3.62897803578516864320e+00 6.41337682542396958496e+00 3.55212832772117215185e+00 5.71826042433739711868e+00 3.57846259077657169456e+00 5.55840622336296430461e+00 3.62066861784345839226e+00 6.13524627243698361667e+00 +1890 9445.00 4.55581538208813796587e+01 3.63101702579313867503e+00 6.41761066738593477510e+00 3.55432274212354215592e+00 5.72154073359181314373e+00 3.58050394371671165672e+00 5.56173362861694187131e+00 3.62311687789741387888e+00 6.13933472273438152200e+00 +1891 9450.00 4.55844016714186039962e+01 3.63305554589275780941e+00 6.42184496461177634075e+00 3.55651769063986877839e+00 5.72482104285659509912e+00 3.58254522355884530427e+00 5.56506072689660413744e+00 3.62556642817833285619e+00 6.14342410754205925372e+00 +1892 9455.00 4.56106498362990180340e+01 3.63509359559691480612e+00 6.42607971683202627844e+00 3.55871317376763052209e+00 5.72810135215246862828e+00 3.58458642990913700643e+00 5.56838751768374695672e+00 3.62801726994027129436e+00 6.14751442604125397651e+00 +1893 9460.00 4.56368983156262615353e+01 3.63713117437703914447e+00 6.43031492379794489267e+00 3.56090919199393862726e+00 5.73138166138615723355e+00 3.58662756236338831073e+00 5.57171400047053033688e+00 3.63046940447874266766e+00 6.15160567736138208517e+00 +1894 9465.00 4.56631471094003345002e+01 3.63916828174601914014e+00 6.43455058525043277484e+00 3.56310574581627115265e+00 5.73466197065093741259e+00 3.58866862052776047776e+00 5.57504017474911073293e+00 3.63292283303743790412e+00 6.15569786066294977189e+00 +1895 9470.00 4.56893962175176113760e+01 3.64120491719601302449e+00 6.43878670094074934127e+00 3.56530283572174022666e+00 5.73794227990535432582e+00 3.59070960400841920901e+00 5.57836604001164904076e+00 3.63537755687041386210e+00 6.15979097510646411706e+00 +1896 9475.00 4.57156456400817035046e+01 3.64324108022954407105e+00 6.44302327062015667281e+00 3.56750046220782301987e+00 5.74122258913904381927e+00 3.59275051240116560791e+00 5.58169159575030437992e+00 3.63783357725245615200e+00 6.16388501981097913784e+00 +1897 9480.00 4.57418953769889995442e+01 3.64527677034913555332e+00 6.44726029402955180814e+00 3.56969862576163166068e+00 5.74450289841418815229e+00 3.59479134532252553313e+00 5.58501684147796151336e+00 3.64029089543761896763e+00 6.16797999393700013826e+00 +1898 9485.00 4.57681454284467648108e+01 3.64731198705730985665e+00 6.45149777090983267414e+00 3.57189732688064331967e+00 5.74778320769969752746e+00 3.59683210237866424208e+00 5.58834177668678311335e+00 3.64274951265923130350e+00 6.17207589661394351310e+00 +1899 9490.00 4.57943957942477126721e+01 3.64934672985659203093e+00 6.45573570103298965961e+00 3.57409656603124314955e+00 5.75106351693338613273e+00 3.59887278315501912829e+00 5.59166640087928978886e+00 3.64520943017134957387e+00 6.17617272698158981115e+00 +1900 9495.00 4.58206464743918573390e+01 3.65138099825986728320e+00 6.45997408413991980325e+00 3.57629634371090787681e+00 5.75434382619816808813e+00 3.60091338727848064849e+00 5.59499071355800658978e+00 3.64767064920730144095e+00 6.18027048417971691663e+00 +1901 9500.00 4.58468974689828314695e+01 3.65341479178002437322e+00 6.46421291997151925557e+00 3.57849666041711378384e+00 5.75762413548367657512e+00 3.60295391434484857385e+00 5.59831471424618243304e+00 3.65013317102114331902e+00 6.18436916731701380456e+00 +1902 9505.00 4.58731487780206350635e+01 3.65544810992994850807e+00 6.46845220827905098560e+00 3.58069751662660928915e+00 5.76090444473809348835e+00 3.60499436396028860585e+00 5.60163840244634236853e+00 3.65259699682547545052e+00 6.18846877553325924737e+00 +1903 9510.00 4.58994004015052752266e+01 3.65748095221216518169e+00 6.47269194883450449396e+00 3.58289891281614325536e+00 5.76418475400287455557e+00 3.60703473573096422555e+00 5.60496177767137293557e+00 3.65506212787435380562e+00 6.19256930794750282132e+00 +1904 9515.00 4.59256523393331050897e+01 3.65951331816028924138e+00 6.47693214137877859571e+00 3.58510084947283003132e+00 5.76746506322619900686e+00 3.60907502927340395615e+00 5.60828483943416156166e+00 3.65752856537001402870e+00 6.19667076368916447393e+00 +1905 9520.00 4.59519045916077644165e+01 3.66154520728720678235e+00 6.48117278566313093080e+00 3.58730332707341581511e+00 5.77074537252207253601e+00 3.61111524418340756881e+00 5.61160758726832309407e+00 3.65999631055614793596e+00 6.20077314185656280898e+00 +1906 9525.00 4.59781571582256205488e+01 3.66357661911617027428e+00 6.48541388143882624462e+00 3.58950634610501495558e+00 5.77402568178685360323e+00 3.61315538006713854458e+00 5.61493002068674584848e+00 3.66246536463499161584e+00 6.20487644157911599763e+00 +1907 9530.00 4.60044100392903132501e+01 3.66560755316006581239e+00 6.48965542846749166017e+00 3.59170990705473958116e+00 5.77730599102054220850e+00 3.61519543654112629483e+00 5.61825213920231636422e+00 3.66493572882950902070e+00 6.20898066196551035034e+00 +1908 9535.00 4.60306632348018212042e+01 3.66763800895251002032e+00 6.49389742651074897140e+00 3.59391401038897484455e+00 5.78058630028532327572e+00 3.61723541321153430061e+00 5.62157394236937868470e+00 3.66740740435230039296e+00 6.21308580211406802363e+00 +1909 9540.00 4.60569167447601728327e+01 3.66966798601675403546e+00 6.49813987531986114732e+00 3.59611865658446872018e+00 5.78386660953974107713e+00 3.61927530967416322127e+00 5.62489542969045519527e+00 3.66988039240560137699e+00 6.21719186112311561487e+00 +1910 9545.00 4.60831705690616999505e+01 3.67169748387604943929e+00 6.50238277464609115697e+00 3.59832384611797051477e+00 5.78714691882524956412e+00 3.62131512556626855570e+00 5.62821660070952578536e+00 3.67235469419164628491e+00 6.22129883812206685434e+00 +1911 9550.00 4.61094247078100778481e+01 3.67372650208473894295e+00 6.50662612425106434699e+00 3.60052957947659146853e+00 5.79042722804857490360e+00 3.62335486046292265527e+00 5.63153745496020707861e+00 3.67483031090230882754e+00 6.22540673217815054841e+00 +1912 9555.00 4.61356791609016312350e+01 3.67575504014534626407e+00 6.51086992389640428769e+00 3.60273585711635435658e+00 5.79370753735481169855e+00 3.62539451400138235115e+00 5.63485799198647629993e+00 3.67730724375018791505e+00 6.22951554241041982607e+00 +1913 9560.00 4.61619339284400282963e+01 3.67778309762257871185e+00 6.51511417334373810206e+00 3.60494267952437086322e+00 5.79698784659886534598e+00 3.62743408577744741450e+00 5.63817821131158769532e+00 3.67978549392715459376e+00 6.23362526789647031222e+00 +1914 9565.00 4.61881890104252477158e+01 3.67981067402932415789e+00 6.51935887234432787096e+00 3.60715004715666065493e+00 5.80026815585328137104e+00 3.62947357539728177045e+00 5.64149811248988175549e+00 3.68226506259398922438e+00 6.23773590772426000939e+00 +1915 9570.00 4.62144444067536568355e+01 3.68183776891992620151e+00 6.52360402065979894104e+00 3.60935796050033674831e+00 5.80354846511806243825e+00 3.63151298248777765210e+00 5.64481769506533925806e+00 3.68474595096329116117e+00 6.24184746098174958462e+00 +1916 9575.00 4.62407001175289025241e+01 3.68386438182799924590e+00 6.52784961805177665894e+00 3.61156642002178474016e+00 5.80682877435175015535e+00 3.63355230665509987276e+00 5.64813695858194186883e+00 3.68722816020620447475e+00 6.24595992676726030624e+00 +1917 9580.00 4.62669561427509776763e+01 3.68589051229752451277e+00 6.53209566429225052531e+00 3.61377542618738933911e+00 5.81010908365798872666e+00 3.63559154749504775950e+00 5.65145590258366681269e+00 3.68971169148350641720e+00 6.25007330413765860300e+00 +1918 9585.00 4.62932124824198965030e+01 3.68791615988284426919e+00 6.53634215913248262098e+00 3.61598497946353303334e+00 5.81338939291240475171e+00 3.63763070463451487768e+00 5.65477452664558555284e+00 3.69219654598707158755e+00 6.25418759218090691832e+00 +1919 9590.00 4.63194691364319908189e+01 3.68994132412793796050e+00 6.54058910233409829260e+00 3.61819508031660230785e+00 5.81666970217718670710e+00 3.63966977769002841825e+00 5.65809283029095144713e+00 3.69468272487767723788e+00 6.25830278997459732437e+00 +1920 9595.00 4.63457261047872819404e+01 3.69196600457678680840e+00 6.54483649366908792899e+00 3.62040572921298098308e+00 5.81995001143160362034e+00 3.64170876625738815235e+00 5.66141081310519922454e+00 3.69717022931610372893e+00 6.26241889657559713811e+00 +1921 9600.00 4.63719833876930351835e+01 3.69399020079409723394e+00 6.54908433289907687680e+00 3.62261692660868961369e+00 5.82323032068602053357e+00 3.64374766996348675718e+00 5.66472847463230788634e+00 3.69965906046313008915e+00 6.26653591106150198442e+00 +1922 9605.00 4.63982409849419994430e+01 3.69601391232384912655e+00 6.55333261978569048267e+00 3.62482867298047706228e+00 5.82651062994043744681e+00 3.64578648842485320003e+00 5.66804581443698562992e+00 3.70214921947953490289e+00 6.27065383249954066969e+00 +1923 9610.00 4.64244988966377789552e+01 3.69803713872038564148e+00 6.55758135410091913542e+00 3.62704096878436343943e+00 5.82979093921558266800e+00 3.64782522123728725205e+00 5.67136283208394065269e+00 3.70464070750537111110e+00 6.27477265993621990958e+00 +1924 9615.00 4.64507571226767623784e+01 3.70005987953805126622e+00 6.56183053559602402771e+00 3.62925381447636929977e+00 5.83307124844927127327e+00 3.64986386802768025817e+00 5.67467952715860857182e+00 3.70713352570141596587e+00 6.27889239244912911175e+00 +1925 9620.00 4.64770156631625610544e+01 3.70208213435191746399e+00 6.56608016405335703780e+00 3.63146721053324306183e+00 5.83635155773477976027e+00 3.65190242841256162976e+00 5.67799589920496927675e+00 3.70962767520772196406e+00 6.28301302908477676823e+00 +1926 9625.00 4.65032745180952034048e+01 3.70410390271632694592e+00 6.57033023923454972959e+00 3.63368115739027786049e+00 5.83963186696846836554e+00 3.65394090199809529196e+00 5.68131194780845927284e+00 3.71212315716434027024e+00 6.28713456888966248925e+00 +1927 9630.00 4.65295336873710354553e+01 3.70612518420635339567e+00 6.57458076091158449827e+00 3.63589565551385751618e+00 5.84291217623324943276e+00 3.65597928840080887980e+00 5.68462767255451240089e+00 3.71461997270095700685e+00 6.29125701093101685757e+00 +1928 9635.00 4.65557931710936898639e+01 3.70814597836597537039e+00 6.57883172883572786560e+00 3.63811070537036584938e+00 5.84619248550839554213e+00 3.65801758724759507047e+00 5.68794307300783774650e+00 3.71711812295762422664e+00 6.29538035423461561635e+00 +1929 9640.00 4.65820529692631808416e+01 3.71016628479099264126e+00 6.58308314279969675198e+00 3.64032630740546059300e+00 5.84947279479390491730e+00 3.66005579813425407920e+00 5.69125814875387181502e+00 3.71961760906402805205e+00 6.29950459784696192855e+00 +1930 9645.00 4.66083130817758615194e+01 3.71218610302538509771e+00 6.58733500255474968554e+00 3.64254246207516230172e+00 5.85275310403795678837e+00 3.66209392070840644706e+00 5.69457289936768695782e+00 3.72211843213949267195e+00 6.30362974082492044658e+00 +1931 9650.00 4.66345735087353858717e+01 3.71420543266495206680e+00 6.59158730788324564998e+00 3.64475916982512604392e+00 5.85603341326128212785e+00 3.66413195455548823531e+00 5.69788732445544443550e+00 3.72462059329297545673e+00 6.30775578218390187146e+00 +1932 9655.00 4.66608342501417254766e+01 3.71622427326403892422e+00 6.59584005854680732739e+00 3.64697643112173786051e+00 5.85931372259861227292e+00 3.66616989931275671921e+00 5.70120142359221748762e+00 3.72712409365416386109e+00 6.31188272098077529648e+00 +1933 9660.00 4.66870953058912618872e+01 3.71824262441844410887e+00 6.60009325431742510659e+00 3.64919424641065237580e+00 5.86259403182193583604e+00 3.66820775458637404753e+00 5.70451519637380766170e+00 3.72962893434238207391e+00 6.31601055623094875813e+00 +1934 9665.00 4.67133566760876348667e+01 3.72026048570323997211e+00 6.60434689496708848822e+00 3.65141261612716272467e+00 5.86587434103489613335e+00 3.67024552000323378564e+00 5.70782864238565057491e+00 3.73213511644585915761e+00 6.32013928697056215356e+00 +1935 9670.00 4.67396183607308373098e+01 3.72227785669349886533e+00 6.60860098027815201505e+00 3.65363154074801865789e+00 5.86915465036186212444e+00 3.67228319516949941459e+00 5.71114176123390748785e+00 3.73464264107355470301e+00 6.32426891221502529561e+00 +1936 9675.00 4.67658803597172223476e+01 3.72429473697465684978e+00 6.61285551001223925738e+00 3.65585102068778278195e+00 5.87243495957482242176e+00 3.67432077972242820962e+00 5.71445455251438172439e+00 3.73715150933442785686e+00 6.32839943100047719327e+00 +1937 9680.00 4.67921426731504439545e+01 3.72631112613214821039e+00 6.61711048394134326855e+00 3.65807105642320307126e+00 5.87571526884996853113e+00 3.67635827326818453997e+00 5.71776701582287305570e+00 3.73966172231670768156e+00 6.33253084233196350539e+00 +1938 9685.00 4.68184053009268623669e+01 3.72832702376177493875e+00 6.62136590184781503865e+00 3.66029164837920983899e+00 5.87899557808365624822e+00 3.67839567543365975055e+00 5.72107915078627193850e+00 3.74217328110862679225e+00 6.33666314523525908697e+00 +1939 9690.00 4.68446682432537429008e+01 3.73034242943860716579e+00 6.62562176349328169067e+00 3.66251279700145770946e+00 5.88227588737952977738e+00 3.68043298584574696264e+00 5.72439095697965161236e+00 3.74468618679841469543e+00 6.34079633872577375087e+00 +1940 9695.00 4.68709314999238273458e+01 3.73235734276881059301e+00 6.62987806867046103321e+00 3.66473450273560441559e+00 5.88555619664431084459e+00 3.68247020410024550330e+00 5.72770243404026757617e+00 3.74720044048466682796e+00 6.34493042180855493228e+00 +1941 9700.00 4.68971950709370872801e+01 3.73437176333782083759e+00 6.63413481713061425893e+00 3.66695676603766917978e+00 5.88883650587800033804e+00 3.68450732984477680176e+00 5.73101358156392137744e+00 3.74971604322452067848e+00 6.34906539348864829009e+00 +1942 9705.00 4.69234589563971908888e+01 3.73638569074143678250e+00 6.63839200867682510676e+00 3.66917958732221682894e+00 5.89211681516350793686e+00 3.68654436268550433908e+00 5.73432439917750436109e+00 3.75223299610620708577e+00 6.35320125278146630166e+00 +1943 9710.00 4.69497231563041239610e+01 3.73839912458582412924e+00 6.64264964306035299302e+00 3.67140296704526702953e+00 5.89539712438683327633e+00 3.68858130224932079244e+00 5.73763488648718045226e+00 3.75475130019722902475e+00 6.35733799868168603098e+00 +1944 9715.00 4.69759876706578793915e+01 3.74041206445641805090e+00 6.64690772007391572629e+00 3.67362690564211291644e+00 5.89867744369442892349e+00 3.69061814815275424095e+00 5.74094504311984277223e+00 3.75727095656508813803e+00 6.36147563019435668963e+00 +1945 9720.00 4.70022524993548387329e+01 3.74242450996974751476e+00 6.65116623948950547174e+00 3.67585140353768213828e+00 5.90195774292675956474e+00 3.69265490003306151578e+00 5.74425486869201851192e+00 3.75979196626692324656e+00 6.36561414630379918123e+00 +1946 9725.00 4.70285176424986204324e+01 3.74443646073197422552e+00 6.65542520108947410762e+00 3.67807646118799524970e+00 5.90523805222263220571e+00 3.69469155750677069605e+00 5.74756436284096583478e+00 3.76231433035987272717e+00 6.36975354600469056976e+00 +1947 9730.00 4.70547830999855918321e+01 3.74644791633890195115e+00 6.65968460463544786876e+00 3.68030207901798034342e+00 5.90851836140450092927e+00 3.69672812020077357076e+00 5.75087352518321104355e+00 3.76483804991143822249e+00 6.37389382829171591283e+00 +1948 9735.00 4.70810488720230324589e+01 3.74845887641742026020e+00 6.66394444993050782955e+00 3.68252825746292966613e+00 5.91179867070037445842e+00 3.69876458772123450913e+00 5.75418235535601230168e+00 3.76736312596839573175e+00 6.37803499215955671531e+00 +1949 9740.00 4.71073149584036698911e+01 3.75046934055296610211e+00 6.66820473672591873537e+00 3.68475499694777175463e+00 5.91507897997551967961e+00 3.70080095971577494041e+00 5.75749085298626006590e+00 3.76988955956715354745e+00 6.38217703657180379651e+00 +1950 9745.00 4.71335813591274970236e+01 3.75247930837243215407e+00 6.67246546482475810791e+00 3.68698229790779841153e+00 5.91835928924030163500e+00 3.70283723580092205552e+00 5.76079901772157576545e+00 3.77241735174412262666e+00 6.38631996053350192710e+00 +1951 9750.00 4.71598480742981678304e+01 3.75448877949234516294e+00 6.67672663399901900050e+00 3.68921016077830188351e+00 5.92163959847398935210e+00 3.70487341560356897574e+00 5.76410684919921845193e+00 3.77494650355644134621e+00 6.39046376300824281458e+00 +1952 9755.00 4.71861151039156609954e+01 3.75649775352923542826e+00 6.68098824402069002559e+00 3.69143858597384744158e+00 5.92491990776986288125e+00 3.70690949875060749008e+00 5.76741434704607502937e+00 3.77747701603015562100e+00 6.39460844296997876768e+00 +1953 9760.00 4.72123824479799836240e+01 3.75850623009963014098e+00 6.68525029468249076814e+00 3.69366757394008882187e+00 5.92820021701391475233e+00 3.70894548485856567765e+00 5.77072151092013552187e+00 3.78000889019131047775e+00 6.39875399940302624913e+00 +1954 9765.00 4.72386501063874959527e+01 3.76051420882005738022e+00 6.68951278575640717605e+00 3.69589712509159262765e+00 5.93148052632015332364e+00 3.71098137357506541179e+00 5.77402834046901691778e+00 3.78254212706595405180e+00 6.40290043127098051912e+00 +1955 9770.00 4.72649180791382050870e+01 3.76252168932777397714e+00 6.69377571703516149881e+00 3.69812723986364977335e+00 5.93476083555384104073e+00 3.71301716450626972943e+00 5.77733483532997826870e+00 3.78507672766976632772e+00 6.40704773752706202572e+00 +1956 9775.00 4.72911863664393834483e+01 3.76452867124967172074e+00 6.69803908828037730672e+00 3.70035791866046004372e+00 5.93804114477716549203e+00 3.71505285728943501766e+00 5.78064099516100160514e+00 3.78761269302879455267e+00 6.41119591715559256073e+00 +1957 9780.00 4.73174549680837515098e+01 3.76653515419191631253e+00 6.70230289929513745051e+00 3.70258916192768072762e+00 5.94132145406267486720e+00 3.71708845156181810765e+00 5.78394681963043577611e+00 3.79015002414835544542e+00 6.41534496910979612494e+00 +1958 9785.00 4.73437238841749490348e+01 3.76854113780212607310e+00 6.70656714986179469662e+00 3.70482097006951160978e+00 5.94460176331709266861e+00 3.71912394693994752259e+00 5.78725230836517656741e+00 3.79268872204413165505e+00 6.41949489234289849549e+00 +1959 9790.00 4.73699931146093362599e+01 3.77054662171755960998e+00 6.71083183974197439170e+00 3.70705334352124449282e+00 5.94788207260260115561e+00 3.72115934305071416333e+00 5.79055746105429847148e+00 3.79522878770071381282e+00 6.42364568581848871531e+00 +1960 9795.00 4.73962626594905600541e+01 3.77255160555474322592e+00 6.71509696873876116285e+00 3.70928628268707960558e+00 5.95116238183629064906e+00 3.72319463954174034725e+00 5.79386227734542291756e+00 3.79777022214414561319e+00 6.42779734847943018394e+00 +1961 9800.00 4.74225325188186133119e+01 3.77455608896129923835e+00 6.71936253663450688833e+00 3.71151978799194459668e+00 5.95444269110107171628e+00 3.72522983602955415350e+00 5.79716675691726024411e+00 3.80031302635901813147e+00 6.43194987928931194432e+00 +1962 9805.00 4.74488026925934960332e+01 3.77656007157448314615e+00 6.72362854321156522275e+00 3.71375385985040473713e+00 5.95772300036585278349e+00 3.72726493214104737106e+00 5.80047089941743276853e+00 3.80285720132992111076e+00 6.43610327718063235380e+00 +1963 9810.00 4.74750731807115826655e+01 3.77856355304191549038e+00 6.72789498824192744308e+00 3.71598849867702263339e+00 5.96100330966172631264e+00 3.72929992752383965282e+00 5.80377470452465527018e+00 3.80540274805180800399e+00 6.44025754109625303556e+00 +1964 9815.00 4.75013439831728376816e+01 3.78056653299048850414e+00 6.73216187152867373555e+00 3.71822370489672682226e+00 5.96428361889541402974e+00 3.73133482179446085425e+00 5.80707817192800312966e+00 3.80794966749890351210e+00 6.44441266998939710220e+00 +1965 9820.00 4.75276151001845761357e+01 3.78256901107818732655e+00 6.73642919284379537714e+00 3.72045947890335337860e+00 5.96756392816019598513e+00 3.73336961459016736242e+00 5.81038130128545926567e+00 3.81049796065579871041e+00 6.44856866279256557561e+00 +1966 9825.00 4.75538865315395113953e+01 3.78457098695263249866e+00 6.74069695199037344224e+00 3.72269582113219499320e+00 5.97084423737315717062e+00 3.73540430555857838613e+00 5.81368409227573845754e+00 3.81304762849671785574e+00 6.45272551843825414863e+00 +1967 9830.00 4.75801582773412761185e+01 3.78657246025108040755e+00 6.74496514873003416568e+00 3.72493273196672269876e+00 5.97412454665866476944e+00 3.73743889430585873868e+00 5.81698654458791875044e+00 3.81559867198552327139e+00 6.45688323585896029044e+00 +1968 9835.00 4.76064303374862234364e+01 3.78857343063151530416e+00 6.74923378286586039820e+00 3.72717021184222918606e+00 5.97740485592344672483e+00 3.73947338048999444737e+00 5.82028865790070870645e+00 3.81815109209643965826e+00 6.46104181398718324658e+00 +1969 9840.00 4.76327027120780144287e+01 3.79057389775192277170e+00 6.75350285419056906022e+00 3.72940826115255008588e+00 5.98068516519859194602e+00 3.74150776372751137089e+00 5.82359043190319169980e+00 3.82070488978296518567e+00 6.46520125174505544408e+00 +1970 9845.00 4.76589754011166277792e+01 3.79257386125992201897e+00 6.75777236247614965237e+00 3.73164688030188518297e+00 5.98396547445300885926e+00 3.74354204366603138254e+00 5.82689186629480282420e+00 3.82326006600896040055e+00 6.46936154806507435211e+00 +1971 9850.00 4.76852484044984308298e+01 3.79457332082386322725e+00 6.76204230751531998322e+00 3.73388606970479930425e+00 5.98724578372815319227e+00 3.74557621993244627134e+00 5.83019296074389359319e+00 3.82581662172792347221e+00 6.47352270185900824373e+00 +1972 9855.00 4.77115217223270633440e+01 3.79657227610172975929e+00 6.76631268909043459558e+00 3.73612582976549134628e+00 5.99052609296184268572e+00 3.74761029216401420072e+00 5.83349371497063273750e+00 3.82837455787262292972e+00 6.47768471204899309868e+00 +1973 9860.00 4.77377953546025395326e+01 3.79857072674114304434e+00 6.77058350700457811655e+00 3.73836616087779738393e+00 5.99380640224735117272e+00 3.74964426000835349129e+00 5.83679412864336999434e+00 3.83093387540691976412e+00 6.48184757754679630182e+00 +1974 9865.00 4.77640693012211983159e+01 3.80056867242081519720e+00 6.77485476102973560586e+00 3.74060706344591853423e+00 5.99708671146031147003e+00 3.75167812308199355442e+00 5.84009420149263736022e+00 3.83349457525322012685e+00 6.48601129727455205654e+00 +1975 9870.00 4.77903435622866865629e+01 3.80256611280909639916e+00 6.77912645095862753664e+00 3.74284853788441740363e+00 6.00036702074582084521e+00 3.75371188104291864107e+00 5.84339393320751376848e+00 3.83605665835465758917e+00 6.49017587013366537008e+00 +1976 9875.00 4.78166181377990113788e+01 3.80456304756396956890e+00 6.78339857659433409509e+00 3.74509058456640175905e+00 6.00364733000023775844e+00 3.75574553351802142842e+00 5.84669332348743697736e+00 3.83862012564399890380e+00 6.49434129502554124969e+00 +1977 9880.00 4.78428930276545258948e+01 3.80655947636414904167e+00 6.78767113770884833457e+00 3.74733320391680102546e+00 6.00692763926501793748e+00 3.75777908014455830354e+00 5.84999237204221511632e+00 3.84118497804365111037e+00 6.49850757087231478693e+00 +1978 9885.00 4.78691682319568769799e+01 3.80855539886761818025e+00 6.79194413409488717548e+00 3.74957639631908579148e+00 6.01020794854016493503e+00 3.75981252057014980750e+00 5.85329107859201602793e+00 3.84375121647601858399e+00 6.50267469655466179290e+00 +1979 9890.00 4.78954437507060575285e+01 3.81055081477381918376e+00 6.79621756555553080403e+00 3.75182016217745584186e+00 6.01348825779458096008e+00 3.76184585443205188326e+00 5.85658944284664428892e+00 3.84631884186350658794e+00 6.50684267098435054066e+00 +1980 9895.00 4.79217195837984206719e+01 3.81254572374073541496e+00 6.80049143186277049722e+00 3.75406450186501983168e+00 6.01676856704899787331e+00 3.76387908135715765212e+00 5.85988746451590891695e+00 3.84888785511815578744e+00 6.51101149306278870199e+00 +1981 9900.00 4.79479957313376132788e+01 3.81454012545744536311e+00 6.80476573281968821760e+00 3.75630941579634125560e+00 6.02004887630341567473e+00 3.76591220100345225319e+00 5.86318514333033835584e+00 3.85145825714164269371e+00 6.51518116167065208799e+00 +1982 9905.00 4.79742721933236566656e+01 3.81653401960266069892e+00 6.80904046821900177378e+00 3.75855490436525574438e+00 6.02332918556819585376e+00 3.76794521299782658730e+00 5.86648247899973895869e+00 3.85403004884600886015e+00 6.51935167569898155193e+00 +1983 9910.00 4.80005489696528684362e+01 3.81852740585509486948e+00 6.81331563783269977819e+00 3.76080096794487106493e+00 6.02660949483297692097e+00 3.76997811699826623766e+00 5.86977947124428212078e+00 3.85660323113293035391e+00 6.52352303403881705890e+00 +1984 9915.00 4.80268260604289238813e+01 3.82052028391418918574e+00 6.81759124147423101192e+00 3.76304760692902329211e+00 6.02988980412885045013e+00 3.77201091263166299328e+00 5.87307611980486399261e+00 3.85917780488335715461e+00 6.52769523557083886089e+00 +1985 9920.00 4.80531034655481619211e+01 3.82251265344829160853e+00 6.82186727891558231107e+00 3.76529482171154805670e+00 6.03317011337290409756e+00 3.77404359954563783930e+00 5.87637242440165419310e+00 3.86175377100932859520e+00 6.53186827918608603483e+00 +1986 9925.00 4.80793811852178833988e+01 3.82450451415684389289e+00 6.82614374997020245672e+00 3.76754261268628187764e+00 6.03645042264804843057e+00 3.77607617738781131678e+00 5.87966838477554976095e+00 3.86433113039179376713e+00 6.53604216376523527998e+00 +1987 9930.00 4.81056592191271548131e+01 3.82649586573928690569e+00 6.83042065441008094950e+00 3.76979098021596703560e+00 6.03973073189210118983e+00 3.77810864579543936870e+00 5.88296400064671853869e+00 3.86690988390133760788e+00 6.54021688816823765222e+00 +1988 9935.00 4.81319375675868954545e+01 3.82848670787433276175e+00 6.83469799204866124143e+00 3.77203992470480375943e+00 6.04301104117761056500e+00 3.78014100441614342429e+00 5.88625927176642527172e+00 3.86949003242927247470e+00 6.54439245128613222846e+00 +1989 9940.00 4.81582162303898186906e+01 3.83047704027178781416e+00 6.83897576265793549766e+00 3.77428944652590159237e+00 6.04629135040093501630e+00 3.78217325289754358053e+00 5.88955419786520195657e+00 3.87207157683581870700e+00 6.54856885197886917638e+00 +1990 9945.00 4.81844952076395856011e+01 3.83246686262072833173e+00 6.84325396603062152678e+00 3.77653954607309394476e+00 6.04957165969680765727e+00 3.78420539087689622448e+00 5.89284877869430889774e+00 3.87465451800192539622e+00 6.55274608911676015310e+00 +1991 9950.00 4.82107744993361677643e+01 3.83445617463096022348e+00 6.84753260198016455718e+00 3.77879022370912531770e+00 6.05285196889940468878e+00 3.78623741800182189721e+00 5.89614301398428253265e+00 3.87723885679817659167e+00 6.55692416157011948030e+00 +1992 9955.00 4.82370541053759609440e+01 3.83644497600192346809e+00 6.85181167027855586582e+00 3.78104147982783178605e+00 6.05613227815382160202e+00 3.78826933393030484964e+00 5.89943690350710792103e+00 3.87982459406406432478e+00 6.56110306819889466112e+00 +1993 9960.00 4.82633340258625764818e+01 3.83843326643305982060e+00 6.85609117073923979291e+00 3.78329331479195607457e+00 6.05941258742896682321e+00 3.79030113829960324523e+00 5.90273044699332238849e+00 3.88241173068053768702e+00 6.56528280786303586325e+00 +1994 9965.00 4.82896142606923817198e+01 3.84042104563417385776e+00 6.86037110313420761543e+00 3.78554572899533470220e+00 6.06269289668338373644e+00 3.79233283075733540457e+00 5.90602364420454861715e+00 3.88500026747672455585e+00 6.56946337942249058983e+00 +1995 9970.00 4.83158948099690164213e+01 3.84240831332543519849e+00 6.86465146726654040776e+00 3.78779872280071128188e+00 6.06597320593780064968e+00 3.79436441095112364508e+00 5.90931649489205224057e+00 3.88759020531284527067e+00 6.57364478172684663093e+00 +1996 9975.00 4.83421756736924805864e+01 3.84439506919592144385e+00 6.86893226293932190885e+00 3.79005229658119358049e+00 6.06925351519221756291e+00 3.79639587853895177361e+00 5.91260899882782009485e+00 3.89018154501802815304e+00 6.57782701363604793698e+00 +1997 9980.00 4.83684568518627955314e+01 3.84638131298652918844e+00 6.87321348993490310875e+00 3.79230645072025307485e+00 6.07253382446736189593e+00 3.79842723315807617723e+00 5.91590115575274921866e+00 3.89277428745249354236e+00 6.58201007399968229805e+00 +1998 9985.00 4.83947383443762788602e+01 3.84836704438633603331e+00 6.87749514804600359241e+00 3.79456118557026877980e+00 6.07581413378396462122e+00 3.80045847445611739701e+00 5.91919296544919504299e+00 3.89536843342464100814e+00 6.58619396165697068568e+00 +1999 9990.00 4.84210201513365987580e+01 3.85035226312587486319e+00 6.88177723708607036457e+00 3.79681650152507765839e+00 6.07909444301765233831e+00 3.80248960210142472604e+00 5.92248442767878291448e+00 3.89796398378432673582e+00 6.59037867544713318324e+00 +2000 9995.00 4.84473022726401154614e+01 3.85233696893567900688e+00 6.88605975682709203767e+00 3.79907239893705783729e+00 6.08237475229279755951e+00 3.80452061572089039743e+00 5.92577554220313906796e+00 3.90056093935031578113e+00 6.59456421423011729388e+00 +2001 10000.00 4.84735847083904687338e+01 3.85432116151518933123e+00 6.89034270707215057428e+00 3.80132887816895337352e+00 6.08565506153685031876e+00 3.80655151499322697006e+00 5.92906630879425033953e+00 3.90315930093100682541e+00 6.59875057683478161152e+00 +2002 10005.00 4.84998673013642189744e+01 3.85630484060530509538e+00 6.89462608762433060150e+00 3.80358593960423618796e+00 6.08893537091563707975e+00 3.80858229954532623296e+00 5.93235672724483809048e+00 3.90575906935552863430e+00 6.60293776208998295374e+00 +2003 10010.00 4.85261498943379834259e+01 3.85828800592619280962e+00 6.89890989826598222123e+00 3.80584358359528529547e+00 6.09221568004568414523e+00 3.81061296904553925557e+00 5.93564679731652589112e+00 3.90836024543228122141e+00 6.60712576883494051572e+00 +2004 10015.00 4.85524324873117478774e+01 3.86027065720838757912e+00 6.90319413881055332638e+00 3.80810181051520979523e+00 6.09549598928973690448e+00 3.81264352314148302625e+00 5.93893651880203421456e+00 3.91096282995929955817e+00 6.61131459590887349265e+00 +2005 10020.00 4.85787150802855123288e+01 3.86225279417205857868e+00 6.90747880903003341757e+00 3.81036062070602277174e+00 6.09877629858560954546e+00 3.81467396148078119467e+00 5.94222589146298574292e+00 3.91356682374498499044e+00 6.61550424213027898901e+00 +2006 10025.00 4.86049976732592696749e+01 3.86423441656846655690e+00 6.91176390873787038771e+00 3.81262001455119747817e+00 6.10205660781929992709e+00 3.81670428373178083348e+00 5.94551491510246421512e+00 3.91617222759773619956e+00 6.61969470631764522750e+00 +2007 10030.00 4.86312802662330270209e+01 3.86621552412814573074e+00 6.91604943772677849267e+00 3.81487999239274921948e+00 6.10533691707371684032e+00 3.81873448954210381601e+00 5.94880358951318743976e+00 3.91877904228449702728e+00 6.62388598731019495602e+00 +2008 10035.00 4.86575628592067985778e+01 3.86819611657126527504e+00 6.92033539578947998194e+00 3.81714055460378531848e+00 6.10861722632813286538e+00 3.82076457855936890695e+00 5.95209191446714491747e+00 3.92138726862403075302e+00 6.62807808392641817363e+00 +2009 10040.00 4.86838454521805488184e+01 3.87017619365944964827e+00 6.92462178271868911139e+00 3.81940170152632108014e+00 6.11189753562400728271e+00 3.82279455046229088566e+00 5.95537988976741949898e+00 3.92399690737291750864e+00 6.63227099497444694265e+00 +2010 10045.00 4.87101280451543132699e+01 3.87215575512323395557e+00 6.92890859831749050812e+00 3.82166343352309967329e+00 6.11517784488878746174e+00 3.82482440487776065297e+00 5.95866751521709225869e+00 3.92660795931882899978e+00 6.63646471927277126213e+00 +2011 10050.00 4.87364106381280777214e+01 3.87413480070351479156e+00 6.93319584238896613471e+00 3.82392575094650144507e+00 6.11845815411211280122e+00 3.82685414148449165594e+00 5.96195479060888011702e+00 3.92922042524943737618e+00 6.64065925562951964167e+00 +2012 10055.00 4.87626932311018350674e+01 3.87611333014118963902e+00 6.93748351470510549177e+00 3.82618865414890496623e+00 6.12173846338725713423e+00 3.82888375993010399156e+00 5.96524171574586681288e+00 3.93183430592132143744e+00 6.64485460286318652123e+00 +2013 10060.00 4.87889758240755995189e+01 3.87809134320824888675e+00 6.94177161508971618531e+00 3.82845214349305429380e+00 6.12501877267276739758e+00 3.83091325987258324304e+00 5.96852829042077193122e+00 3.93444960210142502532e+00 6.64905075978189685770e+00 +2014 10065.00 4.88152584170493639704e+01 3.88006883962486126549e+00 6.94606014332515631082e+00 3.83071621930023598068e+00 6.12829908191681926866e+00 3.83294264098027825938e+00 5.97181451445740307804e+00 3.93706631455669109343e+00 6.65324772518341767125e+00 +2015 10070.00 4.88415410100231142110e+01 3.88204581916301538769e+00 6.95034909921450427817e+00 3.83298088194355868197e+00 6.13157939121269279781e+00 3.83497190291117195926e+00 5.97510038766920636988e+00 3.93968444403333473147e+00 6.65744549787587658329e+00 +2016 10075.00 4.88678236029968857679e+01 3.88402228157397511055e+00 6.95463848255048144864e+00 3.83524613176503725853e+00 6.13485970041528982932e+00 3.83700104531288666010e+00 5.97838590984890139168e+00 3.94230399129830022531e+00 6.66164407664667379549e+00 +2017 10080.00 4.88941061959706431139e+01 3.88599822660900118265e+00 6.95892829313616623210e+00 3.83751196910668657125e+00 6.13814000969043416234e+00 3.83903006786413492080e+00 5.98167108082029752580e+00 3.94492495708743851068e+00 6.66584346030393781746e+00 +2018 10085.00 4.89203887889444004600e+01 3.88797365402971806247e+00 6.96321853075391494770e+00 3.83977839432088696725e+00 6.14142031893448692159e+00 3.84105897020217224025e+00 5.98495590039684088879e+00 3.94754734214696512140e+00 6.67004364764543122845e+00 +2019 10090.00 4.89466713819181578060e+01 3.88994856358738827495e+00 6.96750919521717460015e+00 3.84204540772892455536e+00 6.14470062821999629676e+00 3.84308775201607710770e+00 5.98824036841270679332e+00 3.95017114721273054911e+00 6.67424463744819274069e+00 +2020 10095.00 4.89729539748919293629e+01 3.89192295506436591879e+00 6.97180028631866033351e+00 3.84431300970390799066e+00 6.14798093745368490204e+00 3.84511641294310413386e+00 5.99152448468133957959e+00 3.95279637301022201967e+00 6.67844642850998315708e+00 +2021 10100.00 4.89992365678656867090e+01 3.89389682820154847676e+00 6.97609180386145677488e+00 3.84658120055675922799e+00 6.15126124672883012323e+00 3.84714495267233136389e+00 5.99480824902655129449e+00 3.95542302028565551097e+00 6.68264901961820712017e+00 +2022 10105.00 4.90255191608394440550e+01 3.89587018279165286927e+00 6.98038374762791669070e+00 3.84884998065022276847e+00 6.15454155603506869454e+00 3.84917337084101518485e+00 5.99809166127215132036e+00 3.95805108975415320671e+00 6.68685240956026127890e+00 +2023 10110.00 4.90518017538132085065e+01 3.89784301858594250945e+00 6.98467611742112115536e+00 3.85111935030558516502e+00 6.15782186527912056562e+00 3.85120166713823319782e+00 6.00137472126267823569e+00 3.96068058214120233274e+00 6.69105659710281841512e+00 +2024 10115.00 4.90780843467869658525e+01 3.89981533535640556565e+00 6.98896891305451717358e+00 3.85338930985449801270e+00 6.16110217454390163283e+00 3.85322984121160461157e+00 6.00465742882194319918e+00 3.96331149814119809704e+00 6.69526158104364377266e+00 +2025 10120.00 4.91043669396570905405e+01 3.90178713288539658066e+00 6.99326213430009691052e+00 3.85565985965970492444e+00 6.16438248372576946821e+00 3.85525789272947960740e+00 6.00793978379448301297e+00 3.96594383848999143538e+00 6.69946736014940746884e+00 +2026 10125.00 4.91306495326308478866e+01 3.90375841093454134523e+00 6.99755578098166619583e+00 3.85793100002176414520e+00 6.16766279305273545930e+00 3.85728582136020525795e+00 6.01122178601447387791e+00 3.96857760388197755574e+00 6.70367393319714821587e+00 +2027 10130.00 4.91569321256046123381e+01 3.90572916929655722384e+00 7.00184985288158223682e+00 3.86020273129305602211e+00 6.17094310228642495275e+00 3.85931362677213218859e+00 6.01450343532645348432e+00 3.97121279502191448785e+00 6.70788129895353613108e+00 +2028 10135.00 4.91832147185783767895e+01 3.90769940775379831521e+00 7.00614434979256195390e+00 3.86247505380523170615e+00 6.17422341155120424361e+00 3.86134130863360702790e+00 6.01778473156459536852e+00 3.97384941259383372980e+00 6.71208945619560726215e+00 +2029 10140.00 4.92094973115521341356e+01 3.90966912606789085416e+00 7.01043927152805146363e+00 3.86474796786921315217e+00 6.17750372086780608072e+00 3.86336886661297995715e+00 6.02106567458380315117e+00 3.97648745730249375541e+00 6.71629840367967023695e+00 +2030 10145.00 4.92357799045258914816e+01 3.91163832404191635916e+00 7.01473461788076946277e+00 3.86702147382701655332e+00 6.18078403011185972815e+00 3.86539630036823611547e+00 6.02434626422861452255e+00 3.97912692983192517460e+00 6.72050814018276021500e+00 +2031 10150.00 4.92620624974996630385e+01 3.91360700144786521903e+00 7.01903038864343109537e+00 3.86929557199992890659e+00 6.18406433933518506763e+00 3.86742360957808761768e+00 6.02762650036429725731e+00 3.98176783085579488741e+00 6.72471866445082078201e+00 +2032 10155.00 4.92883450904734132791e+01 3.91557515808881806407e+00 7.02332658361912276490e+00 3.87157026271960180708e+00 6.18734464861032851246e+00 3.86945079391088286869e+00 6.03090638283538904574e+00 3.98441016106849721368e+00 6.72892997525052560803e+00 +2033 10160.00 4.93146276834471777306e+01 3.91754279374712988115e+00 7.02762320260055872723e+00 3.87384554630732225178e+00 6.19062495786474631387e+00 3.87147785303497116161e+00 6.03418591149679262031e+00 3.98705392113333489945e+00 6.73314207133818154460e+00 +2034 10165.00 4.93409102764209421821e+01 3.91950990821551936705e+00 7.03192024539082449763e+00 3.87612142307401308372e+00 6.19390526717098310883e+00 3.87350478662906549943e+00 6.03746508621377575565e+00 3.98969911171361069080e+00 6.73735495147009544326e+00 +2035 10170.00 4.93671928693946995281e+01 3.92147650128670299807e+00 7.03621771179299937415e+00 3.87839789336168916378e+00 6.19718557640467260228e+00 3.87553159435115013309e+00 6.04074390685160356185e+00 3.99234573347262688969e+00 6.74156861439221266608e+00 +2036 10175.00 4.93934754623684639796e+01 3.92344257276376318089e+00 7.04051560159980294173e+00 3.88067495747091006919e+00 6.20046588563836031938e+00 3.87755827587993806560e+00 6.04402237326517877136e+00 3.99499378708404995209e+00 6.74578305886084006460e+00 +2037 10180.00 4.94197580553422284311e+01 3.92540812243941905635e+00 7.04481391460395034443e+00 3.88295261572296279695e+00 6.20374619489277723261e+00 3.87958483089414229994e+00 6.04730048534049657860e+00 3.99764327319045387199e+00 6.74999828361155795875e+00 +2038 10185.00 4.94460406483159857771e+01 3.92737315011675125476e+00 7.04911265060852709752e+00 3.88523086843913523225e+00 6.20702650417828660778e+00 3.88161125906211079695e+00 6.05057824293245971603e+00 4.00029419243441353160e+00 6.75421428740067320007e+00 +2039 10190.00 4.94723232412897502286e+01 3.92933765559884262686e+00 7.05341180941661516357e+00 3.88750971593034888585e+00 6.21030681350525348705e+00 3.88363756005219329381e+00 6.05385564592706337805e+00 4.00294654547923034471e+00 6.75843106896376522030e+00 +2040 10195.00 4.94986058342635075746e+01 3.93130163869913928920e+00 7.05771139082093057482e+00 3.88978915851789164293e+00 6.21358712268712132243e+00 3.88566373355346650342e+00 6.05713269417920940896e+00 4.00560033295711637180e+00 6.76264862703641611574e+00 +2041 10200.00 4.95248884272372720261e+01 3.93326509921035905037e+00 7.06201139462455440565e+00 3.89206919651268679061e+00 6.21686743196226565544e+00 3.88768977922391512081e+00 6.06040938759562131111e+00 4.00825555548991641075e+00 6.76686696036456769576e+00 +2042 10205.00 4.95511710202110293721e+01 3.93522803695631173682e+00 7.06631182060984386339e+00 3.89434983021529346203e+00 6.22014774120631930288e+00 3.88971569675261630294e+00 6.06368572603120270514e+00 4.01091221373056860955e+00 6.77108606767343523813e+00 +2043 10210.00 4.95774536131847938236e+01 3.93719045174008019927e+00 7.07061266860060744222e+00 3.89663105993663405613e+00 6.22342805048146452407e+00 3.89174148581828216464e+00 6.06696170939267354072e+00 4.01357030829055538845e+00 6.77530594769859906279e+00 +2044 10215.00 4.96037362061585582751e+01 3.93915234337511099838e+00 7.07491393836883553092e+00 3.89891288599799512582e+00 6.22670835972551728332e+00 3.89376714608926155492e+00 6.07023733755566841097e+00 4.01622983979172332170e+00 6.77952659917563948966e+00 +2045 10220.00 4.96300187991323085157e+01 3.94111371168521262831e+00 7.07921562972797335789e+00 3.90119530868957342662e+00 6.22998866900066161634e+00 3.89579267723390421096e+00 6.07351261040617806941e+00 4.01889080884555305317e+00 6.78374802082976913198e+00 +2046 10225.00 4.96563013921060800726e+01 3.94307455647346927208e+00 7.08351774248110377386e+00 3.90347832833265417918e+00 6.23326897824471526377e+00 3.89781807895165011146e+00 6.07678752784056630531e+00 4.02155321608425619928e+00 6.78797021137584444261e+00 +2047 10230.00 4.96825839850798445241e+01 3.94503487758441817590e+00 7.08782027641057865708e+00 3.90576194521743325083e+00 6.23654928753022375076e+00 3.89984335092121314759e+00 6.08006208975518891435e+00 4.02421706209858509595e+00 6.79219316953907714662e+00 +2048 10235.00 4.97088665780535947647e+01 3.94699467481077714837e+00 7.09212323132984856500e+00 3.90804615964446977472e+00 6.23982959676391235604e+00 3.90186849280057668210e+00 6.08333629604640524491e+00 4.02688234748965978582e+00 6.79641689405504845212e+00 +2049 10240.00 4.97351491710273592162e+01 3.94895394800744936603e+00 7.09642660702126359951e+00 3.91033097193505030376e+00 6.24310990604942173121e+00 3.90389350428918291414e+00 6.08661014661057553354e+00 4.02954907285859498245e+00 6.80064138361787939857e+00 +2050 10245.00 4.97614317640011236676e+01 3.95091269697751723555e+00 7.10073040329827076533e+00 3.91261638235864106505e+00 6.24639021530383864445e+00 3.90591838505538024862e+00 6.08988364135442239444e+00 4.03221723879614746266e+00 6.80486663695278792829e+00 +2051 10250.00 4.97877143569748810137e+01 3.95287092155515384917e+00 7.10503461994322460527e+00 3.91490239123653038789e+00 6.24967052453752813790e+00 3.90794313479860955240e+00 6.09315678018466666543e+00 4.03488684589306956241e+00 6.80909265278498843088e+00 +2052 10255.00 4.98139969499486383597e+01 3.95482862157453451957e+00 7.10933925676957123585e+00 3.91718899885891236323e+00 6.25295083380230920511e+00 3.90996775318722011860e+00 6.09642956299767035944e+00 4.03755789472975123999e+00 6.81331942980860549852e+00 +2053 10260.00 4.98402795428187630478e+01 3.95678579686983411534e+00 7.11364431355966342352e+00 3.91947620551598152616e+00 6.25623114305672611835e+00 3.91199223989992406203e+00 6.09970198972088439859e+00 4.04023038588658156556e+00 6.81754696673848936683e+00 +2054 10265.00 4.98665621357925274992e+01 3.95874244727522528464e+00 7.11794979012694994935e+00 3.92176401150829834208e+00 6.25951145235259875932e+00 3.91401659463616269363e+00 6.10297406025066546675e+00 4.04290431993358723162e+00 6.82177526226876285165e+00 +2055 10270.00 4.98928447287662919507e+01 3.96069857263524882640e+00 7.12225568626414595741e+00 3.92405241712605512561e+00 6.26279176159665151857e+00 3.91604081706428486243e+00 6.10624577451446715060e+00 4.04557969745115642013e+00 6.82600431512464389527e+00 +2056 10275.00 4.99191273217400421913e+01 3.96265417277371367888e+00 7.12656200175360510229e+00 3.92634142264908447828e+00 6.26607207086143258579e+00 3.91806490688373187936e+00 6.10951713241901117613e+00 4.04825651898858751565e+00 6.83023412398988849503e+00 +2057 10280.00 4.99454099147138137482e+01 3.96460924753515753238e+00 7.13086873641914120725e+00 3.92863102837794553324e+00 6.26935238011584949902e+00 3.92008886377321674743e+00 6.11278813390211439582e+00 4.05093478510554305672e+00 6.83446468756898628527e+00 +2058 10285.00 4.99716925076875710943e+01 3.96656379677448400756e+00 7.13517589003273933201e+00 3.93092123460283149328e+00 6.27263268937026641225e+00 3.92211268741145158145e+00 6.11605877887049853570e+00 4.05361449636168202915e+00 6.83869600455605830547e+00 +2059 10290.00 4.99979751006613284403e+01 3.96851782031550426311e+00 7.13948346240784914585e+00 3.93321204159321080596e+00 6.27591299865577667561e+00 3.92413637749787769238e+00 6.11932906725161629424e+00 4.05629565330630370568e+00 6.84292807365559418997e+00 +2060 10295.00 5.00242576936350857864e+01 3.97047131803384667492e+00 7.14379145333718756916e+00 3.93550344964964127215e+00 6.27919330788946350452e+00 3.92615993372157223718e+00 6.12259899898328185941e+00 4.05897825648870380633e+00 6.84716089354098844666e+00 +2061 10300.00 5.00505402866088573433e+01 3.97242428976368833204e+00 7.14809986262383834088e+00 3.93779545905195416111e+00 6.28247361717497376787e+00 3.92818335575088406486e+00 6.12586857399294615334e+00 4.06166230643745418405e+00 6.85139446291672715716e+00 +2062 10305.00 5.00768228795826075839e+01 3.97437673535992930240e+00 7.15240869005015156290e+00 3.94008807007997985394e+00 6.28575392643975483509e+00 3.93020664329561819628e+00 6.12913779220806098635e+00 4.06434780369148551671e+00 6.85562878046657075970e+00 +2063 10310.00 5.01031054725563720353e+01 3.97632865466711038493e+00 7.15671793542957601630e+00 3.94238128301354873173e+00 6.28903423567344344036e+00 3.93222979603448719033e+00 6.13240665357680647674e+00 4.06703474877936699272e+00 6.85986384486391287396e+00 +2064 10315.00 5.01293880655301364868e+01 3.97828004756085995552e+00 7.16102759854446535570e+00 3.94467509812212835385e+00 6.29231454496931696951e+00 3.93425281366693235796e+00 6.13567515803699770061e+00 4.06972314224003461902e+00 6.86409965481324402248e+00 +2065 10320.00 5.01556706585038938329e+01 3.98023091387535465913e+00 7.16533767919790065548e+00 3.94696951570627740935e+00 6.29559485422373388275e+00 3.93627569587166759035e+00 6.13894330551608558011e+00 4.07241298458132661153e+00 6.86833620897759100643e+00 +2066 10325.00 5.01819532514776582843e+01 3.98218125349658835788e+00 7.16964817719296565457e+00 3.94926453601473337329e+00 6.29887516345742248802e+00 3.93829844233776737994e+00 6.14221109597261349933e+00 4.07510427631108385071e+00 6.87257350604071604039e+00 +2067 10330.00 5.02082358444514227358e+01 3.98413106625873503219e+00 7.17395909232237816155e+00 3.95156015934805582290e+00 6.30215547272220266706e+00 3.94032105277503985619e+00 6.14547852934439742256e+00 4.07779701795787818952e+00 6.87681154467601185587e+00 +2068 10335.00 5.02345184374251800818e+01 3.98608035205815491864e+00 7.17827042437885420867e+00 3.95385638595498445369e+00 6.30543578196625631449e+00 3.94234352686219580164e+00 6.14874560558998162207e+00 4.08049121001918368989e+00 6.88105032355687562529e+00 +2069 10340.00 5.02608010303989445333e+01 3.98802911072902155354e+00 7.18258217315511249268e+00 3.95615321612571202436e+00 6.30871609126212895546e+00 3.94436586429867697134e+00 6.15201232464717939763e+00 4.08318685299247885467e+00 6.88528984135670185651e+00 +2070 10345.00 5.02870836233727018794e+01 3.98997734216769295301e+00 7.18689433845423497615e+00 3.95845065011934238441e+00 6.31199640050618260290e+00 3.94638806478392423216e+00 6.15527868648490006365e+00 4.08588394738560367614e+00 6.88953009674888505742e+00 +2071 10350.00 5.03133662163464592254e+01 3.99192504622907318179e+00 7.19120692007930539802e+00 3.96074868820534176095e+00 6.31527670976059862795e+00 3.94841012799665014299e+00 6.15854469105132373841e+00 4.08858249367530657281e+00 6.89377108838609142794e+00 +2072 10355.00 5.03396488093202307823e+01 3.99387222278879283621e+00 7.19551991781267652470e+00 3.96304733064281267119e+00 6.31855701902538058334e+00 3.95043205363629645888e+00 6.16181033831535529544e+00 4.09128249235906604753e+00 6.89801281494171725228e+00 +2073 10360.00 5.03659314022939881283e+01 3.99581887172248206852e+00 7.19983333144706616480e+00 3.96534657771158594031e+00 6.32183732830052491636e+00 3.95245384141266820066e+00 6.16507562822517751755e+00 4.09398394391362963063e+00 6.90225527508915703834e+00 +2074 10365.00 5.03922139952677454744e+01 3.99776499290577236323e+00 7.20414716079592132303e+00 3.96764642967076364144e+00 6.32511763752385025583e+00 3.95447549101484208123e+00 6.16834056076006120861e+00 4.09668684881574574064e+00 6.90649846747071283204e+00 +2075 10370.00 5.04184965882415028204e+01 3.99971058621429431668e+00 7.20846140564159387765e+00 3.96994688677944829180e+00 6.32839794680935963100e+00 3.95649700213189525755e+00 6.17160513586818559872e+00 4.09939120753179953027e+00 6.91074239074941676364e+00 +2076 10375.00 5.04447791812152743773e+01 4.00165565154440638906e+00 7.21277606578716845576e+00 3.97224794930710745078e+00 6.33167825607414069822e+00 3.95851837447363275047e+00 6.17486935354954891153e+00 4.10209702054890268386e+00 6.91498704358830007521e+00 +2077 10380.00 5.04710617741890388288e+01 4.00360018876137591093e+00 7.21709114102536197777e+00 3.97454961749211532762e+00 6.33495856537001333919e+00 3.96053960772913216104e+00 6.17813321374196888769e+00 4.10480428830234966853e+00 6.91923242462966481270e+00 +2078 10385.00 5.04973443671627890694e+01 4.00554419776156134247e+00 7.22140663114889136409e+00 3.97685189161430141525e+00 6.33823887460370194447e+00 3.96256070160819762194e+00 6.18139671644544463902e+00 4.10751301126888623827e+00 6.92347853252617717601e+00 +2079 10390.00 5.05236269601365535209e+01 4.00748767843095787811e+00 7.22572253595047531149e+00 3.97915477192240585325e+00 6.34151918383739143792e+00 3.96458165581027000002e+00 6.18465986163924785757e+00 4.11022318988380774840e+00 6.92772536594086751904e+00 +2080 10395.00 5.05499095531103250778e+01 4.00943063065555982405e+00 7.23003885522283340492e+00 3.98145825866516567260e+00 6.34479949308144330899e+00 3.96660247002442778452e+00 6.18792264928192281559e+00 4.11293482461349668711e+00 6.93197292350567728647e+00 +2081 10400.00 5.05761921459804355550e+01 4.01137305433172830504e+00 7.23435558876904494241e+00 3.98376235210168383460e+00 6.34807980236695268417e+00 3.96862314396047466403e+00 6.19118507937346862491e+00 4.11564791589324485699e+00 6.93622120387327267821e+00 +2082 10405.00 5.06024747389541929010e+01 4.01331494933509080880e+00 7.23867273638182862072e+00 3.98606705247033499262e+00 6.35136011163173375138e+00 3.97064367731785328175e+00 6.19444715189315786574e+00 4.11836246415834672518e+00 6.94047020567558892168e+00 +2083 10410.00 5.06287573319279573525e+01 4.01525631559310092200e+00 7.24299029785390491298e+00 3.98837236004058492966e+00 6.35464042090687986075e+00 3.97266406979600317229e+00 6.19770886682026223014e+00 4.12107846983372816396e+00 6.94471992756529665769e+00 +2084 10415.00 5.06550399249017218040e+01 4.01719715297102464291e+00 7.24730827297798985143e+00 3.99067827506117378533e+00 6.35792073017166003979e+00 3.97468432111509439864e+00 6.20097022416514498389e+00 4.12379593336504690626e+00 6.94897036817433111366e+00 +2085 10420.00 5.06813225178754862554e+01 4.01913746139631378185e+00 7.25162666155716362226e+00 3.99298479776011028264e+00 6.36120103943644110700e+00 3.97670443095383907561e+00 6.20423122390707959539e+00 4.12651485515650229274e+00 6.95322152613463551063e+00 +2086 10425.00 5.07076051108492364961e+01 4.02107724075496264504e+00 7.25594546336341927883e+00 3.99529192838613278482e+00 6.36448134867013060045e+00 3.97872439904277142020e+00 6.20749186604606428830e+00 4.12923523563302374839e+00 6.95747340008850922999e+00 +2087 10430.00 5.07338877038230080530e+01 4.02301649095369384668e+00 7.26026467822056620349e+00 3.99759966719834469728e+00 6.36776165794527493347e+00 3.98074422507096770119e+00 6.21075215058209906260e+00 4.13195707521953714547e+00 6.96172598866789105188e+00 +2088 10435.00 5.07601702967967725044e+01 4.02495521188886762332e+00 7.26458430589022885471e+00 3.99990801442475607530e+00 6.37104196718932858090e+00 3.98276390873787011770e+00 6.21401207750482065251e+00 4.13468037430988122338e+00 6.96597929049435737880e+00 +2089 10440.00 5.07864528897705227450e+01 4.02689340348793400892e+00 7.26890434618585512538e+00 4.00221697031410528211e+00 6.37432227645410875994e+00 3.98478344977401111038e+00 6.21727164682459410017e+00 4.13740513330825177007e+00 6.97023330421020848036e+00 +2090 10445.00 5.08127354827442871965e+01 4.02883106565761739404e+00 7.27322479890016104775e+00 4.00452653510476519472e+00 6.37760258570852567317e+00 3.98680284786846739209e+00 6.22053085854141762923e+00 4.14013135260848841313e+00 6.97448802841629245108e+00 +2091 10450.00 5.08390180757180516480e+01 4.03076819829427623887e+00 7.27754566381550205278e+00 4.00683670903511224282e+00 6.38088289499403504834e+00 3.98882210274140769357e+00 6.22378971267602132400e+00 4.14285903262515287082e+00 6.97874346176527637908e+00 +2092 10455.00 5.08653006686918089940e+01 4.03270480132536146556e+00 7.28186694073496010304e+00 4.00914749233315603760e+00 6.38416320423808780760e+00 3.99084121409227554622e+00 6.22704820922840163178e+00 4.14558817372099230880e+00 6.98299960285800480619e+00 +2093 10460.00 5.08915832616655663401e+01 4.03464087466795984227e+00 7.28618862944088796496e+00 4.01145888523727034425e+00 6.38744351348214056685e+00 3.99286018163087375044e+00 6.23030634821929218958e+00 4.14831877628983747286e+00 6.98725645031605324675e+00 +2094 10465.00 5.09178658546393378970e+01 4.03657641822879575955e+00 7.29051072972600433530e+00 4.01377088797546566212e+00 6.39072382275728578804e+00 3.99487900506700910341e+00 6.23356412965905182233e+00 4.15105084071516383659e+00 6.99151400276099721509e+00 +2095 10470.00 5.09441484476130881376e+01 4.03851143193531925135e+00 7.29483324139339117664e+00 4.01608350078611664458e+00 6.39400413206352258300e+00 3.99689768412084900362e+00 6.23682155356841150251e+00 4.15378436735971323657e+00 6.99577225880404451885e+00 +2096 10475.00 5.09704310405868525891e+01 4.04044591571498301619e+00 7.29915616423576540939e+00 4.01839672390759794496e+00 6.39728444129721207645e+00 3.99891621850220069234e+00 6.24007861995773538411e+00 4.15651935660695848185e+00 7.00003121706677244873e+00 +2097 10480.00 5.09967136335606170405e+01 4.04237986948487293404e+00 7.30347949802512008688e+00 4.02071055754718997832e+00 6.40056475056199225548e+00 4.00093460791050326009e+00 6.24333532885811504087e+00 4.15925580879891487740e+00 7.00429087615002554656e+00 +2098 10485.00 5.10229962265343743866e+01 4.04431329317244081523e+00 7.30780324257489866113e+00 4.02302500194326917438e+00 6.40384505981641005690e+00 4.00295285206592765803e+00 6.24659168030064115840e+00 4.16199372431905256775e+00 7.00855123466501694907e+00 +2099 10490.00 5.10492788195081388380e+01 4.04624618670513758190e+00 7.31212739765709063278e+00 4.02534005732384336795e+00 6.40712536911228269787e+00 4.00497095069900677089e+00 6.24984767430604559735e+00 4.16473310349902359206e+00 7.01281229122295357570e+00 +2100 10495.00 5.10755614124819032895e+01 4.04817855002078008653e+00 7.31645196307477974074e+00 4.02765572390656068080e+00 6.41040567833560803734e+00 4.00698890349881686745e+00 6.25310331090541815513e+00 4.16747394669120918564e+00 7.01707404442468174466e+00 +2101 10500.00 5.11018440054556535301e+01 4.05011038304681747491e+00 7.32077693861031875144e+00 4.02997200190906745831e+00 6.41368598760038910456e+00 4.00900671018552756664e+00 6.25635859014021455948e+00 4.17021625425835029688e+00 7.02133649287105221504e+00 +2102 10505.00 5.11281265984294250870e+01 4.05204168572106659951e+00 7.32510232406678873929e+00 4.03228889155937153532e+00 6.41696629684444186381e+00 4.01102437048967264133e+00 6.25961351203116667108e+00 4.17296002651137065698e+00 7.02559963516290775232e+00 +2103 10510.00 5.11544091914031824331e+01 4.05397245797097838249e+00 7.32942811922654779977e+00 4.03460639307512192175e+00 6.42024660609885877705e+00 4.01304188411069251430e+00 6.26286807663009170710e+00 4.17570526380265061306e+00 7.02986346990109467470e+00 +2104 10515.00 5.11806917843769397791e+01 4.05590269974473205394e+00 7.33375432387194514661e+00 4.03692450666359814448e+00 6.42352691534291064812e+00 4.01505925077912095844e+00 6.26612228396808301767e+00 4.17845196645347716213e+00 7.03412799568646107673e+00 +2105 10520.00 5.12069743773507042306e+01 4.05783241098014357817e+00 7.33808093780606363055e+00 4.03924323256317752140e+00 6.42680722462842091147e+00 4.01707647020476343869e+00 6.26937613408659544234e+00 4.18120013478513641303e+00 7.03839321110948645810e+00 +2106 10525.00 5.12332569703244686821e+01 4.05976159161502714312e+00 7.34240796081126045891e+00 4.04156257096041038324e+00 6.43008753391392939847e+00 4.01909354210778868577e+00 6.27262962703745241555e+00 4.18394976911891625093e+00 7.04265911476065653574e+00 +2107 10530.00 5.12595395632982260281e+01 4.06169024160792790923e+00 7.34673539266988573360e+00 4.04388252208330900572e+00 6.43336784314761889192e+00 4.02111046620836543042e+00 6.27588276287247204266e+00 4.18670086976574040705e+00 7.04692570524081496330e+00 +2108 10535.00 5.12858221562719833742e+01 4.06361836088629591046e+00 7.35106323318502319353e+00 4.04620308613915469209e+00 6.43664815240203669333e+00 4.02312724222666506790e+00 6.27913554163311271594e+00 4.18945343704689499020e+00 7.05119298111971559706e+00 +2109 10540.00 5.13121047491421080622e+01 4.06554594941903957306e+00 7.35539148214938975912e+00 4.04852426333522963375e+00 6.43992846164608856441e+00 4.02514386988285455260e+00 6.28238796337119254076e+00 4.19220747125257364729e+00 7.05546094099820653156e+00 +2110 10545.00 5.13383873421158725137e+01 4.06747300714397486132e+00 7.35972013932461344154e+00 4.05084605388918017610e+00 6.44320877092123378560e+00 4.02716034889710350342e+00 6.28564002814889821735e+00 4.19496297268333862007e+00 7.05972958345640666522e+00 +2111 10550.00 5.13646699350896298597e+01 4.06939953400928011717e+00 7.36404920452413680465e+00 4.05316845798756020258e+00 6.44648908019637811861e+00 4.02917667898958242745e+00 6.28889173602841378141e+00 4.19771994162938177908e+00 7.06399890707443134374e+00 +2112 10555.00 5.13909525280633872057e+01 4.07132552998386287868e+00 7.36837867751995290178e+00 4.05549147584801605859e+00 6.44976938950261580175e+00 4.03119285989082420940e+00 6.29214308705119496068e+00 4.20047837839126358972e+00 7.06826891044276450771e+00 +2113 10560.00 5.14172351210371516572e+01 4.07325099501590326412e+00 7.37270855811514280731e+00 4.05781510766746489338e+00 6.45304969873630529520e+00 4.03320889131063431421e+00 6.29539408130015587517e+00 4.20323828323845027910e+00 7.07253959213115912519e+00 +2114 10565.00 5.14435177140109161087e+01 4.07517592907430969973e+00 7.37703884609206017586e+00 4.06013935365318978654e+00 6.45633000796999390047e+00 4.03522477298990800421e+00 6.29864471882711463024e+00 4.20599965646113638229e+00 7.07681095071973498278e+00 +2115 10570.00 5.14698003069846734547e+01 4.07710033210726052744e+00 7.38136954122269361989e+00 4.06246421400210788732e+00 6.45961031725550238747e+00 4.03724050464881756284e+00 6.30189499970462208012e+00 4.20876249832878901458e+00 7.08108298477824416040e+00 +2116 10575.00 5.14960828999584308008e+01 4.07902420407329913132e+00 7.38570064331012687830e+00 4.06478968890077219100e+00 6.46289062648919188092e+00 4.03925608599716667868e+00 6.30514492399486314866e+00 4.21152680910050936092e+00 7.08535569289717059860e+00 +2117 10580.00 5.15223654929322023577e+01 4.08094754496206135741e+00 7.39003215213671449391e+00 4.06711577856683081933e+00 6.46617093577470036792e+00 4.04127151678621654440e+00 6.30839449178074840319e+00 4.21429258904576631295e+00 7.08962907362553895751e+00 +2118 10585.00 5.15486480859059525983e+01 4.08287035471136494635e+00 7.39436406748480834494e+00 4.06944248317647261359e+00 6.46945124501875401535e+00 4.04328679672577262494e+00 6.31164370313482869790e+00 4.21705983843402520961e+00 7.09390312554346635920e+00 +2119 10590.00 5.15749306788797170498e+01 4.08479263331084307964e+00 7.39869638914712712818e+00 4.07176980292661472305e+00 6.47273155428353419438e+00 4.04530192554636958135e+00 6.31489255814001637646e+00 4.21982855749329743844e+00 7.09817784721034605866e+00 +2120 10595.00 5.16012132718534815012e+01 4.08671438072940418351e+00 7.40302911690602538641e+00 4.07409773801417607331e+00 6.47601186353795110762e+00 4.04731690297853941019e+00 6.31814105685849547456e+00 4.22259874649304656202e+00 7.10245323720629428976e+00 +2121 10600.00 5.16274958648272530581e+01 4.08863559692559253023e+00 7.40736225054385588606e+00 4.07642628862570965964e+00 6.47929217282346048279e+00 4.04933172875281499614e+00 6.32138919938354337802e+00 4.22537040567165078642e+00 7.10672929408033571264e+00 +2122 10605.00 5.16537784578010032988e+01 4.09055628187867981183e+00 7.41169578985333732390e+00 4.07875545494777025368e+00 6.48257248205714908806e+00 4.05134640258936684631e+00 6.32463698579807065414e+00 4.22814353526748121226e+00 7.11100601640222595989e+00 +2123 10610.00 5.16800610507747677502e+01 4.09247643557830098615e+00 7.41602973461682246636e+00 4.08108523715654580855e+00 6.48585279131156688948e+00 4.05336092422909199939e+00 6.32788441618499497565e+00 4.23091813550855100345e+00 7.11528340273135473382e+00 +2124 10615.00 5.17063436437485322017e+01 4.09439605799336447944e+00 7.42036408460630347861e+00 4.08341563545932118018e+00 6.48913310059707537647e+00 4.05537529340252422827e+00 6.33113149063758928747e+00 4.23369420662286799484e+00 7.11956145162711084851e+00 +2125 10620.00 5.17326262367222895477e+01 4.09631514911350702590e+00 7.42469883962485965867e+00 4.08574665002192016772e+00 6.49241340982040071594e+00 4.05738950984019552948e+00 6.33437820924913097542e+00 4.23647174883844268578e+00 7.12384016163852251680e+00 +2126 10625.00 5.17589088296960468938e+01 4.09823370890763349905e+00 7.42903399944448405989e+00 4.08807828103089665461e+00 6.49569371909554504896e+00 4.05940357327264145226e+00 6.33762457211289742531e+00 4.23925076237292230985e+00 7.12811953132497766461e+00 +2127 10630.00 5.17851914226698113453e+01 4.10015173736538329763e+00 7.43336956385789093815e+00 4.09041052867280363614e+00 6.49897402834996196219e+00 4.06141748343039310498e+00 6.34087057932216691114e+00 4.24203124743358905846e+00 7.13239955923550184025e+00 +2128 10635.00 5.18114740156435686913e+01 4.10206923447639049130e+00 7.43770553263707245861e+00 4.09274339311346846415e+00 6.50225433589430235060e+00 4.06343124005434930268e+00 6.34411623098057830816e+00 4.24481320422772423484e+00 7.13668024391912236837e+00 +2129 10640.00 5.18377566086173331428e+01 4.10398620021992588391e+00 7.44204190556438138771e+00 4.09507687452908086811e+00 6.50553464686916083082e+00 4.06544484287504293007e+00 6.34736152717104484822e+00 4.24759663296260914223e+00 7.14096158393522806307e+00 +2130 10645.00 5.18640392015910975942e+01 4.10590263460635540582e+00 7.44637868244290146436e+00 4.09741097310619384331e+00 6.50881495613394012167e+00 4.06745829163337191403e+00 6.35060646802830230939e+00 4.25038153382479855225e+00 7.14524357782248209503e+00 +2131 10650.00 5.18903217945648478349e+01 4.10781853761495074906e+00 7.45071586302389210488e+00 4.09974568901063207704e+00 6.51209526538835792309e+00 4.06947158604950498528e+00 6.35385105362489621683e+00 4.25316790703193881029e+00 7.14952622411954319404e+00 +2132 10655.00 5.19166043875386193918e+01 4.10973390923534687147e+00 7.45505344712080031400e+00 4.10208102240822203299e+00 6.51537557472568717998e+00 4.07148472588506837866e+00 6.35709528409556057227e+00 4.25595575273949044970e+00 7.15380952138580372690e+00 +2133 10660.00 5.19428869805123838432e+01 4.11164874947790792703e+00 7.45939143449525143836e+00 4.10441697347515521699e+00 6.51865588391792005751e+00 4.07349771084986578273e+00 6.36033915953357364970e+00 4.25874507115473743823e+00 7.15809346814956182214e+00 +2134 10665.00 5.19691695734861340839e+01 4.11356305833227064994e+00 7.46372982492960179712e+00 4.10675354238761958214e+00 6.52193619319306616688e+00 4.07551054070552609687e+00 6.36358268006330440869e+00 4.26153586243313853288e+00 7.16237806294947709773e+00 +2135 10670.00 5.19954521664598985353e+01 4.11547683579843504020e+00 7.46806861821656564615e+00 4.10909072929071239599e+00 6.52521650245784634592e+00 4.07752321518257954125e+00 6.36682584579875587849e+00 4.26432812677161265924e+00 7.16666330433457776650e+00 +2136 10675.00 5.20217347594336629868e+01 4.11739008188676436362e+00 7.47240781412813515061e+00 4.11142853437098754199e+00 6.52849681170189999335e+00 4.07953573401155988876e+00 6.37006865684357137525e+00 4.26712186431525886121e+00 7.17094919083315840425e+00 +2137 10680.00 5.20480173523037805694e+01 4.11930279658689446620e+00 7.47674741244666218876e+00 4.11376695777354228767e+00 6.53177712094595186443e+00 4.08154809694373010842e+00 6.37331111333248312434e+00 4.26991707524026509191e+00 7.17523572098388484619e+00 +2138 10685.00 5.20742999452775450209e+01 4.12121497991955365592e+00 7.48108741295450396791e+00 4.11610599967456725068e+00 6.53505743025218954756e+00 4.08356030371998635076e+00 6.37655321537949681954e+00 4.27271375969173039522e+00 7.17952289331504989178e+00 +2139 10690.00 5.21005825382513023669e+01 4.12312663188474282094e+00 7.48542781542364821235e+00 4.11844566021915969856e+00 6.53833773948587815283e+00 4.08557235408122654263e+00 6.37979496311934557440e+00 4.27551191782511441630e+00 7.18381070635495522225e+00 +2140 10695.00 5.21268651312250668184e+01 4.12503775249282522708e+00 7.48976861963644857667e+00 4.12078593958350847259e+00 6.54161804877138752801e+00 4.08758424776834949910e+00 6.38303635666603419452e+00 4.27831154978551442269e+00 7.18809915864226134374e+00 +2141 10700.00 5.21531477241988312699e+01 4.12694834176453007046e+00 7.49410982538562198130e+00 4.12312683791271172851e+00 6.54489835802580355306e+00 4.08959598452225137066e+00 6.38627739615429668163e+00 4.28111265572839450044e+00 7.19238824869489956626e+00 +2142 10705.00 5.21794303171725815105e+01 4.12885839971021972872e+00 7.49845143243279554923e+00 4.12546835535186584565e+00 6.54817866730094877425e+00 4.09160756408382919602e+00 6.38951808171886526111e+00 4.28391523576775679061e+00 7.19667797504117068286e+00 +2143 10710.00 5.22057129101463530674e+01 4.13076792634026013218e+00 7.50279344056032382326e+00 4.12781049206679817587e+00 6.55145897651391084793e+00 4.09361898621470921000e+00 6.39275841348410978071e+00 4.28671929004870033708e+00 7.20096833620937104570e+00 +2144 10715.00 5.22319955031201104134e+01 4.13267692167537692427e+00 7.50713584955056045800e+00 4.13015324821296925251e+00 6.55473928584087595084e+00 4.09563025063506014334e+00 6.39599839159512750797e+00 4.28952481869559409944e+00 7.20525933072779878330e+00 +2145 10720.00 5.22582780960938677595e+01 4.13458538573630196566e+00 7.51147865917549406589e+00 4.13249662392511218911e+00 6.55801959505383624816e+00 4.09764135711687238484e+00 6.39923801618665333280e+00 4.29233182182244377145e+00 7.20955095709365778589e+00 +2146 10725.00 5.22845606890676251055e+01 4.13649331853339674581e+00 7.51582186921747918973e+00 4.13484061936905433754e+00 6.56129990432898146935e+00 4.09965230538031555341e+00 6.40247728739341681603e+00 4.29514029955361831270e+00 7.21384321384560944779e+00 +2147 10730.00 5.23108432820413966624e+01 4.13840072011848203459e+00 7.52016547945886948412e+00 4.13718523466916199283e+00 6.56458021359376076020e+00 4.10166309519737826150e+00 6.40571620537088470826e+00 4.29795025199275748662e+00 7.21813609949122536591e+00 +2148 10735.00 5.23371258750151540085e+01 4.14030759049155872020e+00 7.52450948966129029571e+00 4.13953046999126339500e+00 6.56786052282745114184e+00 4.10367372629859605837e+00 6.40895477025378568214e+00 4.30076167925386787516e+00 7.22242961255880366878e+00 +2149 10740.00 5.23634084679889113545e+01 4.14221392968371837640e+00 7.52885389960709616730e+00 4.14187632545972483911e+00 6.57114083208186805507e+00 4.10568419844559162613e+00 6.41219298219758293556e+00 4.30357458141986093381e+00 7.22672375154554647025e+00 +2150 10745.00 5.23896910609626758060e+01 4.14411973773641761909e+00 7.53319870908900490747e+00 4.14422280121964714539e+00 6.57442114135701327626e+00 4.10769451137926555617e+00 6.41543084134737373603e+00 4.30638895860474235633e+00 7.23101851496938863306e+00 +2151 10750.00 5.24159736539364331520e+01 4.14602501467038475624e+00 7.53754391785827859707e+00 4.14656989742648995900e+00 6.57770145066324918304e+00 4.10970466485087548847e+00 6.41866834784825712745e+00 4.30920481089142626274e+00 7.23531390134826590810e+00 +2152 10755.00 5.24422562469101976035e+01 4.14792976052707640378e+00 7.54188952569727000252e+00 4.14891761419425808555e+00 6.58098175987621036853e+00 4.11171465862205032238e+00 6.42190550187641928659e+00 4.31202213837318737433e+00 7.23960990917937952105e+00 +2153 10760.00 5.24685388398839620550e+01 4.14983397533758413545e+00 7.54623553238833366663e+00 4.15126595167841383471e+00 6.58426206915135647790e+00 4.11372449242332383079e+00 6.42514230355623361390e+00 4.31484094111221327950e+00 7.24390653698066699917e+00 +2154 10765.00 5.24948214328577194010e+01 4.15173765913300130137e+00 7.55058193770346086637e+00 4.15361491000332616608e+00 6.58754237839540834898e+00 4.11573416602668284980e+00 6.42837875307425132831e+00 4.31766121919141276919e+00 7.24820378324933134451e+00 +2155 10770.00 5.25211040258314838525e+01 4.15364081196514778327e+00 7.55492874140427339569e+00 4.15596448929336492739e+00 6.59082268768091861233e+00 4.11774367917302708264e+00 6.43161485058593473951e+00 4.32048297268333758581e+00 7.25250164649294326580e+00 +2156 10775.00 5.25473866188052483039e+01 4.15554343385475100092e+00 7.55927594328349261588e+00 4.15831468969362649801e+00 6.59410299691460721760e+00 4.11975303162398187595e+00 6.43485059623638022686e+00 4.32330620165017176504e+00 7.25680012521906991907e+00 +2157 10780.00 5.25736692117789985446e+01 4.15744552486399676638e+00 7.56362354310274209723e+00 4.16066551132848072569e+00 6.59738330620011570460e+00 4.12176222314117257639e+00 6.43808599021214167379e+00 4.32613090614373518861e+00 7.26109921791455548146e+00 +2158 10785.00 5.25999518047527701015e+01 4.15934708503434080740e+00 7.56797154064437727072e+00 4.16301695432229657001e+00 6.60066361543380519805e+00 4.12377125345513206867e+00 6.44132103266868316638e+00 4.32895708623657693437e+00 7.26539892308696799716e+00 +2159 10790.00 5.26262343977265274475e+01 4.16124811440724062805e+00 7.57231993567002348300e+00 4.16536901880980714452e+00 6.60394392476077030096e+00 4.12578012234821489557e+00 6.44455572378219265772e+00 4.33178474195978946426e+00 7.26969923923351135642e+00 +2160 10795.00 5.26525169907002918990e+01 4.16314861302415106792e+00 7.57666872796203350049e+00 4.16772170490501814299e+00 6.60722423396336644430e+00 4.12778882956131809578e+00 6.44779006371849394696e+00 4.33461387336519266000e+00 7.27400016485139477851e+00 +2161 10800.00 5.26787995836740421396e+01 4.16504858095762209302e+00 7.58101791728203444620e+00 4.17007501272193437103e+00 6.61050454323851166549e+00 4.12979737485606790415e+00 6.45102405266414358209e+00 4.33744448048387987171e+00 7.27830169843781860095e+00 +2162 10805.00 5.27050821766478136965e+01 4.16694801823874527713e+00 7.58536750341237997475e+00 4.17242894240565220798e+00 6.61378485248256531293e+00 4.13180575799409055548e+00 6.45425769078496625042e+00 4.34027656335730505077e+00 7.28260383846926284690e+00 +2163 10810.00 5.27313647696215781480e+01 4.16884692492970465594e+00 7.58971748611469454460e+00 4.17478349404945170420e+00 6.61706516176807291174e+00 4.13381397872664546611e+00 6.45749097825715256960e+00 4.34311012201656332365e+00 7.28690658345329644874e+00 +2164 10815.00 5.27576473625953283886e+01 4.17074530108232277570e+00 7.59406786516096854456e+00 4.17713866777769826655e+00 6.62034547103285486713e+00 4.13582203682572391301e+00 6.46072391526725375854e+00 4.34594515647201884434e+00 7.29120993187676269542e+00 +2165 10820.00 5.27839299554654601820e+01 4.17264314675878278393e+00 7.59841864033355740560e+00 4.17949446371476263096e+00 6.62362578027690673821e+00 4.13782993203222382306e+00 6.46395650200182547707e+00 4.34878166674439636807e+00 7.29551388222649777049e+00 +2166 10825.00 5.28102125484392175281e+01 4.17454046201090456236e+00 7.60276981139408469801e+00 4.18185088197465137938e+00 6.62690608951059711984e+00 4.13983766412849796268e+00 6.46718873863705834282e+00 4.35161965285442864371e+00 7.29981843298934851560e+00 +2167 10830.00 5.28364951414129748741e+01 4.17643724692160223100e+00 7.60712137810417665662e+00 4.18420792265063923310e+00 6.63018639878574145285e+00 4.14184523286580841273e+00 6.47042062536986861687e+00 4.35445911480211300670e+00 7.30412358265215111430e+00 +2168 10835.00 5.28627777343867393256e+01 4.17833350153233151758e+00 7.61147334024618782422e+00 4.18656558586709692804e+00 6.63346670809197913599e+00 4.14385263799541636587e+00 6.47365216238681107086e+00 4.35730005259781449922e+00 7.30842932969138825428e+00 +2169 10840.00 5.28890603273604966716e+01 4.18022922591564238814e+00 7.61582569758174354746e+00 4.18892387172766422765e+00 6.63674701730493943330e+00 4.14585987931004051887e+00 6.47688334987443781188e+00 4.36014246623116719093e+00 7.31273567258353196507e+00 +2170 10845.00 5.29153429203342611231e+01 4.18212442013371799021e+00 7.62017844987247006117e+00 4.19128278033598355989e+00 6.64002732659044880847e+00 4.14786695654021464463e+00 6.48011418802967043007e+00 4.36298635570217285817e+00 7.31704260983615295544e+00 +2171 10850.00 5.29416255133080255746e+01 4.18401908425910651346e+00 7.62453159691108339757e+00 4.19364231180605795402e+00 6.64330763581377325977e+00 4.14987386947865477538e+00 6.48334467704942252197e+00 4.36583172097973903902e+00 7.32135013989463789841e+00 +2172 10855.00 5.29679081062817758152e+01 4.18591321837472207790e+00 7.62888513843848148355e+00 4.19600246623116746036e+00 6.64658794508891759278e+00 4.15188061786625883798e+00 6.48657481713061567774e+00 4.36867856206386573348e+00 7.32565826126655395001e+00 +2173 10860.00 5.29941906992555473721e+01 4.18780682253238545343e+00 7.63323907423701975006e+00 4.19836324371495006602e+00 6.64986825437442785613e+00 4.15388720148538315158e+00 6.48980460848052942424e+00 4.37152687892345959142e+00 7.32996697239728867146e+00 +2174 10865.00 5.30204732922293118236e+01 4.18969989681500809553e+00 7.63759340406832443193e+00 4.20072464436104731078e+00 6.65314856360811646141e+00 4.15589362010801455227e+00 6.49303405129608179891e+00 4.37437667153779408125e+00 7.33427627179440921878e+00 +2175 10870.00 5.30467558852030620642e+01 4.19159244130550323604e+00 7.64194812770438236527e+00 4.20308666826273835682e+00 6.65642887287289752862e+00 4.15789987348541600909e+00 6.49626314577419261553e+00 4.37722793985504754488e+00 7.33858615790330048867e+00 +2176 10875.00 5.30730384781768265157e+01 4.19348445607642084099e+00 7.64630324490682067307e+00 4.20544931550293288325e+00 6.65970918213767770766e+00 4.15990596138957702266e+00 6.49949189213250733133e+00 4.38008068385449167437e+00 7.34289662921080399371e+00 +2177 10880.00 5.30993210711505909671e+01 4.19537594121067236586e+00 7.65065875543726647834e+00 4.20781258620600251419e+00 6.66298949139209550907e+00 4.16191188359248709361e+00 6.50272029057830636134e+00 4.38293490347394243400e+00 7.34720768418303382674e+00 +2178 10885.00 5.31256036641243483132e+01 4.19726689678080600032e+00 7.65501465906770661718e+00 4.21017648043413128534e+00 6.66626980091597953759e+00 4.16391763986613749893e+00 6.50594834131887278517e+00 4.38579059868230825003e+00 7.35151932129646557001e+00 +2179 10890.00 5.31518862570981056592e+01 4.19915732286973675258e+00 7.65937095555976998895e+00 4.21254099829095984830e+00 6.66955010991129348952e+00 4.16592322997215092073e+00 6.50917604456148879422e+00 4.38864776940703826824e+00 7.35583153899648500840e+00 +2180 10895.00 5.31781688500718772161e+01 4.20104721958110349789e+00 7.66372764467507927577e+00 4.21490613986976381256e+00 6.67283041916571040275e+00 4.16792865369288456634e+00 6.51240340054452904184e+00 4.39150641560667853724e+00 7.36014433576993276631e+00 +2181 10900.00 5.32044514430456345622e+01 4.20293658698745531410e+00 7.66808472618562664280e+00 4.21727190524309492048e+00 6.67611072844085562394e+00 4.16993391078996200605e+00 6.51563040945454652331e+00 4.39436653719831316067e+00 7.36445771008292293658e+00 +2182 10905.00 5.32307340360193919082e+01 4.20482542518207047522e+00 7.67244219985303566034e+00 4.21963829451459204734e+00 6.67939103770563757934e+00 4.17193900104573778265e+00 6.51885707154028093413e+00 4.39722813411976076736e+00 7.36877166038083863953e+00 +2183 10910.00 5.32570166289931563597e+01 4.20671373425822547887e+00 7.67680006543893522775e+00 4.22200530774644011700e+00 6.68267134694968856223e+00 4.17394392422183813096e+00 6.52208338699864942356e+00 4.40009120629847139128e+00 7.37308618512979396797e+00 +2184 10915.00 5.32832992219669137057e+01 4.20860151429883178054e+00 7.68115832270494713896e+00 4.22437294504227978109e+00 6.68595165620410636365e+00 4.17594868010061404107e+00 6.52530935606802486859e+00 4.40295575365153091241e+00 7.37740128280626628055e+00 +2185 10920.00 5.33095818149406781572e+01 4.21048876540753180819e+00 7.68551697141269940516e+00 4.22674120645393269768e+00 6.68923196548961573882e+00 4.17795326845405945448e+00 6.52853497897641954495e+00 4.40582177608566549765e+00 7.38171695185563958574e+00 +2186 10925.00 5.33358644079144426087e+01 4.21237548767760205948e+00 7.68987601133418063881e+00 4.22911009208503951839e+00 6.69251227473366849807e+00 4.17995768906452536129e+00 6.53176025593111653222e+00 4.40868927351795925063e+00 7.38603319073366293424e+00 +2187 10930.00 5.33621470008881928493e+01 4.21426168120231903202e+00 7.69423544221028965495e+00 4.23147960199778427892e+00 6.69579258399844867711e+00 4.18196194169363977267e+00 6.53498518718085019685e+00 4.41155824585513745006e+00 7.39034999789608715304e+00 +2188 10935.00 5.33884295938619644062e+01 4.21614734608532337745e+00 7.69859526382337833184e+00 4.23384973627507932292e+00 6.69907289326322974432e+00 4.18396602612375279051e+00 6.53820977296399785672e+00 4.41442869298319262583e+00 7.39466737180902278226e+00 +2189 10940.00 5.34147121868357288577e+01 4.21803248244062078953e+00 7.70295547593507468065e+00 4.23622049497911135063e+00 6.70235320253837496551e+00 4.18596994213722251033e+00 6.54143401348784081506e+00 4.41730061479848501449e+00 7.39898531091785471858e+00 +2190 10945.00 5.34409947798094790983e+01 4.21991709035112450010e+00 7.70731607828627396373e+00 4.23859187819279004117e+00 6.70563351178242861295e+00 4.18797368951640081036e+00 6.54465790901148292136e+00 4.42017401119737396442e+00 7.40330381367833290085e+00 +2191 10950.00 5.34672773727832435497e+01 4.22180116993084020294e+00 7.71167707064896834623e+00 4.24096388596793971715e+00 6.70891382103684552618e+00 4.18997726802291214909e+00 6.54788145975256696829e+00 4.42304888205549140423e+00 7.40762287853584222574e+00 +2192 10955.00 5.34935599657570080012e+01 4.22368472128340766147e+00 7.71603845277441724448e+00 4.24333651838747005769e+00 6.71219413029126155124e+00 4.19198067744947699964e+00 6.55110466597019858170e+00 4.42592522724846570981e+00 7.41194250394613085575e+00 +2193 10960.00 5.35198425586271255838e+01 4.22556774452283079313e+00 7.72040022444497608944e+00 4.24570977550320272087e+00 6.71547443957677003823e+00 4.19398391757844812844e+00 6.55432752790275152677e+00 4.42880304665192880975e+00 7.41626268835458457573e+00 +2194 10965.00 5.35461251516008900353e+01 4.22745023976311795622e+00 7.72476238539117598947e+00 4.24808365739805005035e+00 6.71875474881046041986e+00 4.19598698818181503611e+00 6.55755004578859956865e+00 4.43168234014151174449e+00 7.42058343020658739420e+00 +2195 10970.00 5.35724077445746473813e+01 4.22933220710790713781e+00 7.72912493538500999790e+00 4.25045816410310628441e+00 6.72203505807524148707e+00 4.19798988904193137728e+00 6.56077221986611647253e+00 4.43456310756175220433e+00 7.42490472793716005384e+00 +2196 10975.00 5.35986903375484118328e+01 4.23121364667120669623e+00 7.73348787418810079686e+00 4.25283329571164525618e+00 6.72531536731929335815e+00 4.19999261994115258290e+00 6.56399405040476935369e+00 4.43744534877791618754e+00 7.42922658001241575931e+00 +2197 10980.00 5.36249729305221691789e+01 4.23309455857738115014e+00 7.73785120155171224354e+00 4.25520905225476120393e+00 6.72859567660480273332e+00 4.20199518067219468520e+00 6.56721553763256959968e+00 4.44032906363454582532e+00 7.43354898486737614149e+00 +2198 10985.00 5.36512555234959265249e+01 4.23497494294043974605e+00 7.74221491722710553063e+00 4.25758543380500320552e+00 6.73187598587994795452e+00 4.20399757100704807300e+00 6.57043668181898254943e+00 4.44321425199690267505e+00 7.43787194093705839038e+00 +2199 10990.00 5.36775381164696980818e+01 4.23685479986402224739e+00 7.74657902098626927057e+00 4.25996244040382698870e+00 6.73515629513436486775e+00 4.20599979074879559704e+00 6.57365748320238196811e+00 4.44610091367843729415e+00 7.44219544666685273171e+00 +2200 10995.00 5.37038207094434554278e+01 4.23873412949322680987e+00 7.75094351257009961387e+00 4.26234007212378074314e+00 6.73843660440950920076e+00 4.20800183965906260397e+00 6.57687794205223674737e+00 4.44898904853404886239e+00 7.44651950050214050947e+00 +2201 11000.00 5.37301033024172127739e+01 4.24061293194205646273e+00 7.75530839175058961388e+00 4.26471832899595693078e+00 6.74171691364319869422e+00 4.21000371753056601420e+00 6.58009805861728303000e+00 4.45187865639791446881e+00 7.45084410086757831237e+00 +2202 11005.00 5.37563858953909701199e+01 4.24249120732451778792e+00 7.75967365826863453293e+00 4.26709721107217632152e+00 6.74499722292870806939e+00 4.21200542415602541269e+00 6.58331783316698881947e+00 4.45476973707311607598e+00 7.45516924620855281347e+00 +2203 11010.00 5.37826684883647416768e+01 4.24436895577534301083e+00 7.76403931187549734005e+00 4.26947671840426057344e+00 6.74827753216239667466e+00 4.21400695932815683165e+00 6.58653726595009203493e+00 4.45766229039382544386e+00 7.45949493496008209092e+00 +2204 11015.00 5.38089510813385061283e+01 4.24624617742926702135e+00 7.76840535235353257804e+00 4.27185685103366363791e+00 6.75155784144790604984e+00 4.21600832281895243625e+00 6.58975635724642305746e+00 4.46055631618385461934e+00 7.46382116554682539800e+00 +2205 11020.00 5.38352336743122563689e+01 4.24812287241065877907e+00 7.77277177942290542489e+00 4.27423760900184301903e+00 6.75483815071268711705e+00 4.21800951443149241271e+00 6.59297510730472158258e+00 4.46345181422555814521e+00 7.46814793641416585501e+00 +2206 11025.00 5.38615162672860208204e+01 4.24999904084388635539e+00 7.77713859285560893397e+00 4.27661899236062037488e+00 6.75811845994637572232e+00 4.22001053394813130382e+00 6.59619351639445294921e+00 4.46634878435310866962e+00 7.47247524599712509286e+00 +2207 11030.00 5.38877988602597923773e+01 4.25187468286368375203e+00 7.78150579240290607430e+00 4.27900100114108639104e+00 6.76139876921115678954e+00 4.22201138115122276417e+00 6.59941158479544931481e+00 4.46924722634886162353e+00 7.47680309270999376992e+00 +2208 11035.00 5.39140814532335426179e+01 4.25374979861514823654e+00 7.78587337782641952799e+00 4.28138363537433530581e+00 6.76467907846557370277e+00 4.22401205585421468669e+00 6.60262931277717513012e+00 4.47214714000553392736e+00 7.48113147499815944741e+00 +2209 11040.00 5.39403640462073070694e+01 4.25562438822264965665e+00 7.79024134885668484429e+00 4.28376689511218611273e+00 6.76795938773035388181e+00 4.22601255782909390746e+00 6.60584670060909839862e+00 4.47504852511584427788e+00 7.48546039127591367190e+00 +2210 11045.00 5.39666466391810715209e+01 4.25749845183128527992e+00 7.79460970525532381714e+00 4.28615078037536623157e+00 6.77123969701586414516e+00 4.22801288686858001142e+00 6.60906374857104950138e+00 4.47795138146214721786e+00 7.48978983998864045191e+00 +2211 11050.00 5.39929292321548288669e+01 4.25937198958615059752e+00 7.79897844678396712226e+00 4.28853529120533405461e+00 6.77452000628064432419e+00 4.23001304277575496116e+00 6.61228045693249555370e+00 4.48085570881642958341e+00 7.49411981954026806818e+00 +2212 11055.00 5.40192118251285862129e+01 4.26124500161161812173e+00 7.80334757318350913380e+00 4.29092042762281611346e+00 6.77780031551433381765e+00 4.23201302534333656524e+00 6.61549682598363020247e+00 4.48376150696104858184e+00 7.49845032837618319377e+00 +2213 11060.00 5.40454944181023506644e+01 4.26311748807351076351e+00 7.80771708421557697477e+00 4.29330618966927080038e+00 6.78108062477911399668e+00 4.23401283436404263227e+00 6.61871285599392233934e+00 4.48666877566799193744e+00 7.50278136490031322126e+00 +2214 11065.00 5.40717770110761151159e+01 4.26498944909619837063e+00 7.81208697961070352989e+00 4.29569257735506049301e+00 6.78436093405426010605e+00 4.23601246962022770504e+00 6.62192854725356472301e+00 4.48957751467815757707e+00 7.50711292754767711699e+00 +2215 11070.00 5.40980596040498724619e+01 4.26686088483514325276e+00 7.81645725913051414580e+00 4.29807959071127765327e+00 6.78764124331904117327e+00 4.23801193092533790008e+00 6.62514390004238773457e+00 4.49248772377390004351e+00 7.51144501474293413423e+00 +2216 11075.00 5.41243421970236369134e+01 4.26873179544580683142e+00 7.82082792252627001517e+00 4.30046722976901474311e+00 6.79092155256309304434e+00 4.24001121807209102599e+00 6.62835891465059034999e+00 4.49539940268575222149e+00 7.51577762490037493137e+00 +2217 11080.00 5.41506247899973871540e+01 4.27060218106292044382e+00 7.82519896954923410703e+00 4.30285549453863680469e+00 6.79420186183823826553e+00 4.24201033085320311500e+00 6.63157359135799762129e+00 4.49831255116497708002e+00 7.52011075644465698531e+00 +2218 11085.00 5.41769073829711587109e+01 4.27247204185231321816e+00 7.82957039994030257191e+00 4.30524438505123452359e+00 6.79748217110302022093e+00 4.24400926907175968239e+00 6.63478793047553505602e+00 4.50122716896283225907e+00 7.52444440777970857681e+00 +2219 11090.00 5.42031899759449231624e+01 4.27434137795907975743e+00 7.83394221345073749063e+00 4.30763390130680878798e+00 6.80076248035743713416e+00 4.24600803251011260642e+00 6.63800193227267065765e+00 4.50414325580985597242e+00 7.52877857733018540642e+00 +2220 11095.00 5.42294725689186734030e+01 4.27621018953868325951e+00 7.83831440983180005588e+00 4.31002404333645205980e+00 6.80404278962221731319e+00 4.24800662099207215761e+00 6.64121559704996133888e+00 4.50706081142621428626e+00 7.53311326352074672741e+00 +2221 11100.00 5.42557551617888051965e+01 4.27807847675694841172e+00 7.84268698882438908271e+00 4.31241481114016433906e+00 6.80732309887663511461e+00 4.25000503429999287874e+00 6.64442892511833171909e+00 4.50997983555280512746e+00 7.53744846476568230997e+00 +2222 11105.00 5.42820377547625554371e+01 4.27994623975897248158e+00 7.84705995016940160980e+00 4.31480620473867393372e+00 6.81060340814141529364e+00 4.25200327224732088638e+00 6.64764191675761129119e+00 4.51290032789943396097e+00 7.54178417945855805726e+00 +2223 11110.00 5.43083203477363198886e+01 4.28181347871058104460e+00 7.85143329362846120745e+00 4.31719822413197995559e+00 6.81388371739583309505e+00 4.25400133462677310092e+00 6.65085457226835963240e+00 4.51582228819663544783e+00 7.54612040603439471198e+00 +2224 11115.00 5.43346029407100843400e+01 4.28368019377760056443e+00 7.85580701894246669070e+00 4.31959086935117664297e+00 6.81716402666061327409e+00 4.25599922124143237312e+00 6.65406689196149869758e+00 4.51874571613348496868e+00 7.55045714289711789036e+00 +2225 11120.00 5.43608855336838416861e+01 4.28554638511549157442e+00 7.86018112586268102859e+00 4.32198414037553302336e+00 6.82044433592539434130e+00 4.25799693189438155372e+00 6.65727887612722479815e+00 4.52167061141978887662e+00 7.55479438846102446803e+00 +2226 11125.00 5.43871681266576061375e+01 4.28741205289008142643e+00 7.86455561410927206367e+00 4.32437803721541502711e+00 6.82372464517981125454e+00 4.25999446638870082893e+00 6.66049052508682493112e+00 4.52459697376534997204e+00 7.55913214113003828487e+00 +2227 11130.00 5.44134507196313705890e+01 4.28927719727755718537e+00 7.86893048345423107293e+00 4.32677255988118592001e+00 6.82700495444459320993e+00 4.26199182452747482586e+00 6.66370183913049363156e+00 4.52752480284888392248e+00 7.56347039930809206254e+00 +2228 11135.00 5.44397333126051208296e+01 4.29114181844374709129e+00 7.87330573363845154233e+00 4.32916770837284659024e+00 6.83028526369900923498e+00 4.26398900612414699651e+00 6.66691281857951700829e+00 4.53045409836983115071e+00 7.56780916140947645943e+00 +2229 11140.00 5.44660159055788923865e+01 4.29300591654411078935e+00 7.87768136439247079750e+00 4.33156348268003110746e+00 6.83356557296379030220e+00 4.26598601098180196800e+00 6.67012346374481879252e+00 4.53338486000690199518e+00 7.57214842584848213392e+00 +2230 11145.00 5.44922984985526497326e+01 4.29486949177556720514e+00 7.88205737546755003109e+00 4.33395988280274302440e+00 6.83684588222857136941e+00 4.26798283889315488437e+00 6.67333377491659440750e+00 4.53631708743881212342e+00 7.57648819101867587733e+00 +2231 11150.00 5.45185810915264070786e+01 4.29673254428321360621e+00 7.88643376660458450544e+00 4.33635690874097878833e+00 6.84012619147262501684e+00 4.26997948968201868070e+00 6.67654375243685915819e+00 4.53925078034427365026e+00 7.58082845533435012442e+00 +2232 11155.00 5.45448636845001715301e+01 4.29859507425360298782e+00 7.89081053754447481197e+00 4.33875456048437602163e+00 6.84340650059230881652e+00 4.27197596314110938920e+00 6.67975339660617084547e+00 4.54218593837090800491e+00 7.58516921718906900196e+00 +2233 11160.00 5.45711462774739359816e+01 4.30045708187329012162e+00 7.89518768802811532481e+00 4.34115283801220730453e+00 6.84668681000218626309e+00 4.27397225909423905676e+00 6.68296270774581824270e+00 4.54512256120779056801e+00 7.58951047498675990255e+00 +2234 11165.00 5.45974288704476933276e+01 4.30231856730810058309e+00 7.89956521780676901301e+00 4.34355174133483323828e+00 6.84996711923587575654e+00 4.27596837734448964596e+00 6.68617168616672241654e+00 4.54806064850254276877e+00 7.59385222714171526093e+00 +2235 11170.00 5.46237114634214506736e+01 4.30417953073422321353e+00 7.90394312662133291525e+00 4.34595127042116580185e+00 6.85324742850065593558e+00 4.27796431769494045483e+00 6.68938033220053718253e+00 4.55100019989242010610e+00 7.59819447203713682626e+00 +2236 11175.00 5.46499940563952151251e+01 4.30603997234857693854e+00 7.90832141420234258078e+00 4.34835142526083817671e+00 6.85652773779652946473e+00 4.27996007996940441842e+00 6.69258864616854776131e+00 4.55394121504577320536e+00 7.60253720808731525693e+00 +2237 11180.00 5.46762766493689724712e+01 4.30789989231698733363e+00 7.91270008029069238376e+00 4.35075220584348709707e+00 6.85980804701985391603e+00 4.28195566396060023351e+00 6.69579662838167610772e+00 4.55688369358949252330e+00 7.60688043368581556791e+00 +2238 11185.00 5.47025592423427369226e+01 4.30975929083637243622e+00 7.91707912463764351685e+00 4.35315361214838514314e+00 6.86308835629499913722e+00 4.28395106950269877188e+00 6.69900427918193930310e+00 4.55982763516083533517e+00 7.61122414723656781632e+00 +2239 11190.00 5.47288418353165013741e+01 4.31161816809328524158e+00 7.92145854696337003986e+00 4.35555564414443807664e+00 6.86636866557014435841e+00 4.28594629638842139485e+00 6.70221159889062612081e+00 4.56277303938669298589e+00 7.61556834712276931043e+00 +2240 11195.00 5.47551244282902729310e+01 4.31347652425355132522e+00 7.92583834702949197037e+00 4.35795830182128351993e+00 6.86964897483492542563e+00 4.28794134444157659658e+00 6.70541858782902089331e+00 4.56571990590432541524e+00 7.61991303174835010736e+00 +2241 11200.00 5.47814070212640231716e+01 4.31533435953481703251e+00 7.93021852455618248001e+00 4.36036158514782812290e+00 6.87292928405824987692e+00 4.28993621346524722782e+00 6.70862524633913981376e+00 4.56866823433025537327e+00 7.62425819950687611026e+00 +2242 11205.00 5.48076896142377876231e+01 4.31719167411327386930e+00 7.93459907929470098509e+00 4.36276549410334446577e+00 6.87620959335412340607e+00 4.29193090329360682489e+00 6.71183157475263492131e+00 4.57161802427065211418e+00 7.62860384880227204718e+00 +2243 11210.00 5.48339722072115449691e+01 4.31904846818583632029e+00 7.93898001097558214667e+00 4.36517002864637593262e+00 6.87948990258781201135e+00 4.29392541372973912672e+00 6.71503757340115559060e+00 4.57456927535240431837e+00 7.63294997801774144364e+00 +2244 11215.00 5.48602548001853094206e+01 4.32090474193906093348e+00 7.94336131933972300345e+00 4.36757518876655748130e+00 6.88277021185259307856e+00 4.29591974457672520771e+00 6.71824324261635474898e+00 4.57752198716095115572e+00 7.63729658554684576188e+00 +2245 11220.00 5.48865373931590667667e+01 4.32276049556986396993e+00 7.94774300411765644014e+00 4.36998097441207011826e+00 6.88605052111737414577e+00 4.29791389567910186997e+00 6.72144858275061007902e+00 4.58047615930245388682e+00 7.64164366978315179324e+00 +2246 11225.00 5.49128199861328312181e+01 4.32461572927516524345e+00 7.95212506505028038362e+00 4.37238738556218464737e+00 6.88933083038215521299e+00 4.29990786683995462880e+00 6.72465359412521213045e+00 4.58343179137271494739e+00 7.64599122912022188814e+00 +2247 11230.00 5.49391025791065885642e+01 4.32647044326224605726e+00 7.95650750187849276074e+00 4.37479442217544622906e+00 6.89261113963657212622e+00 4.30190165787272693620e+00 6.72785827708217354370e+00 4.58638888295716817822e+00 7.65033926194125690756e+00 +2248 11235.00 5.49653851720803530156e+01 4.32832463772802267243e+00 7.96089031433282556804e+00 4.37720208422075973687e+00 6.89589144888062577365e+00 4.30389526859086490873e+00 6.73106263197387377772e+00 4.58934743364125097287e+00 7.65468776665018690863e+00 +2249 11240.00 5.49916677650541174671e+01 4.33017831286941490276e+00 7.96527350214381346660e+00 4.37961037164630617724e+00 6.89917175815577010667e+00 4.30588869883890978940e+00 6.73426665914232813748e+00 4.59230744300003390634e+00 7.65903674161984593383e+00 +2250 11245.00 5.50179503579242350497e+01 4.33203146889370405148e+00 7.96965706505235438328e+00 4.38201928441062982245e+00 6.90245206738945960012e+00 4.30788194840957672227e+00 6.73747035893991785827e+00 4.59526891060859021820e+00 7.66338618524379988628e+00 +2251 11250.00 5.50442329508979995012e+01 4.33388410599780815602e+00 7.97404100278897942644e+00 4.38442882248263821054e+00 6.90573237670606054905e+00 4.30987501714740606218e+00 6.74067373168792816074e+00 4.59823183604199048347e+00 7.66773609590524785062e+00 +2252 11255.00 5.50705155438717568472e+01 4.33573622438901029597e+00 7.97842531509458829930e+00 4.38683898581050790710e+00 6.90901268599156903605e+00 4.31186790485547710716e+00 6.74387677776983185396e+00 4.60119621884421547975e+00 7.67208647199775217729e+00 +2253 11260.00 5.50967981368455141933e+01 4.33758782428495504035e+00 7.98281000168934795624e+00 4.38924977433205931732e+00 6.91229299519416606756e+00 4.31386061135760456864e+00 6.74707949750691504676e+00 4.60416205859033667025e+00 7.67643731190451727997e+00 +2254 11265.00 5.51230807298192786448e+01 4.33943890589292458060e+00 7.98719506232452225447e+00 4.39166118802656058051e+00 6.91557330444858298080e+00 4.31585313648795843022e+00 6.75028189126192135205e+00 4.60712935481396890225e+00 7.68078861400874046694e+00 +2255 11270.00 5.51493633227930359908e+01 4.34128946940983695413e+00 7.99158049672027903654e+00 4.39407322681110024121e+00 6.91885361373409146779e+00 4.31784548005998747300e+00 6.75348395939759704731e+00 4.61009810707982126132e+00 7.68514037669362348737e+00 +2256 11275.00 5.51756459157668004423e+01 4.34313951506370266031e+00 7.99596630460715385169e+00 4.39648589065458583747e+00 6.92213392299887342318e+00 4.31983764190786523329e+00 6.75668570225595299661e+00 4.61306831492150770657e+00 7.68949259834236542588e+00 +2257 11280.00 5.52019285087405648937e+01 4.34498904306180389057e+00 8.00035248572604196227e+00 4.39889917949483244541e+00 6.92541423222219698630e+00 4.32182962183467367367e+00 6.75988712021010051956e+00 4.61603997786227981948e+00 7.69384527733816714345e+00 +2258 11285.00 5.52282111017143151344e+01 4.34683805361142283630e+00 8.00473903980747536480e+00 4.40131309328002018333e+00 6.92869454152843555761e+00 4.32382141969531552661e+00 6.76308821359168899079e+00 4.61901309545648075527e+00 7.69819841205386445893e+00 +2259 11290.00 5.52544936946880866913e+01 4.34868654695093326268e+00 8.00912596657162723091e+00 4.40372763192723493120e+00 6.93197485078285158266e+00 4.32581303529287364285e+00 6.76628898278419121937e+00 4.62198766720663556384e+00 7.70255200088302149908e+00 +2260 11295.00 5.52807762876618511427e+01 4.35053452327725320714e+00 8.01351326574902778077e+00 4.40614279540538600344e+00 6.93525516003726938408e+00 4.32780446846152155871e+00 6.76948942813998577606e+00 4.62496369264635909246e+00 7.70690604219847408274e+00 +2261 11300.00 5.53070588806356013833e+01 4.35238198281839228088e+00 8.01790093709094087160e+00 4.40855858363156016821e+00 6.93853546928132036697e+00 4.32979571903543369871e+00 6.77268955003217953958e+00 4.62794117128853788046e+00 7.71126053438342395907e+00 +2262 11305.00 5.53333414736093658348e+01 4.35422892579199860563e+00 8.02228898029680692616e+00 4.41097499655393576745e+00 6.94181577846318997871e+00 4.33178678683842033337e+00 6.77588934880279047945e+00 4.63092010264605757897e+00 7.71561547582106843635e+00 +2263 11310.00 5.53596240665831302863e+01 4.35607535242608001624e+00 8.02667739511788624895e+00 4.41339203408960134567e+00 6.94509608782124754356e+00 4.33377767169429173322e+00 6.77908882483528874019e+00 4.63390048621108174842e+00 7.71997086487388450848e+00 +2264 11315.00 5.53859066595568876323e+01 4.35792126293828463446e+00 8.03106618128471261286e+00 4.41580969618673613297e+00 6.94837639707566445679e+00 4.33576837343722321094e+00 6.78228797850278120052e+00 4.63688232149649337543e+00 7.72432669993543097320e+00 +2265 11320.00 5.54121892525306520838e+01 4.35976665756698533727e+00 8.03545533850709148282e+00 4.41822798276242600934e+00 6.95165670635080878981e+00 4.33775889189102326071e+00 6.78548681014728405358e+00 4.63986560797372504794e+00 7.72868297936818304805e+00 +2266 11325.00 5.54384718455044165353e+01 4.36161153651946520426e+00 8.03984486652592167388e+00 4.42064689374412544964e+00 6.95493701565704736112e+00 4.33974922688986808339e+00 6.78868532017299841641e+00 4.64285034515566330526e+00 7.73303970156570485983e+00 +2267 11330.00 5.54647544384781738813e+01 4.36345590004446215460e+00 8.04423476507173518257e+00 4.42306642905928093512e+00 6.95821732481818688854e+00 4.34173937827829448111e+00 6.79188350892193604125e+00 4.64583653252410400114e+00 7.73739686488010303123e+00 +2268 11335.00 5.54910370314519312274e+01 4.36529974835962164548e+00 8.04862503385433747383e+00 4.42548658862498367483e+00 6.96149763410369626371e+00 4.34372934586974945859e+00 6.79508137678793655567e+00 4.64882416954011290500e+00 7.74175446770494080084e+00 +2269 11340.00 5.55173196244256956788e+01 4.36714308170331921843e+00 8.05301567262498707578e+00 4.42790737236868370275e+00 6.96477794338920652706e+00 4.34571912950877248250e+00 6.79827892413374268443e+00 4.65181325567512260477e+00 7.74611250841305931658e+00 +2270 11345.00 5.55436022173994530249e+01 4.36898590029319944250e+00 8.05740668108313151663e+00 4.43032878021783194100e+00 6.96805825251925270436e+00 4.34770872901917293518e+00 6.80147615135318872603e+00 4.65480379042128955547e+00 7.75047098536692491422e+00 +2271 11350.00 5.55698848103732174764e+01 4.37082820437800378954e+00 8.06179805898002754816e+00 4.43275081206878862616e+00 6.97133856191876866149e+00 4.34969814424548761878e+00 6.80467305879865591578e+00 4.65779577321895565944e+00 7.75482989693937607711e+00 +2272 11355.00 5.55961674033469819278e+01 4.37266999419610336020e+00 8.06618980602548063530e+00 4.43517346784900290402e+00 6.97461887117318468654e+00 4.35168737501153035652e+00 6.80786964686397855218e+00 4.66078920352918313341e+00 7.75918924151361455444e+00 +2273 11360.00 5.56224499963207321684e+01 4.37451126997550865383e+00 8.07058192195002455094e+00 4.43759674747556331909e+00 6.97789918041723744579e+00 4.35367642116183528600e+00 6.81106591593262766793e+00 4.66378408080267892188e+00 7.76354901746247350047e+00 +2274 11365.00 5.56487325892945037253e+01 4.37635203195459698833e+00 8.07497440647383157852e+00 4.44002065084482921975e+00 6.98117948970274682097e+00 4.35566528252021711864e+00 6.81426186637771547083e+00 4.66678040450050701793e+00 7.76790922313806397881e+00 +2275 11370.00 5.56750151822682681768e+01 4.37819228038210361831e+00 8.07936725932743193823e+00 4.44244517788425152816e+00 6.98445979895716373420e+00 4.35765395894157592238e+00 6.81745749858270944088e+00 4.66977817404227923959e+00 7.77226985692358240954e+00 +2276 11375.00 5.57012977752420255229e+01 4.38003201549640408530e+00 8.08376048023099436080e+00 4.44487032847982455053e+00 6.98774010819085322765e+00 4.35964245024972196774e+00 6.82065281295180891874e+00 4.67277738886833304832e+00 7.77663091719186638784e+00 +2277 11380.00 5.57275803682157828689e+01 4.38187123752550800049e+00 8.08815406890469112966e+00 4.44729610255900009719e+00 6.99102041750745417659e+00 4.36163075628919560955e+00 6.82384780983739691607e+00 4.67577804841900768196e+00 7.78099240231575350890e+00 +2278 11385.00 5.57538629610859004515e+01 4.38370994673888336735e+00 8.09254802507905246500e+00 4.44972250000777247436e+00 6.99430072668932290014e+00 4.36361887690453276178e+00 6.82704248966440019331e+00 4.67878015211391318218e+00 7.78535431064735128359e+00 +2279 11390.00 5.57801455540596649030e+01 4.38554814336453890888e+00 8.09694234846388383176e+00 4.45214952073286607259e+00 6.99758103596446634498e+00 4.36560681191954547131e+00 6.83023685278519554487e+00 4.68178369938302552100e+00 7.78971664055949553074e+00 +2280 11395.00 5.58064281470334293545e+01 4.38738582765121432061e+00 8.10133703880008582132e+00 4.45457716464100261788e+00 7.00086134342589438972e+00 4.36759456117877142844e+00 6.83343089962471417209e+00 4.68478868961485961364e+00 7.79407939043538533497e+00 +2281 11400.00 5.58327107400071867005e+01 4.38922299984764752168e+00 8.10573209579746034592e+00 4.45700543161817730464e+00 7.00414165406910171896e+00 4.36958212452674921167e+00 6.83662463054570057608e+00 4.68779512223939143212e+00 7.79844255861676494135e+00 +2282 11405.00 5.58589933329809511520e+01 4.39105966021294058521e+00 8.11012751918654295480e+00 4.45943432156075036943e+00 7.00742196377953874276e+00 4.37156950180801651129e+00 6.83981804596271558694e+00 4.69080299665550448651e+00 7.80280614349719936484e+00 +2283 11410.00 5.58852759259547156034e+01 4.39289580898546905274e+00 8.11452330867713556017e+00 4.46186383435471523029e+00 7.01070227302359150201e+00 4.37355669285675041635e+00 6.84301114624886874793e+00 4.69381231227244288817e+00 7.80717014341843373870e+00 +2284 11415.00 5.59115585189284729495e+01 4.39473144643469737503e+00 8.11891946398941044549e+00 4.46429396991715954357e+00 7.01398258213291114771e+00 4.37554369751748595263e+00 6.84620393182908770768e+00 4.69682306846836095104e+00 7.81153455676366448301e+00 +2285 11420.00 5.59378411119022374010e+01 4.39656657278863782778e+00 8.12331598485390138364e+00 4.46672472811335019571e+00 7.01726289154278859428e+00 4.37753051563476525132e+00 6.84939640307647934492e+00 4.69983526463177891941e+00 7.81589938188500088501e+00 +2286 11425.00 5.59641237048759947470e+01 4.39840118832711990393e+00 8.12771287098041206320e+00 4.46915610883964475875e+00 7.02054320081793470365e+00 4.37951714705312333820e+00 6.85258856039524477666e+00 4.70284890015121170848e+00 7.82026461715528142804e+00 +2287 11430.00 5.59904062978497591985e+01 4.40023529329888241080e+00 8.13211012209947625706e+00 4.47158811197167693763e+00 7.02382351030036211625e+00 4.38150359161709967992e+00 6.85578040417922096594e+00 4.70586397440481540855e+00 7.82463026093697600061e+00 +2288 11435.00 5.60166888908235094391e+01 4.40206888795266504388e+00 8.13650773792089943015e+00 4.47402073740580252803e+00 7.02710381931640437614e+00 4.38348984918159878532e+00 6.85897193485333200869e+00 4.70888048677074344539e+00 7.82899631160292130971e+00 +2289 11440.00 5.60429714837972809960e+01 4.40390197255793225395e+00 8.14090571816485031320e+00 4.47645398501765523491e+00 7.03038412860191463949e+00 4.38547591957042826039e+00 6.86216315279068922450e+00 4.71189843660642093681e+00 7.83336276749486071225e+00 +2290 11445.00 5.60692540767710454475e+01 4.40573454738415204446e+00 8.14530406255149763695e+00 4.47888785468286254599e+00 7.03366443783560235659e+00 4.38746180263849261394e+00 6.86535405840585610804e+00 4.71491782327963626642e+00 7.83772962698563269157e+00 +2291 11450.00 5.60955366697447956881e+01 4.40756661266969906876e+00 8.14970277080101013212e+00 4.48132234627705905439e+00 7.03694474712111173176e+00 4.38944749824069369026e+00 6.86854465211339437758e+00 4.71793864613745483894e+00 7.84209688843770535982e+00 +2292 11455.00 5.61218192627185601395e+01 4.40939816869440281977e+00 8.15410184262319504001e+00 4.48375745968623728999e+00 7.04022505635479944885e+00 4.39143300622156917967e+00 6.87173493431750870286e+00 4.72096090454766326161e+00 7.84646455022391631218e+00 +2293 11460.00 5.61481018556923316964e+01 4.41122921571736625879e+00 8.15850127774858435714e+00 4.48619319477566413923e+00 7.04350536564030971221e+00 4.39341832643602359099e+00 6.87492490541202894150e+00 4.72398459784696100883e+00 7.85083261068600979371e+00 +2294 11465.00 5.61743844486660819371e+01 4.41305975399769234713e+00 8.16290107587662205901e+00 4.48862955142096975436e+00 7.04678567488436158328e+00 4.39540345871823046053e+00 6.87811456581152480538e+00 4.72700972537204489043e+00 7.85520106819682162325e+00 +2295 11470.00 5.62006670416398463885e+01 4.41488978382557650804e+00 8.16730123673783658944e+00 4.49106652947705775603e+00 7.05006598416987184663e+00 4.39738840292309163260e+00 6.88130391593055623645e+00 4.73003628645961260446e+00 7.85956992111882524199e+00 +2296 11475.00 5.62269496346136108400e+01 4.41671930544975488431e+00 8.17170176004203696607e+00 4.49350412882992333863e+00 7.05334629340355956373e+00 4.39937315889514479750e+00 6.88449295617332523989e+00 4.73306428045672511473e+00 7.86393916780412549627e+00 +2297 11480.00 5.62532322275873681861e+01 4.41854831913969636759e+00 8.17610264550939014327e+00 4.49594234932410508065e+00 7.05662660268906982708e+00 4.40135772649965950620e+00 6.88768168696475857615e+00 4.73609370666898854552e+00 7.86830880661519849184e+00 +2298 11485.00 5.62795148205611326375e+01 4.42037682517523045078e+00 8.18050389283933832019e+00 4.49838119084559640015e+00 7.05990691192275843235e+00 4.40334210558117167267e+00 6.89087010869869320828e+00 4.73912456442273466450e+00 7.87267883591451322900e+00 +2299 11490.00 5.63057974135348899836e+01 4.42220482383618929134e+00 8.18490550177277853550e+00 4.50082065323893676378e+00 7.06318722120826691935e+00 4.40532629599458580572e+00 6.89405822181042093888e+00 4.74215685304429879210e+00 7.87704925405417633044e+00 +2300 11495.00 5.63320800065086544350e+01 4.42403231537130903206e+00 8.18930747199878972253e+00 4.50326073635902890402e+00 7.06646753047304798656e+00 4.40731029758443870747e+00 6.89724602670414199679e+00 4.74519057181855696825e+00 7.88142005939666390191e+00 +2301 11500.00 5.63583625994824117811e+01 4.42585930008115102652e+00 8.19370980324790032512e+00 4.50570144008150297310e+00 7.06974783970673748001e+00 4.40929411021599726439e+00 6.90043352380478580699e+00 4.74822572007184451337e+00 7.88579125031480998587e+00 +2302 11505.00 5.63846451924561762326e+01 4.42768577822481557149e+00 8.19811249522992291361e+00 4.50814276425089754952e+00 7.07302814987319461437e+00 4.41127773373380183131e+00 6.90362071351654993379e+00 4.75126229709939895685e+00 7.89016282513999378523e+00 +2303 11510.00 5.64109277854299264732e+01 4.42951175009249897840e+00 8.20251554766501911331e+00 4.51058470871175298811e+00 7.07630845824666288024e+00 4.41326116799275336433e+00 6.90680759627472706796e+00 4.75430030217573484919e+00 7.89453478224505023064e+00 +2304 11515.00 5.64372103784036980301e+01 4.43133721596403251652e+00 8.20691896024226963391e+00 4.51302727332933262261e+00 7.07958876751144483563e+00 4.41524441284775370775e+00 6.90999417249388159235e+00 4.75733973461682335682e+00 7.89890711999245365149e+00 +2305 11520.00 5.64634929713774624815e+01 4.43316217610888063660e+00 8.21132273270257506681e+00 4.51547045793781265388e+00 7.08286907674513255273e+00 4.41722746816407241255e+00 6.91318044259894293191e+00 4.76038059368681132355e+00 7.90327983673431333500e+00 +2306 11525.00 5.64897755642475729587e+01 4.43498663080687549609e+00 8.21572686473500546356e+00 4.51791426239209581439e+00 7.08614938604100608188e+00 4.41921033379660777030e+00 6.91636640700447369312e+00 4.76342287868093983150e+00 7.90765293081236908534e+00 +2307 11530.00 5.65160581572213445156e+01 4.43681058034821251823e+00 8.22013135607009814976e+00 4.52035868654708572478e+00 7.08942969532651545705e+00 4.42119300958990280037e+00 6.91955206613540241278e+00 4.76646658885299423503e+00 7.91202640060982353987e+00 +2308 11535.00 5.65423407501951018617e+01 4.43863402502308623809e+00 8.22453620641765859034e+00 4.52280373022658999105e+00 7.09271000451874833459e+00 4.42317549540922083651e+00 6.92273742042702089350e+00 4.76951172347748730829e+00 7.91640024445805590148e+00 +2309 11540.00 5.65686233431688592077e+01 4.44045696510096110643e+00 8.22894141547712720808e+00 4.52524939327514896803e+00 7.09599031384571254932e+00 4.42515779110946638752e+00 6.92592247030425856025e+00 4.77255828182893182543e+00 7.92077446072990110082e+00 +2310 11545.00 5.65949059361426236592e+01 4.44227940088239936500e+00 8.23334698295830769155e+00 4.52769567553730034604e+00 7.09927062304830958084e+00 4.42713989655590456351e+00 6.92910721618167801950e+00 4.77560626314038483287e+00 7.92514904777746931330e+00 +2311 11550.00 5.66211885291163810052e+01 4.44410133264722961854e+00 8.23775290859173558999e+00 4.53014257684722032593e+00 7.10255093233381806783e+00 4.42912181161380402727e+00 6.93229165850493700418e+00 4.77865566668635821657e+00 7.92952400395286804979e+00 +2312 11555.00 5.66474711220901454567e+01 4.44592276069601144428e+00 8.24215919206648628403e+00 4.53259009703908066768e+00 7.10583124155714340731e+00 4.43110353612770158094e+00 6.93547579768859723259e+00 4.78170649169990902294e+00 7.93389932760820393298e+00 +2313 11560.00 5.66737537150639099082e+01 4.44774368529821106932e+00 8.24656583310273205711e+00 4.53503823593669164183e+00 7.10911155086338020226e+00 4.43308506996286411095e+00 6.93865963417831821403e+00 4.78475873743482260636e+00 7.93827501711631278170e+00 +2314 11565.00 5.67000363080376601488e+01 4.44956410676475222488e+00 8.25097283141027482145e+00 4.53748699338459360320e+00 7.11239186010743384969e+00 4.43506641298456116829e+00 6.94184316838866077859e+00 4.78781240311379008290e+00 7.94265107080857646338e+00 +2315 11570.00 5.67263189010114317057e+01 4.45138402537546529203e+00 8.25538018668855499982e+00 4.53993636920659682232e+00 7.11567216938257907088e+00 4.43704756505805342215e+00 6.94502640076528621194e+00 4.79086748796986938714e+00 7.94702748704746309016e+00 +2316 11575.00 5.67526014939851961572e+01 4.45320344143090895983e+00 8.25978789866810991782e+00 4.54238636322650979338e+00 7.11895247861626767616e+00 4.43902852603824982225e+00 6.94820933174348009942e+00 4.79392399123611578915e+00 7.95140426419545054415e+00 +2317 11580.00 5.67788840869589463978e+01 4.45502235523164280551e+00 8.26419596702764813756e+00 4.54483697525778129744e+00 7.12223278790177793951e+00 4.44100929579041281414e+00 6.95139196174817541873e+00 4.79698191212485802737e+00 7.95578140059427685316e+00 +2318 11585.00 5.68051666799327108492e+01 4.45684076705749721015e+00 8.26860439149770520828e+00 4.54728820514494724847e+00 7.12551309716655723037e+00 4.44298987417981017245e+00 6.95457429122502635011e+00 4.80004124986915314821e+00 7.96015889460641723474e+00 +2319 11590.00 5.68314492729064753007e+01 4.45865867721939412860e+00 8.27301317177772155276e+00 4.54974005269109049721e+00 7.12879340638988256984e+00 4.44497026107171055997e+00 6.95775632060932558431e+00 4.80310200365023565183e+00 7.96453674458397919977e+00 +2320 11595.00 5.68577318658802397522e+01 4.46047608600752987229e+00 8.27742230757750441228e+00 4.55219251772002220235e+00 7.13207371360257091908e+00 4.44695045633137731045e+00 6.96093805033636670032e+00 4.80616417270116347282e+00 7.96891494887907025912e+00 +2321 11600.00 5.68840144588539899928e+01 4.46229299373282728425e+00 8.28183179859649243326e+00 4.55464560004518759229e+00 7.13535402494017301223e+00 4.44893045982407997485e+00 6.96411948084144061255e+00 4.80922775620317377587e+00 7.97329350585416207764e+00 +2322 11605.00 5.69102970518277544443e+01 4.46410940068548178772e+00 8.28624164455485612280e+00 4.55709929949039604935e+00 7.13863433419458903728e+00 4.45091027141508277509e+00 6.96730061257020327758e+00 4.81229275335822759274e+00 7.97767241384063563459e+00 +2323 11610.00 5.69365796448015260012e+01 4.46592530717641444937e+00 8.29065184515203590365e+00 4.55955361584836893485e+00 7.14191464345937010449e+00 4.45288989096965437398e+00 6.97048144596831242836e+00 4.81535916334756386448e+00 7.98205167121132408425e+00 +2324 11615.00 5.69628622377752762418e+01 4.46774071350618573462e+00 8.29506240009783724076e+00 4.56200854894291296660e+00 7.14519495268269544397e+00 4.45486931835306165794e+00 6.97366198147105897931e+00 4.81842698537314362284e+00 7.98643127631833849023e+00 +2325 11620.00 5.69891448307490406933e+01 4.46955561997535344432e+00 8.29947330909170055691e+00 4.56446409857711188351e+00 7.14847526195784066516e+00 4.45684855344093389107e+00 6.97684221952410066336e+00 4.82149621859547750091e+00 7.99081122750342309757e+00 +2326 11625.00 5.70154274237228122502e+01 4.47137002688447893206e+00 8.30388457183306627485e+00 4.56692026455404853635e+00 7.15175557122262173237e+00 4.45882759609853707161e+00 6.98002216056272839495e+00 4.82456686219579999886e+00 7.99519152312904601843e+00 +2327 11630.00 5.70417100166965624908e+01 4.47318393455484564214e+00 8.30829618804210667804e+00 4.56937704667680311132e+00 7.15503588060140849336e+00 4.46080644619114075056e+00 6.98320180504296406099e+00 4.82763891533461997341e+00 7.99957216154731742819e+00 +2328 11635.00 5.70679926096703269423e+01 4.47499734328701581632e+00 8.31270815741826041290e+00 4.57183444475882172497e+00 7.15831618971072725088e+00 4.46278510359437419197e+00 6.98638115341046272988e+00 4.83071237719317281289e+00 8.00395314111034750226e+00 +2329 11640.00 5.70942752026440842883e+01 4.47681025339191052126e+00 8.31712047967133294435e+00 4.57429245858246069645e+00 7.16159649900660078004e+00 4.46476356818386754810e+00 6.98956020611088124639e+00 4.83378724691123817792e+00 8.00833446015987604483e+00 +2330 11645.00 5.71205577956178487398e+01 4.47862266518045437635e+00 8.32153315449040142937e+00 4.57675108796116347776e+00 7.16487680829210926703e+00 4.46674183980415939743e+00 6.99273896358987556710e+00 4.83686352364932403702e+00 8.01271611705837827344e+00 +2331 11650.00 5.71468403885916131912e+01 4.48043457895320518247e+00 8.32594618159563637505e+00 4.57921033266692134589e+00 7.16815711752579787230e+00 4.46871991836197413051e+00 6.99591742629310253676e+00 4.83994120655757331662e+00 8.01709811015795992262e+00 +2332 11655.00 5.71731229815653705373e+01 4.48224599504181320242e+00 8.33035956067611138565e+00 4.58167019252354457137e+00 7.17143742678021478554e+00 4.47069780370184943763e+00 6.99909559467658226595e+00 4.84302029477576745364e+00 8.02148043782109354538e+00 +2333 11660.00 5.71994055745391278833e+01 4.48405691374683978978e+00 8.33477329145199874461e+00 4.58413066729265850086e+00 7.17471773606572416071e+00 4.47267549570978051321e+00 7.00227346918597159942e+00 4.84610078743332017837e+00 8.02586309837915834464e+00 +2334 11665.00 5.72256881674092596768e+01 4.48586733538957016520e+00 8.33918737361237560890e+00 4.58659175677734509691e+00 7.17799804533050611610e+00 4.47465299426139662131e+00 7.00545105028765568989e+00 4.84918268368037441718e+00 8.03024609019462687343e+00 +2335 11670.00 5.72519707603830099174e+01 4.48767726028092894808e+00 8.34360180686704566710e+00 4.58905346077032216812e+00 7.18127835459528629514e+00 4.47663029922196731292e+00 7.00862833840656040962e+00 4.85226598262562003328e+00 8.03462941161960841896e+00 +2336 11675.00 5.72782533533567743689e+01 4.48948668873183809325e+00 8.34801659091545111835e+00 4.59151577904357921511e+00 7.18455866383933994257e+00 4.47860741046712096392e+00 7.01180533401943684169e+00 4.85535068339847164509e+00 8.03901306100620871575e+00 +2337 11680.00 5.73045359463305388203e+01 4.49129562107394875170e+00 8.35243172545703060905e+00 4.59397871138983671102e+00 7.18783897309375685580e+00 4.48058432788285276871e+00 7.01498203757193916630e+00 4.85843678510761467493e+00 8.04339703670653705103e+00 +2338 11685.00 5.73308185393042961664e+01 4.49310405762854880862e+00 8.35684721020159138050e+00 4.59644225758108060376e+00 7.19111928231708041892e+00 4.48256105132406545977e+00 7.01815844950972600458e+00 4.86152428688246818211e+00 8.04778133707270093566e+00 +2339 11690.00 5.73571011322780535124e+01 4.49491199869619606488e+00 8.36126304483820881330e+00 4.59890641739966721246e+00 7.19439959163368225603e+00 4.48453758068711927365e+00 7.02133457030954399869e+00 4.86461318781098750463e+00 8.05216596045680788052e+00 +2340 11695.00 5.73833837252518179639e+01 4.49671944461890671363e+00 8.36567922908705874363e+00 4.60137119061758692595e+00 7.19767990088809916926e+00 4.48651391583727932044e+00 7.02451040040668672759e+00 4.86770348700186250568e+00 8.05655090521096717282e+00 +2341 11700.00 5.74096663182255824154e+01 4.49852639569723944390e+00 8.37009576262684262815e+00 4.60383657701719073430e+00 7.20096021015288112466e+00 4.48849005666054079455e+00 7.02768594027790260981e+00 4.87079518355341445357e+00 8.06093616968728454708e+00 +2342 11705.00 5.74359489111993397614e+01 4.50033285228357460284e+00 8.37451264517773985574e+00 4.60630257636010664868e+00 7.20424051939693210755e+00 4.49046600302217147060e+00 7.03086119036884671374e+00 4.87388827655360490354e+00 8.06532175224823255633e+00 +2343 11710.00 5.74622315041731042129e+01 4.50213881467846910311e+00 8.37892987642882047794e+00 4.60876918842868743553e+00 7.20752082865134990897e+00 4.49244175480816565482e+00 7.03403615114590685664e+00 4.87698276508002592777e+00 8.06970765122519217982e+00 +2344 11715.00 5.74885140971468544535e+01 4.50394428321357587208e+00 8.38334745608989351240e+00 4.61123641298456021786e+00 7.21080113793685928414e+00 4.49441731190451676525e+00 7.03721082305473455420e+00 4.88007864822063819332e+00 8.07409386499099923640e+00 +2345 11720.00 5.75147966901206260104e+01 4.50574925822054606073e+00 8.38776538385003611609e+00 4.61370424979971360813e+00 7.21408144720164123953e+00 4.49639267417649435288e+00 7.04038520657208355402e+00 4.88317592505303732509e+00 8.07848039188739619476e+00 +2346 11725.00 5.75410792830943904619e+01 4.50755374003103082003e+00 8.39218365940868515906e+00 4.61617269862540879899e+00 7.21736175643532984481e+00 4.49836784151009005939e+00 7.04355930215397130212e+00 4.88627459464445390580e+00 8.08286723026649056578e+00 +2347 11730.00 5.75673618760681407025e+01 4.50935772895595121668e+00 8.39660228247565143533e+00 4.61864175922327291346e+00 7.22064206572083833180e+00 4.50034281379130174372e+00 7.04673311026678117486e+00 4.88937465606211763003e+00 8.08725437849075667884e+00 +2348 11735.00 5.75936444690419051540e+01 4.51116122534768937413e+00 8.40102125275037359131e+00 4.62111143136529456399e+00 7.22392237495452693707e+00 4.50231759089575955812e+00 7.04990663136653772369e+00 4.89247610835253166073e+00 8.09164183489157551321e+00 +2349 11740.00 5.76199270620156767109e+01 4.51296422951716724725e+00 8.40544056991156374181e+00 4.62358171480273405507e+00 7.22720268425040046623e+00 4.50429217269909187848e+00 7.05307986591962166045e+00 4.89557895058292924517e+00 8.09602959785214437716e+00 +2350 11745.00 5.76462096549894269515e+01 4.51476674180640102918e+00 8.40986023367939061757e+00 4.62605260929722028607e+00 7.23048299345299749774e+00 4.50626655909765982955e+00 7.05625281439241902603e+00 4.89868318179980910543e+00 8.10041766570384069723e+00 +2351 11750.00 5.76724922479631914030e+01 4.51656876254704009455e+00 8.41428024375329819406e+00 4.62852411458964851931e+00 7.23376330275923340452e+00 4.50824074996709356355e+00 7.05942547724095170736e+00 4.90178880103931202683e+00 8.10480603680914235554e+00 +2352 11755.00 5.76987748409369558544e+01 4.51837029208110063649e+00 8.41870059981199503341e+00 4.63099623043128083566e+00 7.23704361201365209411e+00 4.51021474519338916309e+00 7.06259785495232961239e+00 4.90489580735830443814e+00 8.10919470950978826806e+00 +2353 11760.00 5.77250574339107132005e+01 4.52017133072987054021e+00 8.42312130156529015323e+00 4.63346895658374346993e+00 7.24032392127843227314e+00 4.51218854465217589222e+00 7.06576994797221136224e+00 4.90800419977219615220e+00 8.11358368216825276420e+00 +2354 11765.00 5.77513400268844705465e+01 4.52197187882500095668e+00 8.42754234871262219997e+00 4.63594229278793257265e+00 7.24360423050175672444e+00 4.51416214823981221116e+00 7.06894175676698033328e+00 4.91111397731712706616e+00 8.11797295314700662061e+00 +2355 11770.00 5.77776226198582349980e+01 4.52377193672923461065e+00 8.43196374094307010694e+00 4.63841623879511111284e+00 7.24688453979762936541e+00 4.51613555583193093668e+00 7.07211328182374909801e+00 4.91422513901887114685e+00 8.12236252077743081657e+00 +2356 11775.00 5.78039052128320065549e+01 4.52557150475349523333e+00 8.43638547796643756271e+00 4.64089079432544693304e+00 7.25016484904168301284e+00 4.51810876732489052898e+00 7.07528452359853954334e+00 4.91733768389283909528e+00 8.12675238343236117089e+00 +2357 11780.00 5.78301878058057567955e+01 4.52737058325016139548e+00 8.44080755947180350063e+00 4.64336595915093131026e+00 7.25344515830646496823e+00 4.52008178259432114032e+00 7.07845548256810008780e+00 4.92045161095443983612e+00 8.13114253946390519445e+00 +2358 11785.00 5.78564703987795212470e+01 4.52916917255088424810e+00 8.44522998514824152494e+00 4.64584173298136793306e+00 7.25672546756088099329e+00 4.52205460152621707692e+00 7.08162615919881321958e+00 4.92356691919835665061e+00 8.13553298722417217448e+00 +2359 11790.00 5.78827529917532856985e+01 4.53096727300804591465e+00 8.44965275470556065329e+00 4.64831811556801977048e+00 7.26000577683602621448e+00 4.52402722401693857535e+00 7.08479655395706497956e+00 4.92668360765036439375e+00 8.13992372505490280332e+00 +2360 11795.00 5.79090355847270430445e+01 4.53276488496365814740e+00 8.45407586783283448995e+00 4.65079510664141970722e+00 7.26328608609044312772e+00 4.52599964994211667602e+00 7.08796666730924052047e+00 4.92980167529478041644e+00 8.14431475132893645252e+00 +2361 11800.00 5.79353181777008074960e+01 4.53456200874937387368e+00 8.45849932422950701039e+00 4.65327270594246389379e+00 7.26656639534486004095e+00 4.52797187919810895096e+00 7.09113649975281568061e+00 4.93292112111592295776e+00 8.14870606438801381444e+00 +2362 11805.00 5.79616007705709179731e+01 4.53635864471757344063e+00 8.46292312359501508467e+00 4.65575091319132372547e+00 7.26984670463036852794e+00 4.52994391168127474856e+00 7.09430605173344819292e+00 4.93604194411883856475e+00 8.15309766260497426060e+00 +2363 11810.00 5.79878833635446895300e+01 4.53815479319990533469e+00 8.46734726560807615670e+00 4.65822972811853208697e+00 7.27312701389515048334e+00 4.53191574726724510924e+00 7.09747532373824707719e+00 4.93916414327748132251e+00 8.15748954431119521757e+00 +2364 11815.00 5.80141659565184539815e+01 4.53995045455911583332e+00 8.47177174998885718082e+00 4.66070915044425682083e+00 7.27640732314956650839e+00 4.53388738585238026957e+00 7.10064431623360281520e+00 4.94228771756580442798e+00 8.16188170787951605689e+00 +2365 11820.00 5.80404485494922042221e+01 4.54174562913721935331e+00 8.47619657640570878243e+00 4.66318917989903258814e+00 7.27968763240398430980e+00 4.53585882732267275941e+00 7.10381302969625938459e+00 4.94541266596812612022e+00 8.16627415166203896035e+00 +2366 11825.00 5.80667311424659686736e+01 4.54354031727623119963e+00 8.48062174457879613954e+00 4.66566981620302900780e+00 7.28296794166876537702e+00 4.53783007157448281532e+00 7.10698146461333024604e+00 4.94853898743767217638e+00 8.17066687401087499154e+00 +2367 11830.00 5.80930137354397402305e+01 4.54533451931816578906e+00 8.48504725418683669602e+00 4.66815105907641392236e+00 7.28624825093354555605e+00 4.53980111849380563172e+00 7.11014962144083728646e+00 4.95166668093803430395e+00 8.17505987328849670348e+00 +2368 11835.00 5.81192963284134904711e+01 4.54712823563613266487e+00 8.48947310491890405615e+00 4.67063290823935606255e+00 7.28952856019832662327e+00 4.54177196797699966879e+00 7.11331750067625634415e+00 4.95479574543279888132e+00 8.17945314785737664920e+00 +2369 11840.00 5.81455789213872549226e+01 4.54892146655141793588e+00 8.49389929649517227972e+00 4.67311536340166355785e+00 7.29280886948383599844e+00 4.54374261992042427494e+00 7.11648510277561019421e+00 4.95792617986483108439e+00 8.18384669605925729741e+00 +2370 11845.00 5.81718615143610122686e+01 4.55071421244749352297e+00 8.49832582858398311032e+00 4.67559842427313920865e+00 7.29608917871752460371e+00 4.54571307421007375638e+00 7.11965242823637201042e+00 4.96105798319771817972e+00 8.18824051625660942477e+00 +2371 11850.00 5.81981441073347767201e+01 4.55250647364564464681e+00 8.50275270088478229980e+00 4.67808209057395263386e+00 7.29936948797194151695e+00 4.54768333074230746149e+00 7.12281947751456367968e+00 4.96419115435359614708e+00 8.19263460680154409488e+00 +2372 11855.00 5.82244267003085340662e+01 4.55429825051898173882e+00 8.50717991309701027092e+00 4.68056636200354692079e+00 7.30264979723672347234e+00 4.54965338941348473867e+00 7.12598625110766370483e+00 4.96732569227532305689e+00 8.19702896607726039235e+00 +2373 11860.00 5.82507092932822985176e+01 4.55608954340951921580e+00 8.51160746492010744646e+00 4.68305123828208813563e+00 7.30593010653259611331e+00 4.55162325010959989413e+00 7.12915274949241783986e+00 4.97046159589540081924e+00 8.20142359241513574375e+00 +2374 11865.00 5.82769918862560558637e+01 4.55788035268000069067e+00 8.51603535603278771760e+00 4.68553671909865432355e+00 7.30921041575592145279e+00 4.55359291272701227626e+00 7.13231897313521301385e+00 4.97359886413596008481e+00 8.20581848417764625481e+00 +2375 11870.00 5.83032744792298203151e+01 4.55967067868280562237e+00 8.52046358613448973074e+00 4.68802280416305183763e+00 7.31249072502070163182e+00 4.55556237717244449925e+00 7.13548492252316002293e+00 4.97673749592949832277e+00 8.21021363973762241528e+00 +2376 11875.00 5.83295570722035847666e+01 4.56146052178067673566e+00 8.52489215492465746138e+00 4.69050949316435694669e+00 7.31577103427511854505e+00 4.55753164333189175750e+00 7.13865059814337410415e+00 4.97987749017742320490e+00 8.21460905744717706511e+00 +2377 11880.00 5.83558396651773350072e+01 4.56324988231563022367e+00 8.52932106209236806649e+00 4.69299678582273838146e+00 7.31905134353989961227e+00 4.55950071111207844154e+00 7.14181600047260278785e+00 4.98301884580186449369e+00 8.21900473565841593881e+00 +2378 11885.00 5.83821222581510994587e+01 4.56503876066077385332e+00 8.53375030731633010816e+00 4.69548468181691003309e+00 7.32233165279431741368e+00 4.56146958039899708126e+00 7.14498112998759360437e+00 4.98616156169386748331e+00 8.22340067274417485521e+00 +2379 11890.00 5.84084048511248710156e+01 4.56682715717885034934e+00 8.53817989030635260406e+00 4.69797318085667559018e+00 7.32561196205909670454e+00 4.56343825108900702503e+00 7.14814598718582416836e+00 4.98930563677556282443e+00 8.22779686705656487788e+00 +2380 11895.00 5.84346874440986212562e+01 4.56861507221187590488e+00 8.54260981075150915842e+00 4.70046228261038478990e+00 7.32889227132387865993e+00 4.56540672309919770555e+00 7.15131057252331636676e+00 4.99245106992762721632e+00 8.23219331695805323079e+00 +2381 11900.00 5.84609700370723857077e+01 4.57040250613295651050e+00 8.54704006834088403366e+00 4.70295198678784309720e+00 7.33217258056793053100e+00 4.56737499630519749871e+00 7.15447488650790930365e+00 4.99559786004110328861e+00 8.23659002081111424332e+00 +2382 11905.00 5.84872526300461572646e+01 4.57218945930483844364e+00 8.55147066276354550496e+00 4.70544229305739936109e+00 7.33545288982234833242e+00 4.56934307061373079506e+00 7.15763892960598813175e+00 4.99874600599666862877e+00 8.24098697697822224484e+00 +2383 11910.00 5.85135352230199075052e+01 4.57397593207989849873e+00 8.55590159371893932416e+00 4.70793320112885815831e+00 7.33873319907676613383e+00 4.57131094593152020877e+00 7.16080270231502868938e+00 5.00189550669572646768e+00 8.24538418383220772512e+00 +2384 11915.00 5.85398178159936719567e+01 4.57576192483124710719e+00 8.56033286089614264824e+00 4.71042471067056744971e+00 7.34201350831045296275e+00 4.57327862215492420006e+00 7.16396620511178117141e+00 5.00504636099822874939e+00 8.24978163971482203465e+00 +2385 11920.00 5.85661004089674293027e+01 4.57754743792162432925e+00 8.56476446398422908146e+00 4.71291682136124112645e+00 7.34529381759596322610e+00 4.57524609918030389366e+00 7.16712943848335815034e+00 5.00819856776412031252e+00 8.25417934299889388683e+00 +2386 11925.00 5.85923830019411937542e+01 4.57933247171377644236e+00 8.56919640267227933350e+00 4.71540953287959307971e+00 7.34857412686074429331e+00 4.57721337691437835105e+00 7.17029240291687219866e+00 5.01135212588444645121e+00 8.25857729204689938740e+00 +2387 11930.00 5.86186655949149511002e+01 4.58111702658081032524e+00 8.57362867665973382714e+00 4.71790284491469780193e+00 7.35185443611516209472e+00 4.57918045525351047331e+00 7.17345509888907173490e+00 5.01450703419842458430e+00 8.26297548522130931303e+00 +2388 11935.00 5.86449481878887155517e+01 4.58290110287510454867e+00 8.57806128562530112447e+00 4.72039675713490591846e+00 7.35513474535921307762e+00 4.58114733410442198647e+00 7.17661752688706933156e+00 5.01766329156600487948e+00 8.26737392089496125891e+00 +2389 11940.00 5.86712307808624657923e+01 4.58468470098013280989e+00 8.58249422927879201950e+00 4.72289126919820123618e+00 7.35841505463435918699e+00 4.58311401336347135071e+00 7.17977968740834260331e+00 5.02082089683677246228e+00 8.27177259743032422534e+00 +2390 11945.00 5.86975133737325975858e+01 4.58646782125863694546e+00 8.58692750728855358489e+00 4.72538638079366180023e+00 7.36169536393023182796e+00 4.58508049293738384478e+00 7.18294158092963908047e+00 5.02397984886031068186e+00 8.27617151318987254172e+00 +2391 11950.00 5.87237959667063549318e+01 4.58825046407336145649e+00 8.59136111936438950920e+00 4.72788209158963468326e+00 7.36497567318465051756e+00 4.58704677274324268410e+00 7.18610320794843637771e+00 5.02714014648620644010e+00 8.28057066653607876106e+00 +2392 11955.00 5.87500785596801193833e+01 4.59003262979741233352e+00 8.59579506518501545997e+00 4.73037840123374309087e+00 7.36825598242870150045e+00 4.58901285265668157365e+00 7.18926456894148291354e+00 5.03030178852258735844e+00 8.28497005584177692583e+00 +2393 11960.00 5.87763611526538838348e+01 4.59181431880389911981e+00 8.60022934444986830727e+00 4.73287530941505973914e+00 7.37153629167275514789e+00 4.59097873260515232374e+00 7.19242566439589126048e+00 5.03346477381903678605e+00 8.28936967946944136543e+00 +2394 11965.00 5.88026437456276411808e+01 4.59359553146592958228e+00 8.60466395684802698440e+00 4.73537281577084456785e+00 7.37481660094790125726e+00 4.59294441248501073005e+00 7.19558649479877576738e+00 5.03662910119404738651e+00 8.29376953579190612231e+00 +2395 11970.00 5.88289263386013985269e+01 4.59537626814624555749e+00 8.60909890205820538256e+00 4.73787091997981058000e+00 7.37809691020231728231e+00 4.59490989220298295947e+00 7.19874706064761049618e+00 5.03979476946611448795e+00 8.29816962317164374952e+00 +2396 11975.00 5.88552089315751629783e+01 4.59715652922831985450e+00 8.61353417979020896666e+00 4.74036962167921238631e+00 7.38137721946709834953e+00 4.59687517166579073802e+00 7.20190736242951068391e+00 5.04296177745372631307e+00 8.30256993998149006586e+00 +2397 11980.00 5.88814915245489203244e+01 4.59893631508525935203e+00 8.61796978971238658573e+00 4.74286892054776298977e+00 7.38465752875260772470e+00 4.59884025078015756804e+00 7.20506740062122297275e+00 5.04613012397537818998e+00 8.30697048458391762438e+00 +2398 11985.00 5.89077741175226847758e+01 4.60071562607980943937e+00 8.62240573153454015198e+00 4.74536881622271966563e+00 7.38793783801738968009e+00 4.60080512944244190976e+00 7.20822717573059179585e+00 5.04929980780810616636e+00 8.31137125536212550969e+00 +2399 11990.00 5.89340567104964492273e+01 4.60249446260580441503e+00 8.62684200492502029078e+00 4.74786930835170384313e+00 7.39121814724071324321e+00 4.60276980758009646166e+00 7.21138668822399697689e+00 5.05247082778076617160e+00 8.31577225066822656174e+00 +2400 11995.00 5.89603393034702136788e+01 4.60427282502598789193e+00 8.63127860959363424342e+00 4.75037039660306170674e+00 7.39449845653658677236e+00 4.60473428507911375362e+00 7.21454593861964621482e+00 5.05564318268075751917e+00 8.32017346889577602553e+00 +2401 12000.00 5.89866218964439710248e+01 4.60605071372383179096e+00 8.63571554522945561416e+00 4.75287208060368815410e+00 7.39777876577027448946e+00 4.60669856186694648414e+00 7.21770492738392466237e+00 5.05881687128511714491e+00 8.32457490839689207007e+00 +2402 12005.00 5.90129044894177354763e+01 4.60782812907244387901e+00 8.64015281150083502837e+00 4.75537436001156610388e+00 7.40105907500396398291e+00 4.60866263783995488978e+00 7.22086365501430726965e+00 5.06199189238124436230e+00 8.32897656754440163240e+00 +2403 12010.00 5.90391870823914928224e+01 4.60960507144493103482e+00 8.64459040811757795097e+00 4.75787723446395283133e+00 7.40433938432056493184e+00 4.61062651291522396235e+00 7.22402212199790838554e+00 5.06516824476690530332e+00 8.33337844473187416838e+00 +2404 12015.00 5.90654696753652501684e+01 4.61138154122476695562e+00 8.64902833476876153895e+00 4.76038070358774056956e+00 7.40761969357498184507e+00 4.61259018699947898057e+00 7.22718032884256711412e+00 5.06834592718804266553e+00 8.33778053831141718888e+00 +2405 12020.00 5.90917522683390146199e+01 4.61315753880578593993e+00 8.65346659113309613076e+00 4.76288476705127816757e+00 7.41090000281903549251e+00 4.61455365999943989408e+00 7.23033827601467127266e+00 5.07152493844242080456e+00 8.34218284666622977852e+00 +2406 12025.00 5.91180348613127790713e+01 4.61493306455073160066e+00 8.65790517691002570189e+00 4.76538942446072955050e+00 7.41418031207345240574e+00 4.61651693182183198161e+00 7.23349596402205818890e+00 5.07470527728634657194e+00 8.34658536815878449033e+00 +2407 12030.00 5.91443174542865364174e+01 4.61670811884307585871e+00 8.66234409177826059079e+00 4.76789467546371525941e+00 7.41746062131750516500e+00 4.61848000239410705348e+00 7.23665339335184398806e+00 5.07788694246576444158e+00 8.35098810118264722746e+00 +2408 12035.00 5.91706000472602937634e+01 4.61848270206629063495e+00 8.66678333543724477295e+00 4.77040051968712841557e+00 7.42074093062374195995e+00 4.62044287161262268171e+00 7.23981056449113857809e+00 5.08106993274734630717e+00 8.35539104411065025602e+00 +2409 12040.00 5.91968826402340653203e+01 4.62025681460384785026e+00 8.67122290757605362899e+00 4.77290695676822451787e+00 7.42402123986779560738e+00 4.62240553939446741083e+00 7.24296747793741868549e+00 5.08425424687703664262e+00 8.35979419531563294754e+00 +2410 12045.00 5.92231652332078155609e+01 4.62203045683921853737e+00 8.67566280787339927372e+00 4.77541398632353164544e+00 7.42730154915330409438e+00 4.62436800564636207866e+00 7.24612413417780043545e+00 5.08743988360077814548e+00 8.36419755317042934450e+00 +2411 12050.00 5.92494478261815800124e+01 4.62380362916623877112e+00 8.68010303601836064047e+00 4.77792160799030707352e+00 7.43058185840772189579e+00 4.62633027029576027189e+00 7.24928053370975611358e+00 5.09062684166451617784e+00 8.36860111604787704209e+00 +2412 12055.00 5.92757304191553515693e+01 4.62557633194765305262e+00 8.68454359172074141782e+00 4.78042982138507888124e+00 7.43386216770359453676e+00 4.62829233323901956254e+00 7.25243667702040362144e+00 5.09381511979346424113e+00 8.37300488235190520925e+00 +2413 12060.00 5.93020130121291018099e+01 4.62734856557729568038e+00 8.68898447464888867842e+00 4.78293862612437514770e+00 7.43714247692691987623e+00 4.63025419440359176093e+00 7.25559256459685197882e+00 5.09700471672320265526e+00 8.37740885043461780413e+00 +2414 12065.00 5.93282956051028662614e+01 4.62912033044900361745e+00 8.69342568449188313195e+00 4.78544802182472484020e+00 7.44042278618133590129e+00 4.63221585368583710363e+00 7.25874819694694295436e+00 5.10019563116858254403e+00 8.38181301868958250623e+00 +2415 12070.00 5.93545781980766307129e+01 4.63089162694624878469e+00 8.69786722094916520120e+00 4.78795800811301752731e+00 7.44370309540466035259e+00 4.63417731102356800221e+00 7.26190357455778823237e+00 5.10338786186518600374e+00 8.38621738550000017653e+00 +2416 12075.00 5.93808607910503880589e+01 4.63266245544213806085e+00 8.70230908370980849043e+00 4.79046858460578572902e+00 7.44698340466944230798e+00 4.63613856631314646961e+00 7.26505869791650482625e+00 5.10658140751749645148e+00 8.39062194923870485752e+00 +2417 12080.00 5.94071433840241525104e+01 4.63443281635123582873e+00 8.70675127245252866715e+00 4.79297975089882655197e+00 7.45026371395495079497e+00 4.63809961948202253978e+00 7.26821356751019997944e+00 5.10977626684036945193e+00 8.39502670829926067597e+00 +2418 12085.00 5.94334259768942629876e+01 4.63620271003628481310e+00 8.71119378687676793049e+00 4.79549150660866896345e+00 7.45354402319900444240e+00 4.64006047042655556112e+00 7.27136818385708316725e+00 5.11297243853828842219e+00 8.39943166105450522707e+00 +2419 12090.00 5.94597085698680345445e+01 4.63797213690148613097e+00 8.71563662666123484257e+00 4.79800385135184104257e+00 7.45682433246378462144e+00 4.64202111909492298736e+00 7.27452254741317094755e+00 5.11616992130537884265e+00 8.40383680588763937180e+00 +2420 12095.00 5.94859911628417989959e+01 4.63974109731994666106e+00 8.72007979150537515523e+00 4.80051678473450760265e+00 7.46010464173893073081e+00 4.64398156537312267744e+00 7.27767665870703606146e+00 5.11936871383576352912e+00 8.40824214119222190789e+00 +2421 12100.00 5.95122737558155492366e+01 4.64150959170623078620e+00 8.72452328108789920691e+00 4.80303030634210426086e+00 7.46338495098298260189e+00 4.64594180919896881932e+00 7.28083051820506188534e+00 5.12256881483393033960e+00 8.41264766535146257809e+00 +2422 12105.00 5.95385563487893136880e+01 4.64327762043344716147e+00 8.72896709509788415460e+00 4.80554441579115909633e+00 7.46666526023739951512e+00 4.64790185047918402717e+00 7.28398412642545167728e+00 5.12577022297327289380e+00 8.41705337674855158525e+00 +2423 12110.00 5.95648389417630781395e+01 4.64504518389543008539e+00 8.73341123323477042106e+00 4.80805911267747276838e+00 7.46994556952290889029e+00 4.64986168913085595733e+00 7.28713748383459147817e+00 5.12897293692718925229e+00 8.42145927376669689579e+00 +2424 12115.00 5.95911215347368354855e+01 4.64681228248601652098e+00 8.73785569518763693964e+00 4.81057439659684416000e+00 7.47322587876696164955e+00 4.65182132508143553196e+00 7.29029059094032394484e+00 5.13217695538979956638e+00 8.42586535480982234958e+00 +2425 12120.00 5.96174041277105999370e+01 4.64857891660940492073e+00 8.74230048063519404877e+00 4.81309026714507304234e+00 7.47650618802137767460e+00 4.65378075823764714158e+00 7.29344344824012402739e+00 5.13538227702413507814e+00 8.43027161825076909452e+00 +2426 12125.00 5.96436867206843572831e+01 4.65034508663870393974e+00 8.74674558926652068180e+00 4.81560672390759769712e+00 7.47978649728615962999e+00 4.65573998853730319780e+00 7.29659605621073925619e+00 5.13858890049322702964e+00 8.43467806248309237560e+00 +2427 12130.00 5.96699693136581217345e+01 4.65211079296774965286e+00 8.75119102078105903786e+00 4.81812376649058027311e+00 7.48306680653021238925e+00 4.65769901587676660171e+00 7.29974841537037555383e+00 5.14179682446010755115e+00 8.43908468590036520141e+00 +2428 12135.00 5.96962519066318790806e+01 4.65387603601110644291e+00 8.75563677484715441324e+00 4.82064139446909312170e+00 7.48634711580535672226e+00 4.65965784019384976489e+00 7.30290052618541896123e+00 5.14500604757744284257e+00 8.44349148689614814600e+00 +2429 12140.00 5.97225344996056435320e+01 4.65564081615224445443e+00 8.76008285118497731503e+00 4.82315960742857274823e+00 7.48962742505977541185e+00 4.66161646139527707788e+00 7.30605238916370947067e+00 5.14821656849789910382e+00 8.44789846385364207038e+00 +2430 12145.00 5.97488170925793937727e+01 4.65740513378500065045e+00 8.76452924945251687916e+00 4.82567840496481892387e+00 7.49290773431419054873e+00 4.66357487941886361682e+00 7.30920400480272380861e+00 5.15142838586378015719e+00 8.45230561517677436711e+00 +2431 12150.00 5.97750996855531653296e+01 4.65916898931357525981e+00 8.76897596935957146513e+00 4.82819778664253895784e+00 7.49618804358933754628e+00 4.66553309416096784190e+00 7.31235537358957454757e+00 5.15464149832775220261e+00 8.45671293924874767356e+00 +2432 12155.00 5.98013822785269297810e+01 4.66093238312143931523e+00 8.77342301058485674048e+00 4.83071775205753350946e+00 7.49946835285411683714e+00 4.66749110556977164777e+00 7.31550649601137603639e+00 5.15785590451138986623e+00 8.46112043446312434014e+00 +2433 12160.00 5.98276648715006800217e+01 4.66269531561279304555e+00 8.77787037282781490433e+00 4.83323830078487315376e+00 7.50274866210853463855e+00 4.66944891355199409588e+00 7.31865737256560144885e+00 5.16107160304663104000e+00 8.46552809923419502525e+00 +2434 12165.00 5.98539474644744444731e+01 4.66445778718147252562e+00 8.78231805576715451878e+00 4.83575943238926697632e+00 7.50602897137331570576e+00 4.67140651803509054929e+00 7.32180800374973106415e+00 5.16428859257577954622e+00 8.46993593193480087677e+00 +2435 12170.00 5.98802300574482160300e+01 4.66621979823167620793e+00 8.78676605909195806987e+00 4.83828114645615059430e+00 7.50930928065882508093e+00 4.67336391894651015377e+00 7.32495839005087656659e+00 5.16750687171004496889e+00 8.47434393097923077676e+00 +2436 12175.00 5.99065126504219733761e+01 4.66798134916760698587e+00 8.79121438249130093823e+00 4.84080344253986805114e+00 7.51258958988214864405e+00 4.67532111619297552352e+00 7.32810853196651557084e+00 5.17072643907100371052e+00 8.47875209476105062834e+00 +2437 12180.00 5.99327952433957307221e+01 4.66974244037273500396e+00 8.79566302566462354662e+00 4.84332632022585407583e+00 7.51586989916765801922e+00 4.67727810971230262282e+00 7.33125842999412391521e+00 5.17394729325949942478e+00 8.48316042168418604774e+00 +2438 12185.00 5.99590778363694951736e+01 4.67150307226162286867e+00 8.80011198829063623350e+00 4.84584977907881775394e+00 7.51915020844280324042e+00 4.67923489942157910804e+00 7.33440808461045001820e+00 5.17716943288674436019e+00 8.48756891013183967232e+00 +2439 12190.00 5.99853604293432596251e+01 4.67326324522810843121e+00 8.80456127006878652708e+00 4.84837381865310224072e+00 7.52243051767649273387e+00 4.68119148525862094345e+00 7.33755749632333476029e+00 5.18039285656394810076e+00 8.49197755852867075532e+00 +2440 12195.00 6.00116430223170098657e+01 4.67502295966602687827e+00 8.80901087067778121309e+00 4.85089843851341484537e+00 7.52571082693091053528e+00 4.68314786713014896691e+00 7.34070666561989160215e+00 5.18361756288159281070e+00 8.49638636525787305231e+00 +2441 12200.00 6.00379256152907743171e+01 4.67678221598994259267e+00 8.81346078981706426703e+00 4.85342363822446376531e+00 7.52899113615423321022e+00 4.68510404496361676507e+00 7.34385559298723400445e+00 5.18684355041979738843e+00 8.50079532873374432711e+00 +2442 12205.00 6.00642082082645458740e+01 4.67854101459368987292e+00 8.81791102717570929315e+00 4.85594941735095542157e+00 7.53227144547083593551e+00 4.68706001869683852590e+00 7.34700427892283691733e+00 5.19007081778977230613e+00 8.50520444734984870649e+00 +2443 12210.00 6.00904908012382961147e+01 4.68029935587110745843e+00 8.82236158243243373533e+00 4.85847577543687236812e+00 7.53555175474598026852e+00 4.68901578824690190572e+00 7.35015272392417973180e+00 5.19329936356127053187e+00 8.50961371952047329614e+00 +2444 12215.00 6.01167733942120605661e+01 4.68205724024712122144e+00 8.82681245528667624001e+00 4.86100271202619182986e+00 7.53883206397966976198e+00 4.69097135355162109249e+00 7.35330092846800909001e+00 5.19652918631441096409e+00 8.51402314365991763623e+00 +2445 12220.00 6.01430559871858250176e+01 4.68381466811556723684e+00 8.83126364541714892198e+00 4.86353022669398615818e+00 7.54211237333772821501e+00 4.69292671451772225311e+00 7.35644889306216676061e+00 5.19976028461894834720e+00 8.51843271816173874811e+00 +2446 12225.00 6.01693385800559426002e+01 4.68557163987028246765e+00 8.83571515253365902254e+00 4.86605831898423524251e+00 7.54539268249886774242e+00 4.69488187108301779915e+00 7.35959661818340027395e+00 5.20299265704463476112e+00 8.52284244142987290616e+00 +2447 12230.00 6.01956211730297070517e+01 4.68732815592583040853e+00 8.84016697631491865650e+00 4.86858698843055304195e+00 7.54867299176364792146e+00 4.69683682317495954095e+00 7.36274410433955317501e+00 5.20622630216122495028e+00 8.52725231188897048185e+00 +2448 12235.00 6.02219037660034572923e+01 4.68908421667604535799e+00 8.84461911645000498083e+00 4.87111623457692211048e+00 7.55195330099733652673e+00 4.69879157072099928882e+00 7.36589135200737032960e+00 5.20946121851774623934e+00 8.53166232793259915468e+00 +2449 12240.00 6.02481863589772288492e+01 4.69083982254585851734e+00 8.84907157262799337616e+00 4.87364605698804709277e+00 7.55523361029320916771e+00 4.70074611364858796492e+00 7.36903836169469528272e+00 5.21269740467358744240e+00 8.53607248798541462520e+00 +2450 12245.00 6.02744689519509933007e+01 4.69259497391873914296e+00 8.85352434454832604160e+00 4.87617645518718134667e+00 7.55851391952689954934e+00 4.70270045189554153353e+00 7.37218513386791229891e+00 5.21593485917777321959e+00 8.54048279046171110451e+00 +2451 12250.00 6.03007515449247435413e+01 4.69434967121961577163e+00 8.85797743188971864470e+00 4.87870742870793883128e+00 7.56179422880204477053e+00 4.70465458536858349703e+00 7.37533166903486314681e+00 5.21917358057933267190e+00 8.54489323375504916669e+00 +2452 12255.00 6.03270341378985079928e+01 4.69610391484232536641e+00 8.86243083435160627914e+00 4.88123897710466359001e+00 7.56507453808755325753e+00 4.70660851401589219734e+00 7.37847796768265951073e+00 5.22241356739619533300e+00 8.54930381631081637295e+00 +2453 12260.00 6.03533167308722795497e+01 4.69785770519106726795e+00 8.86688455162306787827e+00 4.88377109990060720435e+00 7.56835484732124186280e+00 4.70856223776491944477e+00 7.38162403030877811716e+00 5.22565481818775356970e+00 8.55371453651221003156e+00 +2454 12265.00 6.03795993238460297903e+01 4.69961104268040497089e+00 8.87133858340354919392e+00 4.88630379661902214394e+00 7.57163515660675123797e+00 4.71051575653275200750e+00 7.38476985737960145428e+00 5.22889733147194046836e+00 8.55812539279425443794e+00 +2455 12270.00 6.04058819168197942417e+01 4.70136392772490285807e+00 8.87579292936139374603e+00 4.88883706680388652188e+00 7.57491546584044073143e+00 4.71246907026757000381e+00 7.38791544941333899743e+00 5.23214110577705415750e+00 8.56253638357124025049e+00 +2456 12275.00 6.04321645097935515878e+01 4.70311636071839789253e+00 8.88024758920641055226e+00 4.89137090997845280782e+00 7.57819577517776998832e+00 4.71442217888645931367e+00 7.39106080687637412296e+00 5.23538613962102594712e+00 8.56694750726782494610e+00 +2457 12280.00 6.04584471027673160393e+01 4.70486834208581683470e+00 8.88470256262767144051e+00 4.89390532566597080688e+00 7.58147608435963871187e+00 4.71637508232723856594e+00 7.39420593026618000465e+00 5.23863243152179158812e+00 8.57135876228793591736e+00 +2458 12285.00 6.04847296957410804907e+01 4.70661987221063071729e+00 8.88915784932462393897e+00 4.89644031338969298872e+00 7.58475639365551135285e+00 4.71832778051735513003e+00 7.39735082008023780986e+00 5.24187997998692001289e+00 8.57577014706659568333e+00 +2459 12290.00 6.05110122887148378368e+01 4.70837095152813400745e+00 8.89361344896560979123e+00 4.89897587267287093482e+00 7.58803670288920084630e+00 4.72028027339462674661e+00 7.40049547679529506894e+00 5.24512878352398015380e+00 8.58018166002845816820e+00 +2460 12295.00 6.05372948816885951828e+01 4.71012158043216189185e+00 8.89806936126043979129e+00 4.90151200303875445030e+00 7.59131701217470933329e+00 4.72223256088650433782e+00 7.40363990089846346621e+00 5.24837884064054271960e+00 8.58459329958781935943e+00 +2461 12300.00 6.05635774746623596343e+01 4.71187175934764201912e+00 8.90252558589818931978e+00 4.90404870398986769686e+00 7.59459732140839793857e+00 4.72418464292043793762e+00 7.40678409288721972814e+00 5.25163014981308329254e+00 8.58900506416933318121e+00 +2462 12305.00 6.05898600676361240858e+01 4.71362148865804542197e+00 8.90698212256793375730e+00 4.90658597504946225598e+00 7.59787763069390731374e+00 4.72613651944460766430e+00 7.40992805324867909178e+00 5.25488270955953495900e+00 8.59341695219765711045e+00 +2463 12310.00 6.06161426606098743264e+01 4.71537076880902983333e+00 8.91143897096911707933e+00 4.90912381572006051300e+00 7.60115793992759591902e+00 4.72808819036573790839e+00 7.41307178245958642293e+00 5.25813651834601269996e+00 8.59782896210781011348e+00 +2464 12315.00 6.06424252535836387779e+01 4.71711960018406628592e+00 8.91589613079081111380e+00 4.91166222553527909156e+00 7.60443824921310440601e+00 4.73003965564237205399e+00 7.41621528100705873499e+00 5.26139157466972218202e+00 8.60224109232444966722e+00 +2465 12320.00 6.06687078465574103348e+01 4.71886798320808242835e+00 8.92035360172210012308e+00 4.91420120397691206904e+00 7.60771855844679301129e+00 4.73199091520196013505e+00 7.41935854938856920171e+00 5.26464787699677305710e+00 8.60665334127223502492e+00 +2466 12325.00 6.06949904395311605754e+01 4.72061591828527937764e+00 8.92481138346241742454e+00 4.91674075056821102692e+00 7.61099886773230327464e+00 4.73394196897195307372e+00 7.42250158808086890616e+00 5.26790542380364534836e+00 8.61106570738618337657e+00 +2467 12330.00 6.07212730325049250268e+01 4.72236340584058478242e+00 8.92926947570084728056e+00 4.91928086480133508474e+00 7.61427917695562683775e+00 4.73589281689016861066e+00 7.42564439757106864448e+00 5.27116421355645048408e+00 8.61547818909095219908e+00 +2468 12335.00 6.07475556254786965837e+01 4.72411044626783471756e+00 8.93372787812646151906e+00 4.92182154617880751601e+00 7.61755948623077383530e+00 4.73784345889441915745e+00 7.42878697834628276553e+00 5.27442424472130344526e+00 8.61989078483193083002e+00 +2469 12340.00 6.07738382184524468244e+01 4.72585704000232098565e+00 8.93818659043870056280e+00 4.92436279421351486008e+00 7.62083979546446066422e+00 4.73979389491215918895e+00 7.43192933089362295362e+00 5.27768551575395150621e+00 8.62430349302340459872e+00 +2470 12345.00 6.08001208114262112758e+01 4.72760318743788054974e+00 8.94264561233701193999e+00 4.92690460838725208248e+00 7.62412010474997092757e+00 4.74174412488120111675e+00 7.43507145570020266945e+00 5.28094802512050787158e+00 8.62871631213148937434e+00 +2471 12350.00 6.08264034043999686219e+01 4.72934888898907512811e+00 8.94710494351046570216e+00 4.92944698820254334493e+00 7.62740041400438695263e+00 4.74369414874972594731e+00 7.43821335324277121970e+00 5.28421177125599417224e+00 8.63312924056011610219e+00 +2472 12355.00 6.08526859973737330733e+01 4.73109414508083414574e+00 8.95156458365850582481e+00 4.93198993314118272480e+00 7.63068072326916890802e+00 4.74564396643482044880e+00 7.44135502399807613472e+00 5.28747675260579441670e+00 8.63754227676503205657e+00 +2473 12360.00 6.08789685903474904194e+01 4.73283895612772287365e+00 8.95602453245984619912e+00 4.93453344270569349561e+00 7.63396103255467739501e+00 4.74759357788466562766e+00 7.44449646846359414099e+00 5.29074296761529261346e+00 8.64195541918125620384e+00 +2474 12365.00 6.09052511833212548709e+01 4.73458332253393887612e+00 8.96048478962429051364e+00 4.93707751637787062293e+00 7.63724134178836600029e+00 4.74954298302671151788e+00 7.44763768711607454520e+00 5.29401041470914712761e+00 8.64636866625417432886e+00 +2475 12370.00 6.09315337761913795589e+01 4.73632724472441246633e+00 8.96494535484091592537e+00 4.93962215364987322630e+00 7.64052165105314795568e+00 4.75149218180913734955e+00 7.45077868044262991987e+00 5.29727909233274107947e+00 8.65078201641880895068e+00 +2476 12375.00 6.09578163691651440104e+01 4.73807072310334298493e+00 8.96940622779879959126e+00 4.94216735400349715945e+00 7.64380196031792813471e+00 4.75344117415939315663e+00 7.45391944890964364134e+00 5.30054899890036779198e+00 8.65519546812054230145e+00 +2477 12380.00 6.09840989621388942510e+01 4.73981375809565808055e+00 8.97386740821811024205e+00 4.94471311692053472342e+00 7.64708226960343750989e+00 4.75538996001529756796e+00 7.45705999301459510065e+00 5.30382013283668474202e+00 8.65960901979439512388e+00 +2478 12385.00 6.10103815551126587025e+01 4.74155635011592213601e+00 8.97832889576719495039e+00 4.94725944187241939431e+00 7.65036257885785442312e+00 4.75733853932502714912e+00 7.46020031324459509392e+00 5.30709249256634851832e+00 8.66402266989612002135e+00 +2479 12390.00 6.10366641480864231539e+01 4.74329849956833449198e+00 8.98279069015586451030e+00 4.94980632835130940350e+00 7.65364288809154391657e+00 4.75928691202639964075e+00 7.46334041005566550808e+00 5.31036607648292058315e+00 8.66843641687109744964e+00 +2480 12395.00 6.10629467410601805000e+01 4.74504020687782457344e+00 8.98725279107319074967e+00 4.95235377581827229676e+00 7.65692319735632498379e+00 4.76123507803649914649e+00 7.46648028394528129326e+00 5.31364088301106107792e+00 8.67285025917508001214e+00 +2481 12400.00 6.10892293340339378460e+01 4.74678147246932002901e+00 8.99171519821861942035e+00 4.95490178374473622114e+00 7.66020350662110516282e+00 4.76318303732423764529e+00 7.46961993537982849034e+00 5.31691691054433235308e+00 8.67726419523271985668e+00 +2482 12405.00 6.11155119270077022975e+01 4.74852229674701931117e+00 8.99617791129158383967e+00 4.95745035162286207253e+00 7.66348381587552207606e+00 4.76513078980669924078e+00 7.47275936485678293764e+00 5.32019415747629942359e+00 8.68167822352049967094e+00 +2483 12410.00 6.11417945199814738544e+01 4.75026268012548857911e+00 9.00064092999153153585e+00 4.95999947890335324274e+00 7.66676412517139560521e+00 4.76707833542169900909e+00 7.47589857283216563388e+00 5.32347262221089057022e+00 8.68609234248379813437e+00 +2484 12415.00 6.11680771129552240950e+01 4.75200262304001874725e+00 9.00510425401790293165e+00 4.96254916505763965517e+00 7.67004443439472005650e+00 4.76902567412778299882e+00 7.47903755980345508192e+00 5.32675230313130576576e+00 8.69050655056800280818e+00 +2485 12420.00 6.11943597059289885465e+01 4.75374212589481093261e+00 9.00956788305977163134e+00 4.96509940954678885561e+00 7.67332474369059358565e+00 4.77097280585240035577e+00 7.48217632624739703573e+00 5.33003319862074587121e+00 8.69492084622886629575e+00 +2486 12425.00 6.12206422989027529979e+01 4.75548118910442774165e+00 9.01403181681658338675e+00 4.96765021183186483711e+00 7.67660505294501049889e+00 4.77291973053336704425e+00 7.48531487262001249405e+00 5.33331530706240908302e+00 8.69933522793249558447e+00 +2487 12430.00 6.12469248918765103440e+01 4.75721981308343444539e+00 9.01849605498777684431e+00 4.97020157138430107580e+00 7.67988536216833495018e+00 4.77486644811886318251e+00 7.48845319941877995973e+00 5.33659862681876973056e+00 8.70374969412427823556e+00 +2488 12435.00 6.12732074848502747955e+01 4.75895799826712195824e+00 9.02296059727278887408e+00 4.97275348765480096347e+00 7.68316567143311690558e+00 4.77681295854670384671e+00 7.49159130709971954332e+00 5.33988315627302778665e+00 8.70816424328069516037e+00 +2489 12440.00 6.12994900778240321415e+01 4.76069574505969228539e+00 9.02742544337106878061e+00 4.97530596009406433922e+00 7.68644598074971785451e+00 4.77875926175470411295e+00 7.49472919616030797130e+00 5.34316889378765313978e+00 8.71257887383675999615e+00 +2490 12445.00 6.13257726707977894876e+01 4.76243305389643545311e+00 9.03189059298205165760e+00 4.97785898816315963700e+00 7.68972628995231488602e+00 4.78070535768067905735e+00 7.49786686705656268970e+00 5.34645583771475685353e+00 8.71699358427931692006e+00 +2491 12450.00 6.13520552637715539390e+01 4.76416992517118931261e+00 9.03635604580518148055e+00 4.98041257130242520645e+00 7.69300659921709506506e+00 4.78265124628317295219e+00 7.50100432027560248827e+00 5.34974398641680881639e+00 8.72140837305375171695e+00 +2492 12455.00 6.13783378567453183905e+01 4.76590635931924389013e+00 9.04082180153989867222e+00 4.98296670898329097099e+00 7.69628690851296859421e+00 4.78459692748963760778e+00 7.50414155627344303667e+00 5.35303333825628158138e+00 8.72582323862617492694e+00 +2493 12460.00 6.14046204497190757365e+01 4.76764235675516534485e+00 9.04528785988564187903e+00 4.98552140062536874865e+00 7.69956721778811292722e+00 4.78654240123788810024e+00 7.50727857554756106140e+00 5.35632389156455346324e+00 8.73023817947306746134e+00 +2494 12465.00 6.14309030426928330826e+01 4.76937791790388132540e+00 9.04975422054185507648e+00 4.98807664570008935101e+00 7.70284752702180330886e+00 4.78848766748646692548e+00 7.51041537854361429538e+00 5.35961564468337137157e+00 8.73465319405017481813e+00 +2495 12470.00 6.14571856356666046395e+01 4.77111304316959117244e+00 9.05422088321834195312e+00 4.99063244362706193158e+00 7.70612783629694675369e+00 4.79043272616282589382e+00 7.51355196574871886384e+00 5.36290859596484104088e+00 8.73906828083397790863e+00 +2496 12475.00 6.14834682286403548801e+01 4.77284773298758668858e+00 9.05868784760418144231e+00 4.99318879385698988216e+00 7.70940814550990793919e+00 4.79237757722550838935e+00 7.51668833762925281405e+00 5.36620274372997752010e+00 8.74348343830095053875e+00 +2497 12480.00 6.15097508216141193316e+01 4.77458198778279729879e+00 9.06315511339881219044e+00 4.99574569583021066421e+00 7.71268845478505404856e+00 4.79432222060196711055e+00 7.51982449465160485147e+00 5.36949808631016178850e+00 8.74789866490684353550e+00 +2498 12485.00 6.15360334145878908885e+01 4.77631580794905730158e+00 9.06762268032240470461e+00 4.99830314898706440374e+00 7.71596876403947007361e+00 4.79626665624038039937e+00 7.52296043729252339460e+00 5.37279462202640978319e+00 8.75231395913849397061e+00 +2499 12490.00 6.15623160075616411291e+01 4.77804919393202620626e+00 9.07209054806403791815e+00 5.00086115274716025425e+00 7.71924907330425114083e+00 4.79821088408892748589e+00 7.52609616600802766584e+00 5.37609234921009981889e+00 8.75672931946201948961e+00 +2500 12495.00 6.15885986005354055806e+01 4.77978214613589980075e+00 9.07655871633351196692e+00 5.00341970655083656538e+00 7.72252938256903220804e+00 4.80015490408542522260e+00 7.52923168128523023768e+00 5.37939126616152041294e+00 8.76114474435389567475e+00 +2501 12500.00 6.16148811935091700320e+01 4.78151466499597344040e+00 9.08102718481990756061e+00 5.00597880982806930916e+00 7.72580969182345000945e+00 4.80209871618841521723e+00 7.53236698356978884306e+00 5.38269137120168572608e+00 8.76556023229059988466e+00 +2502 12505.00 6.16411637864829273781e+01 4.78324675091644557767e+00 9.08549595324339342994e+00 5.00853846200883268125e+00 7.72909000110895760827e+00 4.80404232032534928010e+00 7.53550207334881605448e+00 5.38599266264125020598e+00 8.76997578175897452013e+00 +2503 12510.00 6.16674463793530520661e+01 4.78497840433260890336e+00 9.08996502129304495554e+00 5.01109866251273405879e+00 7.73237031032191879376e+00 4.80598571644440841766e+00 7.53863695107833287068e+00 5.38929513875976962112e+00 8.77439139124585665286e+00 +2504 12515.00 6.16937289723268023067e+01 4.78670962564866275812e+00 9.09443438868903442085e+00 5.01365941076975207835e+00 7.73565061961779143473e+00 4.80792890449377008366e+00 7.54177161721435762587e+00 5.39259879787826079678e+00 8.77880705920700243894e+00 +2505 12520.00 6.17200115653005738636e+01 4.78844041531026398673e+00 9.09890405512043365377e+00 5.01622070619949411707e+00 7.73893092888257339013e+00 4.80987188442161528457e+00 7.54490607223363962675e+00 5.39590363827628394233e+00 8.78322278416033697113e+00 +2506 12525.00 6.17462941582743383151e+01 4.79017077371124955221e+00 9.10337402030742026682e+00 5.01878254821120783902e+00 7.74221123815771772314e+00 4.81181465616575909650e+00 7.54804031660256402603e+00 5.39920965824376075659e+00 8.78763856456161462916e+00 +2507 12530.00 6.17725767512480885557e+01 4.79190070128691036899e+00 9.10784428393906253518e+00 5.02134493622450239769e+00 7.74549154740177137057e+00 4.81375721967438074955e+00 7.55117435076678766848e+00 5.40251685606025233710e+00 8.79205439890803752689e+00 +2508 12535.00 6.17988593442218530072e+01 4.79363019846217408571e+00 9.11231484572516947651e+00 5.02390786966935287694e+00 7.74877185665618828381e+00 4.81569957489565858566e+00 7.55430817520305719626e+00 5.40582523001568127086e+00 8.79647028569681488364e+00 +2509 12540.00 6.18251419371956245641e+01 4.79535926564124181937e+00 9.11678570538591159789e+00 5.02647134794464278684e+00 7.75205216587951273510e+00 4.81764172177777449946e+00 7.55744179037776042662e+00 5.40913477837924094871e+00 8.80088622340442050529e+00 +2510 12545.00 6.18514245301693748047e+01 4.79708790326976952656e+00 9.12125686261036427993e+00 5.02903537045961623875e+00 7.75533247521684199199e+00 4.81958366026890683287e+00 7.56057519672618649764e+00 5.41244549940976416025e+00 8.80530221053842510059e+00 +2511 12550.00 6.18777071231431392562e+01 4.79881611175195743613e+00 9.12572831711869625337e+00 5.03159993662352089672e+00 7.75861278442980228931e+00 4.82152539030687066202e+00 7.56370839473545064635e+00 5.41575739138681022666e+00 8.80971824557530425182e+00 +2512 12555.00 6.19039897161168966022e+01 4.80054389151273319669e+00 9.13020006861034971735e+00 5.03416504584560176028e+00 7.76189309369458424470e+00 4.82346691183984610518e+00 7.56684138485120705298e+00 5.41907045256920838483e+00 8.81413432701226717825e+00 +2513 12560.00 6.19302723090906610537e+01 4.80227124297702534506e+00 9.13467211679512836042e+00 5.03673069753510560531e+00 7.76517340294900115794e+00 4.82540822482637477009e+00 7.56997416752947760443e+00 5.42238468121579142434e+00 8.81855045335687925956e+00 +2514 12565.00 6.19565549020644183997e+01 4.80399816656976152984e+00 9.13914446138284120025e+00 5.03929689108055089974e+00 7.76845371221378222515e+00 4.82734932919391113160e+00 7.57310674323664567709e+00 5.42570007556466116228e+00 8.82296662310634971504e+00 +2515 12570.00 6.19828374950381828512e+01 4.80572466269514286807e+00 9.14361710207292333052e+00 5.04186362589118264310e+00 7.77173402150965575430e+00 4.82929022491136006323e+00 7.57623911241836989205e+00 5.42901663387465038824e+00 8.82738283474751384006e+00 +2516 12575.00 6.20091200880119330918e+01 4.80745073179882353998e+00 9.14809003859591207686e+00 5.04443090136588523364e+00 7.77501433074334435958e+00 4.83123091191653930565e+00 7.57937127554103184934e+00 5.43233435439422329694e+00 8.83179908678794767241e+00 +2517 12580.00 6.20354026809857046487e+01 4.80917637429537059290e+00 9.15256327064088459622e+00 5.04699871688280943260e+00 7.77829463999776127281e+00 4.83317139014726304680e+00 7.58250323305028928189e+00 5.43565323535111932785e+00 8.83621537772485154960e+00 +2518 12585.00 6.20616852739594691002e+01 4.81090159058898070299e+00 9.15703679792800961934e+00 5.04956707186156794620e+00 7.78157494929363480196e+00 4.83511165957243882474e+00 7.58563498541252645424e+00 5.43897327498344296259e+00 8.84063170607616122254e+00 +2519 12590.00 6.20879678669332335517e+01 4.81262638112531337953e+00 9.16151062015672579264e+00 5.05213596566995093440e+00 7.78485525852732251906e+00 4.83705172011951933797e+00 7.58876653306303783353e+00 5.44229447151893186430e+00 8.84504807033908235780e+00 +2520 12595.00 6.21142504599069837923e+01 4.81435074631892945263e+00 9.16598473705756866536e+00 5.05470539770683924274e+00 7.78813556780246862843e+00 4.83899157175740946002e+00 7.59189787646820413158e+00 5.44561682318532280789e+00 8.84946446902118211142e+00 +2521 12600.00 6.21405330528807553492e+01 4.81607468658439685782e+00 9.17045914831961717084e+00 5.05727536736075045098e+00 7.79141587704652049950e+00 4.84093121441356277757e+00 7.59502901607368396952e+00 5.44894032819999374340e+00 8.85388090064039801064e+00 +2522 12605.00 6.21668156458545126952e+01 4.81779820234664057921e+00 9.17493385367339975289e+00 5.05984587400983976124e+00 7.79469618633202987468e+00 4.84287064805688594049e+00 7.59815995233549834609e+00 5.45226498479068144576e+00 8.85829736369393039297e+00 +2523 12610.00 6.21930982388282700413e+01 4.81952129404095241938e+00 9.17940885281836216336e+00 5.06241691704262386509e+00 7.79797649556571936813e+00 4.84480987262519580128e+00 7.60129068569930144150e+00 5.45559079115403200433e+00 8.86271385671008182783e+00 +2524 12615.00 6.22193808318020344927e+01 4.82124396207153527172e+00 9.18388414548503284607e+00 5.06498849583725885282e+00 7.80125680485122874330e+00 4.84674888807703396765e+00 7.60442121661075187689e+00 5.45891774551778485858e+00 8.86713037818605265272e+00 +2525 12620.00 6.22456634247757989442e+01 4.82296620686331500849e+00 9.18835973136249606341e+00 5.06756060977189637384e+00 7.80453711408491734858e+00 4.84868769435021729208e+00 7.60755154551550472064e+00 5.46224584605785778990e+00 8.87154692665014543707e+00 +2526 12625.00 6.22719460177495562903e+01 4.82468802885158520866e+00 9.19283561018127848286e+00 5.07013325822469163029e+00 7.80781742337042583557e+00 4.85062629139292500469e+00 7.61068167286958008333e+00 5.46557509100199023777e+00 8.87596350062029237904e+00 +2527 12630.00 6.22982286107233136363e+01 4.82640942845090936686e+00 9.19731178165118734569e+00 5.07270644055306973996e+00 7.81109773259375117505e+00 4.85256467917406375534e+00 7.61381159910827243209e+00 5.46890547852610087176e+00 8.88038009860405885831e+00 +2528 12635.00 6.23245112036970851932e+01 4.82813040607585008956e+00 9.20178824548202811684e+00 5.07528015615591243659e+00 7.81437804186889550806e+00 4.85450285762108624255e+00 7.61694132468760010113e+00 5.47223700682683311669e+00 8.88479671914011071010e+00 +2529 12640.00 6.23507937966708354338e+01 4.82985096216170184391e+00 9.20626500140433634556e+00 5.07785440438028334853e+00 7.81765835112331330947e+00 4.85644082670289911619e+00 7.62007085005321993521e+00 5.47556967408010830667e+00 8.88921336074638190894e+00 +2530 12645.00 6.23770763896445998853e+01 4.83157109712302812454e+00 9.21074204911754712555e+00 5.08042918460433412520e+00 7.82093866038809260033e+00 4.85837858636768249454e+00 7.62320017564042284874e+00 5.47890347848257075469e+00 8.89363002193043783450e+00 +2531 12650.00 6.24033589825147174679e+01 4.83329081137439331428e+00 9.21521938835220133512e+00 5.08300449618549166075e+00 7.82421896967360286368e+00 4.86031613655325145373e+00 7.62632930188450330888e+00 5.48223841821013913034e+00 8.89804670124130758779e+00 +2532 12655.00 6.24296415754884819194e+01 4.83501010535108921573e+00 9.21969701881809911015e+00 5.08558033850191026914e+00 7.82749927889692820315e+00 4.86225347721815026603e+00 7.62945822924148142619e+00 5.48557449142837061373e+00 8.90246339719692514336e+00 +2533 12660.00 6.24559241684622463708e+01 4.83672897947804258934e+00 9.22417494022504591555e+00 5.08815671090065002602e+00 7.83077958820316499811e+00 4.86419060832092142732e+00 7.63258695813628573745e+00 5.48891169630281350322e+00 8.90688010833595100735e+00 +2534 12665.00 6.24822067614359966115e+01 4.83844743415945632847e+00 9.22865315230357730059e+00 5.09073361273913782554e+00 7.83405989745758102316e+00 4.86612752979938267828e+00 7.63571548902493457689e+00 5.49225003100939002110e+00 8.91129683317631737793e+00 +2535 12670.00 6.25084893544097681684e+01 4.84016546983061957121e+00 9.23313165476349517746e+00 5.09331104338516382768e+00 7.83734020672236297855e+00 4.86806424161207385026e+00 7.63884382234272241163e+00 5.49558949370328875261e+00 8.91571357025668831398e+00 +2536 12675.00 6.25347719473835326198e+01 4.84188308691646174253e+00 9.23761044733533687179e+00 5.09588900218578899626e+00 7.84062051593532416405e+00 4.87000074371754099190e+00 7.64197195851457511395e+00 5.49893008253970183574e+00 8.92013031811572432161e+00 +2537 12680.00 6.25610545403572828604e+01 4.84360028583154811344e+00 9.24208952972890607214e+00 5.09846748849843844908e+00 7.84390082522083265104e+00 4.87193703605359829112e+00 7.64509989797578715098e+00 5.50227179566345370176e+00 8.92454707529208590699e+00 +2538 12685.00 6.25873371333310473119e+01 4.84531706699044129039e+00 9.24656890166436973288e+00 5.10104650167017492635e+00 7.84718110212888930732e+00 4.87387311857879090837e+00 7.64822764118237774511e+00 5.50561463121936789378e+00 8.92896384031407386317e+00 +2539 12690.00 6.26136197263048188688e+01 4.84703343082843396417e+00 9.25104856286190013748e+00 5.10362604103769523789e+00 7.85046144372966558933e+00 4.87580899125166133956e+00 7.65135518854891127916e+00 5.50895858737300070374e+00 8.93338061174107522788e+00 +2540 12695.00 6.26399023192785691094e+01 4.84874937776008962942e+00 9.25552851305203105881e+00 5.10620610596878954368e+00 7.85374175299444754472e+00 4.87774465401002643716e+00 7.65448254052104459788e+00 5.51230366223808676551e+00 8.93779738810138901783e+00 +2541 12700.00 6.26661849122523335609e+01 4.85046490819997355715e+00 9.26000875195492767489e+00 5.10878669578979049959e+00 7.85702206224886445796e+00 4.87968010682279107471e+00 7.65760969752370446173e+00 5.51564985395944962221e+00 8.94221416793367751552e+00 +2542 12705.00 6.26924675052260909069e+01 4.85218002259374081575e+00 9.26448927928039900337e+00 5.11136780985812499978e+00 7.86030237150328137119e+00 4.88161534962777299285e+00 7.66073665998182118386e+00 5.51899716066118806168e+00 8.94663094980769280085e+00 +2543 12710.00 6.27187500981998553584e+01 4.85389472133522748010e+00 9.26897009476934208294e+00 5.11394944750012658830e+00 7.86358268077842570420e+00 4.88355038239387884147e+00 7.66386342834104805632e+00 5.52234558047776324941e+00 8.95104773225173389051e+00 +2544 12715.00 6.27450326911736198099e+01 4.85560900485972712914e+00 9.27345119813155882582e+00 5.11653160805249207499e+00 7.86686299003284350562e+00 4.88548520505892547305e+00 7.66699000301595212647e+00 5.52569511152291159561e+00 8.95546451381482810916e+00 +2545 12720.00 6.27713152841473771559e+01 4.85732287358180236936e+00 9.27793258909758655761e+00 5.11911429086228242369e+00 7.87014329929762546101e+00 4.88741981758145360715e+00 7.67011638445218935090e+00 5.52904575191036329329e+00 8.95988129306672576035e+00 +2546 12725.00 6.27975978771211345020e+01 4.85903632793674589152e+00 9.28241426739795727485e+00 5.12169749525583206662e+00 7.87342360858313305982e+00 4.88935421992000929237e+00 7.67324257305395818207e+00 5.53239749976421624211e+00 8.96429806853572941350e+00 +2547 12730.00 6.28238804700948989534e+01 4.86074936832875792447e+00 9.28689623274247466611e+00 5.12428122056983870181e+00 7.87670391783755086124e+00 4.89128841202277175881e+00 7.67636856925655219896e+00 5.53575035318784181015e+00 8.96871483880195086158e+00 +2548 12735.00 6.28501630630686634049e+01 4.86246199518276522866e+00 9.29137848487203932279e+00 5.12686546612027083114e+00 7.87998422711269519425e+00 4.89322239383791934841e+00 7.67949437348489727384e+00 5.53910431028460870095e+00 8.97313160241442098197e+00 +2549 12740.00 6.28764456560424136455e+01 4.86417420892369900542e+00 9.29586102350681642292e+00 5.12945023124382704083e+00 7.88326453633602053372e+00 4.89515616533436137559e+00 7.68261998617428876202e+00 5.54245936914752146407e+00 8.97754835792216354662e+00 +2550 12745.00 6.29027282490161780970e+01 4.86588600996612008487e+00 9.30034384837734506846e+00 5.13203551526683909856e+00 7.88654484559043744696e+00 4.89708972646027529407e+00 7.68574540771856007382e+00 5.54581552789031473338e+00 8.98196510389493241178e+00 +2551 12750.00 6.29290108419899496539e+01 4.86759739873495700380e+00 9.30482695920378866106e+00 5.13462131750527817076e+00 7.88982515485521762599e+00 4.89902307715347884454e+00 7.68887063856336983036e+00 5.54917278458526475049e+00 8.98638183890248143371e+00 +2552 12755.00 6.29552934349636998945e+01 4.86930837565514007537e+00 9.30931035572704601577e+00 5.13720763727511187113e+00 7.89310546411999869321e+00 4.90095621739324194266e+00 7.69199567912327886177e+00 5.55253113733574199529e+00 8.99079856149383971342e+00 +2553 12760.00 6.29815760279374643460e+01 4.87101894114123190604e+00 9.31379403766728941605e+00 5.13979447391303878589e+00 7.89638577338478064860e+00 4.90288914711738144092e+00 7.69512052981285421538e+00 5.55589058421402182120e+00 8.99521527024912082027e+00 +2554 12765.00 6.30078586209112359029e+01 4.87272909560779776683e+00 9.31827800475504908206e+00 5.14238182672466326295e+00 7.89966608264956082763e+00 4.90482186629480310103e+00 7.69824519105702442801e+00 5.55925112330274817651e+00 8.99963196373808216322e+00 +2555 12770.00 6.30341412138849932489e+01 4.87443883947976352999e+00 9.32276225673122205251e+00 5.14496969502595646873e+00 7.90294639191434278302e+00 4.90675437486332377546e+00 7.70136966325998617577e+00 5.56261275267419641466e+00 9.00404864052011255637e+00 +2556 12775.00 6.30604238068587505950e+01 4.87614817317169357835e+00 9.32724679331598238718e+00 5.14755807812252186295e+00 7.90622670116875880808e+00 4.90868667278148596012e+00 7.70449394684666888367e+00 5.56597547040064455359e+00 9.00846529917532912179e+00 +2557 12780.00 6.30867063998325079410e+01 4.87785709711888326723e+00 9.33173161423986030627e+00 5.15014697533032883570e+00 7.90950701043353987529e+00 4.91061876000783481544e+00 7.70761804223163959904e+00 5.56933927455436972309e+00 9.01288193827348571574e+00 +2558 12785.00 6.31129889928062794979e+01 4.87956561172552927275e+00 9.33621671924375107210e+00 5.15273638596534855338e+00 7.91278731968795767671e+00 4.91255063650091283733e+00 7.71074194982945826382e+00 5.57270416318691985680e+00 9.01729855639470301298e+00 +2559 12790.00 6.31392715856763970805e+01 4.88127371740619686591e+00 9.34070210805819201028e+00 5.15532630931245616779e+00 7.91606762895273785574e+00 4.91448230221926429806e+00 7.71386567003396272924e+00 5.57607013436020881869e+00 9.02171515211909458287e+00 +2560 12795.00 6.31655541786501473212e+01 4.88298141459617784932e+00 9.34518778041371511733e+00 5.15791674468762106898e+00 7.91934793820715565715e+00 4.91641375710070427374e+00 7.71698920328044568606e+00 5.57943718613614869639e+00 9.02613172403714791869e+00 +2561 12800.00 6.31918367716239188780e+01 4.88468870371003660580e+00 9.34967373605121387925e+00 5.16050769139644849304e+00 7.92262824746157168221e+00 4.91834500112450534459e+00 7.72011254996274054463e+00 5.58280531655592593410e+00 9.03054827070825183455e+00 +2562 12805.00 6.32181193645976833295e+01 4.88639558515197425237e+00 9.35415997470122739799e+00 5.16309914874454456424e+00 7.92590855671598948362e+00 4.92027603421811665640e+00 7.72323571048505019832e+00 5.58617452366072519965e+00 9.03496479073324998410e+00 +2563 12810.00 6.32444019575714406756e+01 4.88810205935727992710e+00 9.35864649609428767008e+00 5.16569111600642205673e+00 7.92918886598076877448e+00 4.92220685636081167758e+00 7.72635868527230140757e+00 5.58954480550209442669e+00 9.03938128269225948941e+00 +2564 12815.00 6.32706845505451980216e+01 4.88980812674052067734e+00 9.36313329998165500001e+00 5.16828359248768443024e+00 7.93246917527664407999e+00 4.92413746750076875003e+00 7.72948147471832935906e+00 5.59291616012121828305e+00 9.04379774517577139648e+00 +2565 12820.00 6.32969671435189624731e+01 4.89151378770589584377e+00 9.36762038609386138432e+00 5.17087657749393958539e+00 7.93574948453106010504e+00 4.92606786758616888022e+00 7.73260407923770021199e+00 5.59628858553855490499e+00 9.04821417677425543502e+00 +2566 12825.00 6.33232497364927269246e+01 4.89321904268869634080e+00 9.37210775416144414862e+00 5.17347007029969851999e+00 7.93902979379584117225e+00 4.92799805658591960622e+00 7.73572649921388233452e+00 5.59966207978492391817e+00 9.05263057607820265105e+00 +2567 12830.00 6.33495323294664771652e+01 4.89492389209312328546e+00 9.37659540393566359739e+00 5.17606407020020320431e+00 7.94231010302952888935e+00 4.92992803444819926995e+00 7.73884873506144366218e+00 5.60303664089114583646e+00 9.05704694168845669822e+00 +2568 12835.00 6.33758149224402416166e+01 4.89662833634410432637e+00 9.38108333514704995082e+00 5.17865857649069383228e+00 7.94559041227358253678e+00 4.93185780113155214366e+00 7.74197078718458087110e+00 5.60641226687767879611e+00 9.06146327219549974075e+00 +2569 12840.00 6.34020975154140131735e+01 4.89833237585620473453e+00 9.38557154753650380030e+00 5.18125358843532080044e+00 7.94887072155909280013e+00 4.93378735659452161144e+00 7.74509265597713270068e+00 5.60978895576498004516e+00 9.06587956620017720866e+00 +2570 12845.00 6.34283801083877634142e+01 4.90003601104398622823e+00 9.39006004085528722669e+00 5.18384910533968845670e+00 7.95215103081350882519e+00 4.93571670078528779158e+00 7.74821434183293256126e+00 5.61316670555277497101e+00 9.07029582230333808468e+00 +2571 12850.00 6.34546627013615278656e+01 4.90173924233237912063e+00 9.39454881483393045016e+00 5.18644512646794453303e+00 7.95543134016120223606e+00 4.93764583367275733394e+00 7.75133584515618068167e+00 5.61654551426152170990e+00 9.07471203910582779883e+00 +2572 12855.00 6.34809452943352923171e+01 4.90344207012558186420e+00 9.39903786921333228577e+00 5.18904165111533277610e+00 7.95871164929125018972e+00 4.93957475520511035683e+00 7.75445716634071491313e+00 5.61992537989094831374e+00 9.07912821521885504694e+00 +2573 12860.00 6.35072278873090496631e+01 4.90514449484852299577e+00 9.40352720374475836707e+00 5.19163867853563498755e+00 7.96199195859748876103e+00 4.94150346534089113248e+00 7.75757830579073459631e+00 5.62330630045114965299e+00 9.08354434924326348266e+00 +2574 12865.00 6.35335104802828141146e+01 4.90684651691576689814e+00 9.40801681817946189312e+00 5.19423620802409491404e+00 7.96527226786226894006e+00 4.94343196402827711466e+00 7.76069926387934572176e+00 5.62668827392112369523e+00 9.08796043979027068360e+00 +2575 12870.00 6.35597930732565714607e+01 4.90854813673151380016e+00 9.41250671223762047646e+00 5.19683423884485851119e+00 7.96855257714777831524e+00 4.94536025124654265994e+00 7.76382004100038347616e+00 5.63007129830059849240e+00 9.09237648546072030342e+00 +2576 12875.00 6.35860756662303288067e+01 4.91024935472069223863e+00 9.41699688568085413465e+00 5.19943277026207706371e+00 7.97183288636073861255e+00 4.94728832692313602593e+00 7.76694063755805164107e+00 5.63345537158930387278e+00 9.09679248488654756954e+00 +2577 12880.00 6.36123582592041003636e+01 4.91195017130822897400e+00 9.42148733826042672490e+00 5.20203180156062661155e+00 7.97511319564624798772e+00 4.94921619104769572317e+00 7.77006105393581947283e+00 5.63684049175587542635e+00 9.10120843666860501742e+00 +2578 12885.00 6.36386408521778577096e+01 4.91365058688796096931e+00 9.42597806971723528591e+00 5.20463133198392746692e+00 7.97839350495248567086e+00 4.95114384354767267382e+00 7.77318129051715711597e+00 5.64022665678967793923e+00 9.10562433942846105595e+00 +2579 12890.00 6.36649234451516150557e+01 4.91535060188481587318e+00 9.43046907979217863272e+00 5.20723136081685655796e+00 7.98167381418617427613e+00 4.95307128440233856992e+00 7.77630134768553915592e+00 5.64361386466971115539e+00 9.11004019178769297582e+00 +2580 12895.00 6.36912060381253724017e+01 4.91705021671335629208e+00 9.43496036824688033562e+00 5.20983188731319923903e+00 7.98495412344059030119e+00 4.95499851354950671123e+00 7.77942122584516582151e+00 5.64700211336461155298e+00 9.11445599236787451503e+00 +2581 12900.00 6.37174886310991439586e+01 4.91874943178814927336e+00 9.43945193481187594386e+00 5.21243291072674086450e+00 7.98823443264318644452e+00 4.95692553096845234251e+00 7.78254092534841479534e+00 5.65039140083265234438e+00 9.11887173979058118789e+00 +2582 12905.00 6.37437712240728941993e+01 4.92044824751339238134e+00 9.44394377925915229355e+00 5.21503443033199332035e+00 7.99151474198051747777e+00 4.95885233659698876352e+00 7.78566044660984957204e+00 5.65378172505283060900e+00 9.12328743267738850875e+00 +2583 12910.00 6.37700538170466586507e+01 4.92214666430365088701e+00 9.44843590132960997607e+00 5.21763644536201276480e+00 7.99479505120384104089e+00 4.96077893040402351232e+00 7.78877978998185227510e+00 5.65717308397305629342e+00 9.12770306967059674719e+00 +2584 12915.00 6.37963364100204302076e+01 4.92384468258385332717e+00 9.45292830077450929593e+00 5.22023895509131197201e+00 7.99807536043753053434e+00 4.96270531234810086119e+00 7.79189895585825631485e+00 5.66056547556196676396e+00 9.13211864938141815173e+00 +2585 12920.00 6.38226190029941804482e+01 4.92554230275819726614e+00 9.45742097734511055762e+00 5.22284195876331303054e+00 8.00135566972303990951e+00 4.96463148238776419419e+00 7.79501794462253272400e+00 5.66395889776746930266e+00 9.13653417045215476833e+00 +2586 12925.00 6.38489015959679448997e+01 4.92723952524124975128e+00 9.46191393080304266050e+00 5.22544545562143714079e+00 8.00463597897745771093e+00 4.96655744046082858745e+00 7.79813675663742955635e+00 5.66735334853747030337e+00 9.14094963151474360075e+00 +2587 12930.00 6.38751841888380624823e+01 4.92893635044757338903e+00 9.46640716088919731419e+00 5.22804944491946610441e+00 8.00791628827333035190e+00 4.96848318655693166335e+00 7.80125539228641340372e+00 5.67074882581987793628e+00 9.14536503121149024764e+00 +2588 12935.00 6.39014667818118269338e+01 4.93063277877100425428e+00 9.47090066737557023657e+00 5.23065392591118616394e+00 8.01119659750701806900e+00 4.97040872060352167949e+00 7.80437385194259469756e+00 5.67414532755223710581e+00 9.14978036817433171279e+00 +2589 12940.00 6.39277493747855913853e+01 4.93232881064683326144e+00 9.47539445000305668998e+00 5.23325889781929021183e+00 8.01447690679252744417e+00 4.97233404257987299246e+00 7.80749213597908031659e+00 5.67754285167209182816e+00 9.15419564104557181849e+00 +2590 12945.00 6.39540319677593416259e+01 4.93402444646889826174e+00 9.47988850853328202106e+00 5.23586435990792509187e+00 8.01775721602621693762e+00 4.97425915244452898634e+00 7.81061024475861476191e+00 5.68094139610662107742e+00 9.15861084846751083433e+00 +2591 12950.00 6.39803145607331131828e+01 4.93571968665176274982e+00 9.48438284271750831067e+00 5.23847031139978547287e+00 8.02103752531172453644e+00 4.97618405013530296088e+00 7.81372817865430402406e+00 5.68434095878300560400e+00 9.16302598908245435894e+00 +2592 12955.00 6.40065971537068776342e+01 4.93741453160999022032e+00 9.48887745232772594761e+00 5.24107675154865582101e+00 8.02431783455577907205e+00 4.97810873563146838450e+00 7.81684593803925675815e+00 5.68774153763878764778e+00 9.16744106155343274622e+00 +2593 12960.00 6.40328797466806349803e+01 4.93910898174778179026e+00 9.49337233711519346002e+00 5.24368367956686309839e+00 8.02759814383092340506e+00 4.98003320888120537546e+00 7.81996352327621568890e+00 5.69114313059078380519e+00 9.17185606451238477632e+00 +2594 12965.00 6.40591623396543923263e+01 4.94080303747969917794e+00 9.49786749684153974727e+00 5.24629109470819265937e+00 8.03087845307497616432e+00 4.98195746984305642968e+00 7.82308093472792620560e+00 5.69454573555581067268e+00 9.17627099662233902677e+00 +2595 12970.00 6.40854449326281638832e+01 4.94249669920994438854e+00 9.50236293126839015599e+00 5.24889899619533828456e+00 8.03415876236048553949e+00 4.98388151847556493124e+00 7.82619817276749429880e+00 5.69794935044031891636e+00 9.18068585652560109622e+00 +2596 12975.00 6.41117275256019070184e+01 4.94418996734271676274e+00 9.50685864015736825650e+00 5.25150738326135435585e+00 8.03743907159417503294e+00 4.98580535474763930637e+00 7.82931523774730031562e+00 5.70135397317148751029e+00 9.18510064289556460437e+00 +2597 12980.00 6.41380101185756785753e+01 4.94588284230294483734e+00 9.51135462327010117178e+00 5.25411625511857049986e+00 8.04071938085895610016e+00 4.98772897859709463120e+00 7.83243213003008609263e+00 5.70475960162467643499e+00 9.18951535437453159716e+00 +2598 12985.00 6.41642927115494359214e+01 4.94757532447409964504e+00 9.51585088036821424851e+00 5.25672561102077029460e+00 8.04399969011337212521e+00 4.98965239000320259777e+00 7.83554884997859701912e+00 5.70816623372706555273e+00 9.19392998962553420483e+00 +2599 12990.00 6.41905753045232074783e+01 4.94926741428110883447e+00 9.52034741122369965183e+00 5.25933545015955505875e+00 8.04727999935742488447e+00 4.99157558890377828220e+00 7.83866539794521344220e+00 5.71157386737474226379e+00 9.19834454732196782345e+00 +2600 12995.00 6.42168578974969506135e+01 4.95095911212817441083e+00 9.52484421558781413353e+00 5.26194577177834421633e+00 8.05056030864293425964e+00 4.99349857527809515290e+00 7.84178177428231215629e+00 5.71498250044306477236e+00 9.20275902612686103055e+00 +2601 13000.00 6.42431404904707221704e+01 4.95265041842985898057e+00 9.52934129324291667729e+00 5.26455657508946739398e+00 8.05384061789735206105e+00 4.99542134907433066360e+00 7.84489797935263677431e+00 5.71839213083848729724e+00 9.20717342469288446694e+00 +2602 13005.00 6.42694230834444937273e+01 4.95434133356963535277e+00 9.53383864394026581124e+00 5.26716785931561659595e+00 8.05712092712067651235e+00 4.99734391026139324055e+00 7.84801401350856941974e+00 5.72180275644672953206e+00 9.21158774170379501811e+00 +2603 13010.00 6.42957056764182368624e+01 4.95603185797242851152e+00 9.53833626746221518999e+00 5.26977962365875551853e+00 8.06040123644764250344e+00 4.99926625877709795986e+00 7.85112987710248688700e+00 5.72521437514315412187e+00 9.21600197583298808013e+00 +2604 13015.00 6.43219882693920084193e+01 4.95772199203207897256e+00 9.54283416357039016020e+00 5.27239186733121290018e+00 8.06368154568133022053e+00 5.00118839459035235961e+00 7.85424557047640625740e+00 5.72862698481348164847e+00 9.22041612575385727268e+00 +2605 13020.00 6.43482708623657799762e+01 4.95941173616314667782e+00 9.54733233204714792919e+00 5.27500458956604401095e+00 8.06696185492538297979e+00 5.00311031767006753057e+00 7.85736109399307025569e+00 5.73204058332270971476e+00 9.22483019013980154455e+00 +2606 13025.00 6.43745534553395231114e+01 4.96110109075947036672e+00 9.55183077263338198293e+00 5.27761778954448690371e+00 8.07024216417980078120e+00 5.00503202796441826194e+00 7.86047644798413092104e+00 5.73545516855656067889e+00 9.22924416766421096270e+00 +2607 13030.00 6.44008360483132946683e+01 4.96279005623561264571e+00 9.55632948513217783670e+00 5.28023146649959773669e+00 8.07352247344458184841e+00 5.00695352543194882600e+00 7.86359163280196593604e+00 5.73887073836966354889e+00 9.23365805701084774171e+00 +2608 13035.00 6.44271186412870520144e+01 4.96447863299577463181e+00 9.56082846930515906081e+00 5.28284561961261012186e+00 8.07680278270936291563e+00 5.00887481004157031350e+00 7.86670664878859149383e+00 5.74228729062701681585e+00 9.23807185687383380923e+00 +2609 13040.00 6.44534012342608093604e+01 4.96616682143378973535e+00 9.56532772491395277825e+00 5.28546024810621961620e+00 8.08008309197414220648e+00 5.01079588174145840185e+00 7.86982149628602378755e+00 5.74570482319361541812e+00 9.24248556592656633768e+00 +2610 13045.00 6.44796838272345809173e+01 4.96785462195386084971e+00 9.56982725175127413308e+00 5.28807535116166071987e+00 8.08336340122856000789e+00 5.01271674049015913965e+00 7.87293617563627812217e+00 5.74912333392408658739e+00 9.24689918286316370200e+00 +2611 13050.00 6.45059664202083382634e+01 4.96954203496018642738e+00 9.57432704957875024832e+00 5.29069092800162543710e+00 8.08664371052443264887e+00 5.01463738625658006498e+00 7.87605068718136802630e+00 5.75254282066270139495e+00 9.25131270637775671162e+00 +2612 13055.00 6.45322490131820956094e+01 4.97122906085696580902e+00 9.57882711818910159707e+00 5.29330697779698589045e+00 8.08992401978921549244e+00 5.01655781898889863157e+00 7.87916503125294642729e+00 5.75596328127445211464e+00 9.25572613515409869933e+00 +2613 13060.00 6.45585316061558529555e+01 4.97291570004840011165e+00 9.58332745734394819692e+00 5.29592349976007081835e+00 8.09320432905399478329e+00 5.01847803864566088805e+00 7.88227920818266536429e+00 5.75938471358287973345e+00 9.26013946788631514551e+00 +2614 13065.00 6.45848141991296245124e+01 4.97460195292832452196e+00 9.58782806682565258427e+00 5.29854049308247976313e+00 8.09648463826695596879e+00 5.02039804519577259612e+00 7.88539321832290074354e+00 5.76280711544261414758e+00 9.26455270328925273304e+00 +2615 13070.00 6.46110967919997420950e+01 4.97628781990094015697e+00 9.59232894641656130830e+00 5.30115795695581404345e+00 8.09976494754210207816e+00 5.02231783859777802803e+00 7.88850706199494400295e+00 5.76623048468755872165e+00 9.26896584004667900558e+00 +2616 13075.00 6.46373793849734994410e+01 4.97797330136008042700e+00 9.59683009588866475781e+00 5.30377589056130904765e+00 8.10304525680688136902e+00 5.02423741879985730208e+00 7.89162073952008036315e+00 5.76965481915161504389e+00 9.27337887686307738022e+00 +2617 13080.00 6.46636619779472567870e+01 4.97965839770994822544e+00 9.60133151503468518229e+00 5.30639429309056431805e+00 8.10632556606129917043e+00 5.02615678577091795631e+00 7.89473425124032335276e+00 5.77308011666868825529e+00 9.27779181244293305042e+00 +2618 13085.00 6.46899445709210141331e+01 4.98134310935474022841e+00 9.60583320363697090727e+00 5.30901316372481613115e+00 8.10960587532608023764e+00 5.02807593946950248665e+00 7.89784759748732678730e+00 5.77650637506231401375e+00 9.28220464550109802815e+00 +2619 13090.00 6.47162271638947856900e+01 4.98302743668829695167e+00 9.61033516146751409792e+00 5.31163250165566491745e+00 8.11288618461158961281e+00 5.02999487984379189953e+00 7.90096077857201350980e+00 5.77993359214566915227e+00 9.28661737473169957013e+00 +2620 13095.00 6.47425097568685430360e+01 4.98471138010444914102e+00 9.61483738831903522737e+00 5.31425230605398279948e+00 8.11616649386600563787e+00 5.03191360686269284486e+00 7.90407379483639704887e+00 5.78336176574229199332e+00 9.29102999885994940144e+00 +2621 13100.00 6.47687923498423003821e+01 4.98639493999703642402e+00 9.61933988397388617386e+00 5.31687257611136843138e+00 8.11944680314115174724e+00 5.03383212048474959488e+00 7.90718664658103698173e+00 5.78679089367572085933e+00 9.29544251660069775767e+00 +2622 13105.00 6.47950749428160719390e+01 4.98807811678061963079e+00 9.62384264821442059201e+00 5.31949331098833155806e+00 8.12272711236447619854e+00 5.03575042066850553368e+00 7.91029933414795127788e+00 5.79022097374876842935e+00 9.29985492665843693771e+00 +2623 13110.00 6.48213575357898292850e+01 4.98976091083867334675e+00 9.62834568084372044439e+00 5.32211450987646994548e+00 8.12600742162925726575e+00 5.03766850736213811501e+00 7.91341185784806011583e+00 5.79365200377460531911e+00 9.30426722776874370879e+00 +2624 13115.00 6.48476401287635866311e+01 4.99144332257539602438e+00 9.63284898162341107763e+00 5.32473617193629333855e+00 8.12928773089403833296e+00 5.03958638054492347180e+00 7.91652421800265049256e+00 5.79708398155604509583e+00 9.30867941863610326436e+00 +2625 13120.00 6.48739227217373581880e+01 4.99312535237425958456e+00 9.63735255036694127284e+00 5.32735829634903801377e+00 8.13256804022100254770e+00 5.04150404016503728144e+00 7.91963641492264702748e+00 5.80051690488553362002e+00 9.31309149799609947706e+00 +2626 13125.00 6.49002053147111013232e+01 4.99480700063946425615e+00 9.64185638685665935554e+00 5.32998088227521016336e+00 8.13584834941323542523e+00 5.04342148618102470436e+00 7.92274844892933671758e+00 5.80395077156588090617e+00 9.31750346456358258251e+00 +2627 13130.00 6.49264879076848728801e+01 4.99648826775448284820e+00 9.64636049087492786214e+00 5.33260392888568279801e+00 8.13912865866765322664e+00 5.04533871854106585886e+00 7.92586032033364062954e+00 5.80738557939989696877e+00 9.32191531707412934793e+00 +2628 13135.00 6.49527705006586444370e+01 4.99816915412351292503e+00 9.65086486222481987340e+00 5.33522743534096299811e+00 8.14240896793243429386e+00 5.04725573722443066060e+00 7.92897202943611922876e+00 5.81082132615930202491e+00 9.32632705426332364596e+00 +2629 13140.00 6.49790530936323875721e+01 4.99984966014039144966e+00 9.65536950069905763883e+00 5.33785140082228704017e+00 8.14568927718685031891e+00 5.04917254217930100424e+00 7.93208357655806040043e+00 5.81425800963654104692e+00 9.33073867485637897801e+00 +2630 13145.00 6.50053356866061591290e+01 5.00152978619895449697e+00 9.65987440607999658937e+00 5.34047582446943547296e+00 8.14896958645163316248e+00 5.05108913337458176329e+00 7.93519496201038609939e+00 5.81769562761369662951e+00 9.33515017759923892982e+00 +2631 13150.00 6.50316182795799164751e+01 5.00320953268267487601e+00 9.66437957818107840069e+00 5.34310070545327864266e+00 8.15224989572677749550e+00 5.05300551074809156660e+00 7.93830618608329174890e+00 5.82113417788321463320e+00 9.33956156120675373700e+00 +2632 13155.00 6.50579008725536738211e+01 5.00488889998538599713e+00 9.66888501678466205647e+00 5.34572604292396125203e+00 8.15553020497083025475e+00 5.05492167427909855348e+00 7.94141724909806345778e+00 5.82457365819608696711e+00 9.34397282445596033540e+00 +2633 13160.00 6.50841834655274311672e+01 5.00656788850092571153e+00 9.67339072169382419020e+00 5.34835183605235453541e+00 8.15881051423561132196e+00 5.05683762391578550677e+00 7.94452815134489753746e+00 5.82801406633439356142e+00 9.34838396605134924755e+00 +2634 13165.00 6.51104660585012027241e+01 5.00824649862312920590e+00 9.67789669271165209352e+00 5.35097808396787488761e+00 8.16209082349002734702e+00 5.05875335962705818815e+00 7.94763889312435090062e+00 5.83145540008021701084e+00 9.35279498476995208023e+00 +2635 13170.00 6.51367486514749742810e+01 5.00992473073546751294e+00 9.68240292963085913414e+00 5.35360478584139443115e+00 8.16537113275480841423e+00 5.06066888136109671592e+00 7.95074947474734905484e+00 5.83489765717418684687e+00 9.35720587934735092972e+00 +2636 13175.00 6.51630312444487174162e+01 5.01160258524214086151e+00 9.68690943225453260368e+00 5.35623194082305431607e+00 8.16865144199886117349e+00 5.06258418907644536233e+00 7.95385989650408475882e+00 5.83834083538801706936e+00 9.36161664852948938176e+00 +2637 13180.00 6.51893138374224889731e+01 5.01328006250589464088e+00 9.69141620037538586985e+00 5.35885954805263686751e+00 8.17193175130509885662e+00 5.06449928274200900091e+00 7.95697015869511758979e+00 5.84178493249342700722e+00 9.36602729107267428788e+00 +2638 13185.00 6.52155964303962605300e+01 5.01495716293092552718e+00 9.69592323381723275588e+00 5.36148760666992085788e+00 8.17521206056987992383e+00 5.06641416230597041448e+00 7.96008026161064297099e+00 5.84522994621031433127e+00 9.37043780573321249960e+00 +2639 13190.00 6.52418790233700036651e+01 5.01663388691107225981e+00 9.70043053236242336368e+00 5.36411611583541336756e+00 8.17849236980356764093e+00 5.06832882773723625291e+00 7.96319020553049128353e+00 5.84867587432076163623e+00 9.37484819126741442119e+00 +2640 13195.00 6.52681616163437752220e+01 5.01831023481944171749e+00 9.70493809582440647432e+00 5.36674507467853079135e+00 8.18177267904762217654e+00 5.07024327898398663450e+00 7.96629999076558448223e+00 5.85212271455503163509e+00 9.37925844644195194633e+00 +2641 13200.00 6.52944442093175325681e+01 5.01998620704986819874e+00 9.70944592401662731618e+00 5.36937448233905278983e+00 8.18505298831240324375e+00 5.07215751600476316696e+00 7.96940961759575561274e+00 5.85557046466411446062e+00 9.38366857002349341599e+00 +2642 13205.00 6.53207268022912899141e+01 5.02166180398582540079e+00 9.71395401674216785182e+00 5.37200433796712317758e+00 8.18833329764973250064e+00 5.07407153876847516472e+00 7.97251908631119832194e+00 5.85901912238863520344e+00 9.38807856075798952133e+00 +2643 13210.00 6.53470093951614217076e+01 5.02333702601078435634e+00 9.71846237379374677801e+00 5.37463464069215568486e+00 8.19161360683160033602e+00 5.07598534723366512367e+00 7.97562839718137794875e+00 5.86246868545885480017e+00 9.39248841743283335859e+00 +2644 13215.00 6.53732919881351648428e+01 5.02501187351858025210e+00 9.72297099500553763107e+00 5.37726538964356759465e+00 8.19489391610674466904e+00 5.07789894133815078447e+00 7.97873755051721911258e+00 5.86591915160503596383e+00 9.39689813880433355564e+00 +2645 13220.00 6.53995745811089363997e+01 5.02668634688232263130e+00 9.72747988017026088414e+00 5.37989658395077441355e+00 8.19817422535079742829e+00 5.07981232107156444044e+00 7.98184654657782566289e+00 5.86937051855744051920e+00 9.40130772365989386685e+00 +2646 13225.00 6.54258571740827079566e+01 5.02836044649584490429e+00 9.73198902911172325503e+00 5.38252822276391906797e+00 8.20145453461557849550e+00 5.08172548637172472041e+00 7.98495538564302442808e+00 5.87282278405669533328e+00 9.40571717076618796227e+00 +2647 13230.00 6.54521397670564510918e+01 5.03003417273225661432e+00 9.73649844163300848265e+00 5.38516030519168875657e+00 8.20473484414982756618e+00 5.08363843719717323211e+00 7.98806406800301260773e+00 5.87627594580196888074e+00 9.41012647890024389596e+00 +2648 13235.00 6.54784223600302226487e+01 5.03170752598539294809e+00 9.74100811754756179539e+00 5.38779283037386313993e+00 8.20801515315550567209e+00 5.08555117351681928994e+00 7.99117259393762235931e+00 5.87973000153388714040e+00 9.41453564684946897501e+00 +2649 13240.00 6.55047049530039799947e+01 5.03338050662836078430e+00 9.74551805667919701648e+00 5.39042579742949534705e+00 8.21129546240992169714e+00 5.08746369527884034767e+00 7.99428096369558893741e+00 5.88318494895161858693e+00 9.41894467339089480618e+00 +2650 13245.00 6.55309875459777373408e+01 5.03505311503426877806e+00 9.75002825883099077942e+00 5.39305920547763406603e+00 8.21457577166433772220e+00 5.08937600244178156572e+00 7.99738917757747369564e+00 5.88664078577506355572e+00 9.42335355732228840964e+00 +2651 13250.00 6.55572701389514946868e+01 5.03672535159695211604e+00 9.75453872383712194960e+00 5.39569305364769657984e+00 8.21785608091875729997e+00 5.09128809497455048216e+00 8.00049723584237781893e+00 5.89009750972411794123e+00 9.42776229741032167908e+00 +2652 13255.00 6.55835527319252662437e+01 5.03839721669988360730e+00 9.75904945151103397905e+00 5.39832734104837008715e+00 8.22113639022499498310e+00 5.09319997282532543892e+00 8.00360513874940515677e+00 5.89355511847722279839e+00 9.43217089246311957140e+00 +2653 13260.00 6.56098353248990235898e+01 5.04006871070580597660e+00 9.76356044165580883032e+00 5.40096206680906920639e+00 8.22441669944831765804e+00 5.09511163595265248460e+00 8.00671288658874757971e+00 5.89701360975427668620e+00 9.43657934126808939368e+00 +2654 13265.00 6.56361179178727951466e+01 5.04173983400855441062e+00 9.76807169411598863462e+00 5.40359723002811698223e+00 8.22769700870273545945e+00 5.09702308432543649275e+00 8.00982047959878507015e+00 5.90047298125444896755e+00 9.44098764262298750793e+00 +2655 13270.00 6.56624005108465524927e+01 5.04341058697087252227e+00 9.77258320870501506761e+00 5.40623282984529485162e+00 8.23097731795715148451e+00 5.09893431788149431583e+00 8.01292791805934356830e+00 5.90393323066654662767e+00 9.44539579532558271069e+00 +2656 13275.00 6.56886831038203098387e+01 5.04508096997623489699e+00 9.77709498523633691036e+00 5.40886886534856081710e+00 8.23425762723229937023e+00 5.10084533660009764588e+00 8.01603520222952425911e+00 5.90739435568973458857e+00 9.44980379817363846939e+00 +2657 13280.00 6.57149656967940671848e+01 5.04675098340810990294e+00 9.78160702354412769921e+00 5.41150533565696445493e+00 8.23753793645562026882e+00 5.10275614041906155904e+00 8.01914233236843543295e+00 5.91085635400246101057e+00 9.45421164997528151730e+00 +2658 13285.00 6.57412482897678245308e+01 5.04842062763960619520e+00 9.78611932345219770468e+00 5.41414223987919562830e+00 8.24081824575149646250e+00 5.10466672931765774734e+00 8.02224930873517472207e+00 5.91431922329352399714e+00 9.45861934953864214037e+00 +2659 13290.00 6.57675308827415818769e+01 5.05008990304383331704e+00 9.79063188478435719730e+00 5.41677957711357738191e+00 8.24409855501627752972e+00 5.10657710323370306327e+00 8.02535613158884686413e+00 5.91778296124136993228e+00 9.46302689567184707187e+00 +2660 13295.00 6.57938134757153392229e+01 5.05175880998353132867e+00 9.79514470736441822396e+00 5.41941734647915929202e+00 8.24737886429142186273e+00 5.10848726213610238034e+00 8.02846280116782651248e+00 5.92124756554516729068e+00 9.46743428718302659775e+00 +2661 13300.00 6.58200960686891249907e+01 5.05342734885253808130e+00 9.79965779103691758678e+00 5.42205554706390113751e+00 8.25065917355620115359e+00 5.11039720597303848137e+00 8.03156931774157989423e+00 5.92471303385226288896e+00 9.47184152289067071706e+00 +2662 13305.00 6.58463786616628681259e+01 5.05509552001359718787e+00 9.80417113561530051413e+00 5.42469417797649189339e+00 8.25393948272770572316e+00 5.11230693471341712808e+00 8.03467568154847988637e+00 5.92817936384110133474e+00 9.47624860161327475794e+00 +2663 13310.00 6.58726612546366396828e+01 5.05676332385018056925e+00 9.80868474094410736086e+00 5.42733323831525282799e+00 8.25721979204430844845e+00 5.11421644831578081636e+00 8.03778189284762945022e+00 5.93164655320048517240e+00 9.48065552215896545363e+00 +2664 13315.00 6.58989438476103970288e+01 5.05843076071466679622e+00 9.81319860684714662113e+00 5.42997272716814372018e+00 8.26050010130908951567e+00 5.11612574672831232903e+00 8.04088795187740323911e+00 5.93511459956740150545e+00 9.48506228335660139805e+00 +2665 13320.00 6.59252264405841543748e+01 5.06009783098016363567e+00 9.81771273315859360764e+00 5.43261264364385176862e+00 8.26378041062569046460e+00 5.11803482989918734347e+00 8.04399385888654272492e+00 5.93858350062029050065e+00 9.48946888403503407972e+00 +2666 13325.00 6.59515090335579117209e+01 5.06176453504050805066e+00 9.82222711972298689886e+00 5.43525298681997259820e+00 8.26706071983865165009e+00 5.11994369780768199263e+00 8.04709961411341900828e+00 5.94205325401686579312e+00 9.49387532302312564525e+00 +2667 13330.00 6.59777916265316832778e+01 5.06343087323771356978e+00 9.82674176636413676533e+00 5.43789375579482836542e+00 8.27034102909306767515e+00 5.12185235040197106571e+00 8.05020521779640496618e+00 5.94552385740447597584e+00 9.49828159913936431735e+00 +2668 13335.00 6.60040742195054406238e+01 5.06509684596561804426e+00 9.83125667292658178553e+00 5.44053494966674122679e+00 8.27362133835784874236e+00 5.12376078764060149950e+00 8.05331067018424207049e+00 5.94899530844083468395e+00 9.50268771122297373211e+00 +2669 13340.00 6.60303568124792121807e+01 5.06676245356623411453e+00 9.83577183924449727215e+00 5.44317656750294531776e+00 8.27690164764335811753e+00 5.12566900947175163594e+00 8.05641597150493993240e+00 5.95246760477328873407e+00 9.50709365811317397288e+00 +2670 13345.00 6.60566394054529695268e+01 5.06842769642303725419e+00 9.84028726515205498515e+00 5.44581860841212606061e+00 8.28018195687704583463e+00 5.12757701585396574728e+00 8.05952112200723469471e+00 5.95594074405955620222e+00 9.51149943863881830453e+00 +2671 13350.00 6.60829219983230871094e+01 5.07009257490913167743e+00 9.84480295051452358734e+00 5.44846107146151403811e+00 8.28346226613146363604e+00 5.12948480675614959523e+00 8.06262612190877625551e+00 5.95941472391588789037e+00 9.51590505164949895800e+00 +2672 13355.00 6.61092045912968444554e+01 5.07175708937689950773e+00 9.84931889514535008345e+00 5.45110395574943318309e+00 8.28674257539624470326e+00 5.13139238211612092044e+00 8.06573097144793571545e+00 5.96288954201036602853e+00 9.52031049598442891124e+00 +2673 13360.00 6.61354871842706018015e+01 5.07342124018908258165e+00 9.85383509890979958357e+00 5.45374726033274903614e+00 8.29002288473357396015e+00 5.13329974191315052678e+00 8.06883567085272623842e+00 5.96636519594887992923e+00 9.52471577049319684249e+00 +2674 13365.00 6.61617697772443591475e+01 5.07508502772915282009e+00 9.85835156164204562401e+00 5.45639098430978641829e+00 8.29330319390508030608e+00 5.13520688608505437855e+00 8.07194022035115565927e+00 5.96984168338914322760e+00 9.52912087401502105877e+00 +2675 13370.00 6.61880523702181449153e+01 5.07674845233912463982e+00 9.86286828318662855963e+00 5.45903512674777502411e+00 8.29658350318022286274e+00 5.13711381459037408348e+00 8.07504462016087032339e+00 5.97331900195777887319e+00 9.53352580540985350410e+00 +2676 13375.00 6.62143349631918880505e+01 5.07841151440247351445e+00 9.86738526339845023472e+00 5.46167968672431136667e+00 8.29986381243464244051e+00 5.13902052739801895598e+00 8.07814887052024666048e+00 5.97679714926067529035e+00 9.53793056352727575131e+00 +2677 13380.00 6.62406175561656596074e+01 5.08007421427157446203e+00 9.87190250212204745139e+00 5.46432466331698929451e+00 8.30314412169942173136e+00 5.14092702445616911433e+00 8.08125297163656419741e+00 5.98027612294518728930e+00 9.54233514722724152080e+00 +2678 13385.00 6.62669001491394169534e+01 5.08173655229880960604e+00 9.87641999920196411722e+00 5.46697005558267523639e+00 8.30642443096420279858e+00 5.14283330571300290046e+00 8.08435692373783254538e+00 5.98375592061720240622e+00 9.54673955535932705629e+00 +2679 13390.00 6.62931827421131742994e+01 5.08339852886764909101e+00 9.88093775450346001321e+00 5.46961586259896392903e+00 8.30970474023934713159e+00 5.14473937113742874061e+00 8.08746072704170160250e+00 5.98723653990334447883e+00 9.55114378680421793888e+00 +2680 13395.00 6.63194653350869316455e+01 5.08506014430974495610e+00 9.88545576786071400477e+00 5.47226208344345099732e+00 8.31298504951449324096e+00 5.14664522067762586488e+00 8.09056438176581416144e+00 5.99071797840950459602e+00 9.55554784041149574136e+00 +2681 13400.00 6.63457479280606889915e+01 5.08672139901893416436e+00 9.88997403913899120198e+00 5.47490871717300553456e+00 8.31626535874818095806e+00 5.14855085429213588100e+00 8.09366788810709003599e+00 5.99420023374157473484e+00 9.55995171505147212088e+00 +2682 13405.00 6.63720305210344605484e+01 5.08838229331650193643e+00 9.89449256819319522549e+00 5.47755576284448952862e+00 8.31954566802332706743e+00 5.15045627192914245995e+00 8.09677124630390210314e+00 5.99768330352617695667e+00 9.56435540959446228726e+00 +2683 13410.00 6.63983131140082178945e+01 5.09004282759628523536e+00 9.89901135487822614323e+00 5.48020321953550126892e+00 8.32282597726737982669e+00 5.15236147355755047528e+00 8.09987445654280513452e+00 6.00116718534847670696e+00 9.56875892292114293980e+00 +2684 13415.00 6.64245957069819894514e+01 5.09170300218993432395e+00 9.90353039904898935220e+00 5.48285108629254303025e+00 8.32610628660470908358e+00 5.15426645912553915707e+00 8.10297751904144547552e+00 6.00465187681436507461e+00 9.57316225389146246982e+00 +2685 13420.00 6.64508782999557467974e+01 5.09336281746019370331e+00 9.90804970057074996248e+00 5.48549936218284450717e+00 8.32938659577621365315e+00 5.15617122859165277760e+00 8.10608043400710442938e+00 6.00813737552973581302e+00 9.57756540139645906606e+00 +2686 13425.00 6.64771608929295041435e+01 5.09502227376980698637e+00 9.91256925929841159473e+00 5.48814804625291063900e+00 8.33266690503062967821e+00 5.15807578190407056695e+00 8.10918320163669825718e+00 6.01162367907974992676e+00 9.58196836431681298052e+00 +2687 13430.00 6.65034434859032614895e+01 5.09668137146078858990e+00 9.91708907508687609322e+00 5.49079713758033438609e+00 8.33594721437832397726e+00 5.15998011902133857376e+00 8.11228582213751181484e+00 6.01511078507030472196e+00 9.58637114153320268883e+00 +2688 13435.00 6.65297260788770188356e+01 5.09834011090624716900e+00 9.92160914782213865237e+00 5.49344663519089060344e+00 8.33922752357055685479e+00 5.16188423990199662938e+00 8.11538829570646313982e+00 6.01859869106583378340e+00 9.59077373192630311394e+00 +2689 13440.00 6.65560086718507761816e+01 5.09999849243783298647e+00 9.92612947733837458486e+00 5.49609653815181076197e+00 8.34250783283533792201e+00 5.16378814449422662847e+00 8.11849062255083353534e+00 6.02208739468259324212e+00 9.59517613438715422092e+00 +2690 13445.00 6.65822912648245477385e+01 5.10165651642865469739e+00 9.93065006352157553238e+00 5.49874684550959713647e+00 8.34578814212084729718e+00 5.16569183275657106691e+00 8.12159280285717599668e+00 6.02557689347465785801e+00 9.59957834781716279338e+00 +2691 13450.00 6.66085738577983192954e+01 5.10331418321036256458e+00 9.93517090622664689192e+00 5.50139755632111615569e+00 8.34906845132344344051e+00 5.16759530464757332879e+00 8.12469483681204351910e+00 6.02906718504791783175e+00 9.60398037110737234912e+00 +2692 13455.00 6.66348564507720766414e+01 5.10497149315606524311e+00 9.93969200532921881575e+00 5.50404866962250771678e+00 8.35234876060895281569e+00 5.16949856011541530876e+00 8.12779672462272095856e+00 6.03255826695644703506e+00 9.60838220314881930051e+00 +2693 13460.00 6.66611390437458339875e+01 5.10662844659741299580e+00 9.94421336069455819029e+00 5.50670018444990994055e+00 8.35562906987373388290e+00 5.17140159911863683817e+00 8.13089846647575953398e+00 6.03605013678540736066e+00 9.61278384284291398387e+00 +2694 13465.00 6.66874216367195913335e+01 5.10828504388678616976e+00 9.94873497219829694416e+00 5.50935209987055163339e+00 8.35890937915924148172e+00 5.17330442160541981167e+00 8.13400006254735075117e+00 6.03954279210960276458e+00 9.61718528909105785374e+00 +2695 13470.00 6.67137042296933486796e+01 5.10994128537656422395e+00 9.95325683971606522960e+00 5.51200441489984616084e+00 8.36218968841366105949e+00 5.17520702753430761334e+00 8.13710151303441087123e+00 6.04303623048310178945e+00 9.62158654081538422531e+00 +2696 13475.00 6.67399868226671060256e+01 5.11159717141912572913e+00 9.95777896310276311453e+00 5.51465712859465906348e+00 8.36546999765771204238e+00 5.17710941686384362725e+00 8.14020281811313139997e+00 6.04653044949107076889e+00 9.62598759690693661639e+00 +2697 13480.00 6.67662694156408775825e+01 5.11325270234612094811e+00 9.96230134225475083554e+00 5.51731023999112757394e+00 8.36875030694322319391e+00 5.17901158954220708353e+00 8.14330397798043037483e+00 6.05002544666685260211e+00 9.63038845627748330003e+00 +2698 13485.00 6.67925520086146349286e+01 5.11490787852029615834e+00 9.96682397702693201325e+00 5.51996374811502832358e+00 8.37203061617691091101e+00 5.18091354552794225441e+00 8.14640499279176744096e+00 6.05352121959561362274e+00 9.63478911784915759142e+00 +2699 13490.00 6.68188346014847667220e+01 5.11656270028366577662e+00 9.97134686731566510787e+00 5.52261765201286358717e+00 8.37531092543132693606e+00 5.18281528475886332785e+00 8.14950586274406063580e+00 6.05701776582105999580e+00 9.63918958053372953998e+00 +2700 13495.00 6.68451171944585240681e+01 5.11821716797824333156e+00 9.97587001299658204800e+00 5.52527195071040644336e+00 8.37859123468574473748e+00 5.18471680720387961827e+00 8.15260658801350146518e+00 6.06051508289726381662e+00 9.64358984325333246090e+00 +2701 13500.00 6.68713997874322814141e+01 5.11987128193568263868e+00 9.98039341393494794374e+00 5.52792664323343352351e+00 8.38187154395052580469e+00 5.18661811282153273339e+00 8.15570716875555135061e+00 6.06401316837829718054e+00 9.64798990493009789304e+00 +2702 13505.00 6.68976823804060387602e+01 5.12152504251872464636e+00 9.98491707002712303165e+00 5.53058172861808206022e+00 8.38515185321530687190e+00 5.18851920154964041387e+00 8.15880760515676151101e+00 6.06751201979750653948e+00 9.65238976448616270432e+00 +2703 13510.00 6.69239649733797961062e+01 5.12317845005902405831e+00 9.98944098114873568761e+00 5.53323720589012513216e+00 8.38843216245935963116e+00 5.19042007334674426744e+00 8.16190789739332345221e+00 6.07101163471932459004e+00 9.65678942085402169937e+00 +2704 13515.00 6.69502475663535534522e+01 5.12483150489859173859e+00 9.99396514719614792455e+00 5.53589307408570530100e+00 8.39171247177596235645e+00 5.19232072816102441237e+00 8.16500804561033710627e+00 6.07451201066673274198e+00 9.66118887295580996977e+00 +2705 13520.00 6.69765301593273392200e+01 5.12648420737944743308e+00 9.99848956803462307619e+00 5.53854933220986467290e+00 8.39499278102001333934e+00 5.19422116596138927491e+00 8.16810804998398687360e+00 6.07801314519380309065e+00 9.66558811973438736231e+00 +2706 13525.00 6.70028127523010823552e+01 5.12813655783323874005e+00 1.00030142435708881976e+01 5.54120597929874492138e+00 8.39827309027443114076e+00 5.19612138668565304300e+00 8.17120791068010277058e+00 6.08151503582351526944e+00 9.66998716012225401073e+00 +2707 13530.00 6.70290953452748539121e+01 5.12978855661234778296e+00 1.00075391736805716647e+01 5.54386301435738904075e+00 8.40155339953921043161e+00 5.19802139029236087708e+00 8.17430762786450770818e+00 6.08501768009957810790e+00 9.67438599306227153818e+00 +2708 13535.00 6.70553779382486112581e+01 5.13144020404842482463e+00 1.00120643582600337140e+01 5.54652043642193870454e+00 8.40483370880399327518e+00 5.19992117672969111908e+00 8.17740720168229984210e+00 6.08852107553460619727e+00 9.67878461748693119659e+00 +2709 13540.00 6.70816605312223686042e+01 5.13309150047312012788e+00 1.00165897971952659873e+01 5.54917824450780372558e+00 8.40811401805840930024e+00 5.20182074595618626489e+00 8.18050663230967067818e+00 6.09202521967230747890e+00 9.68318303234946853308e+00 +2710 13545.00 6.71079431241961259502e+01 5.13474244622845166219e+00 1.00211154903826322737e+01 5.55183643762002887456e+00 8.41139432733355540961e+00 5.20372009790966405518e+00 8.18360591988135155361e+00 6.09553011002529920859e+00 9.68758123659273984174e+00 +2711 13550.00 6.71342257171698832963e+01 5.13639304165643206801e+00 1.00256414377081242151e+01 5.55449501478438989466e+00 8.41467463656724490306e+00 5.20561923256939440563e+00 8.18670506456316715571e+00 6.09903574411655924337e+00 9.69197922916997001153e+00 +2712 13555.00 6.71605083101436406423e+01 5.13804328707834923051e+00 1.00301676390888303558e+01 5.55715397499556917893e+00 8.41795494581129588596e+00 5.20751814985246674894e+00 8.18980406650021741655e+00 6.10254211947943137062e+00 9.69637700903438570776e+00 +2713 13560.00 6.71867909031174121992e+01 5.13969318282585518887e+00 1.00346940943900158061e+01 5.55981331728970484818e+00 8.42123525507607695317e+00 5.20941684973815100079e+00 8.19290292583759871547e+00 6.10604923360580542635e+00 9.70077457513921537213e+00 +2714 13565.00 6.72130734960911837561e+01 5.14134272924096435986e+00 1.00392208035391323762e+01 5.56247304065111336513e+00 8.42451556434085802039e+00 5.21131533216426223731e+00 8.19600164273077425037e+00 6.10955708402902253340e+00 9.70517192644804538304e+00 +2715 13570.00 6.72393560890649411022e+01 5.14299192665532789448e+00 1.00437477664221770368e+01 5.56513314410557224932e+00 8.42779587358491077964e+00 5.21321359708934561894e+00 8.19910021732483862422e+00 6.11306566824097341595e+00 9.70956906192446922432e+00 +2716 13575.00 6.72656386820386984482e+01 5.14464077540059872007e+00 1.00482749829355064719e+01 5.56779362664776211744e+00 8.43107618287042015481e+00 5.21511164446157948760e+00 8.20219864976488821640e+00 6.11657498376463504286e+00 9.71396598052170645587e+00 +2717 13580.00 6.72919212750124557942e+01 5.14628927579806205728e+00 1.00528024529858441838e+01 5.57045448728272951655e+00 8.43435649212483795623e+00 5.21700947422914396157e+00 8.20529694017529820371e+00 6.12008502809189636196e+00 9.71836268121371915640e+00 +2718 13585.00 6.73182038679862273511e+01 5.14793742817936905709e+00 1.00573301764799136748e+01 5.57311572501552010550e+00 8.43763680142071059720e+00 5.21890708634021738277e+00 8.20839508871152467862e+00 6.12359579872500781050e+00 9.72275916297445519376e+00 +2719 13590.00 6.73444864609599704863e+01 5.14958523287617264685e+00 1.00618581533244402237e+01 5.57577733884081716553e+00 8.44091711063367000634e+00 5.22080448075334491165e+00 8.21149309549793748886e+00 6.12710729317658575610e+00 9.72715542476750627543e+00 +2720 13595.00 6.73707690539337420432e+01 5.15123269022012308938e+00 1.00663863834261420038e+01 5.57843932777402873313e+00 8.44419741991917938151e+00 5.22270165741670666648e+00 8.21459096066927152435e+00 6.13061950892815499259e+00 9.73155146557719064049e+00 +2721 13600.00 6.73970516469075136001e+01 5.15287980053250738166e+00 1.00709148666917478465e+01 5.58110169078911244611e+00 8.44747772919432726724e+00 5.22459861627847921284e+00 8.21768868437062316445e+00 6.13413244347160002690e+00 9.73594728438782830438e+00 +2722 13605.00 6.74233342398812709462e+01 5.15452656413461340890e+00 1.00754436030176108829e+01 5.58376442690147545278e+00 8.45075803842801498433e+00 5.22649535728684355718e+00 8.22078626671599899112e+00 6.13764609430917573718e+00 9.74034288016300564550e+00 +2723 13610.00 6.74496168328550282922e+01 5.15617298136845469969e+00 1.00799725923311864761e+01 5.58642753509543776858e+00 8.45403834769279427519e+00 5.22839188040034397176e+00 8.22388370785049538370e+00 6.14116045892240247639e+00 9.74473825189740772146e+00 +2724 13615.00 6.74758994258287856383e+01 5.15781905253459260763e+00 1.00845018345495613943e+01 5.58909101436568089838e+00 8.45731865693684881080e+00 5.23028818556715968668e+00 8.22698100787775388198e+00 6.14467553480316919234e+00 9.74913339857534921862e+00 +2725 13620.00 6.75021820188025429843e+01 5.15946477796467650734e+00 1.00890313295690923212e+01 5.59175486370688634707e+00 8.46059896621199314382e+00 5.23218427272510488990e+00 8.23007816694286908898e+00 6.14819131942263652491e+00 9.75352831920188201309e+00 +2726 13625.00 6.75284646117763003303e+01 5.16111015799035843798e+00 1.00935610773172310672e+01 5.59441908210337235374e+00 8.46387927547677421103e+00 5.23408014184308889583e+00 8.23317518515985113936e+00 6.15170781027268898100e+00 9.75792301274058893057e+00 +2727 13630.00 6.75547472047500718872e+01 5.16275519292256213078e+00 1.00980910777007029111e+01 5.59708366854982308780e+00 8.46715958473119023608e+00 5.23597579284856262660e+00 8.23627206264269950964e+00 6.15522500481412482287e+00 9.76231747821725015513e+00 +2728 13635.00 6.75810297976202036807e+01 5.16439988308257369454e+00 1.01026213306469578868e+01 5.59974862202019085800e+00 8.47043989399597130330e+00 5.23787122570006857813e+00 8.23936879950542433448e+00 6.15874290052846529164e+00 9.76671171461618214948e+00 +2729 13640.00 6.76073123905939610268e+01 5.16604422879168012628e+00 1.01071518360730827624e+01 5.60241394150915805739e+00 8.47372020331257402859e+00 5.23976644035615102268e+00 8.24246539588275695110e+00 6.16226149489723429298e+00 9.77110572093206464217e+00 +2730 13645.00 6.76335949835677183728e+01 5.16768823037116931118e+00 1.01116825939065293483e+01 5.60507962600104203688e+00 8.47700051253589847988e+00 5.24166143675462592455e+00 8.24556185186797385711e+00 6.16578078538122742458e+00 9.77549949619067426454e+00 +2731 13650.00 6.76598775765414757188e+01 5.16933188813196409228e+00 1.01162136040540229232e+01 5.60774567445943361577e+00 8.48028082176958619698e+00 5.24355621485403666782e+00 8.24865816757507808177e+00 6.16930076944124028415e+00 9.77989303937632925567e+00 +2732 13655.00 6.76861601695152330649e+01 5.17097520238498731260e+00 1.01207448664533732341e+01 5.61041208588937934110e+00 8.48356113103436904055e+00 5.24545077459219832861e+00 8.25175434312844480189e+00 6.17282144455879500100e+00 9.78428634951480269422e+00 +2733 13660.00 6.77124427624889904109e+01 5.17261817347225338892e+00 1.01252763810216723783e+01 5.61307885925446825581e+00 8.48684144029914833141e+00 5.24734511591729013702e+00 8.25485037861098369660e+00 6.17634280817395975305e+00 9.78867942562150972208e+00 +2734 13665.00 6.77387253554627477570e+01 5.17426080167359447870e+00 1.01298081476967336556e+01 5.61574599352865533319e+00 8.49012174953283782486e+00 5.24923923877749132316e+00 8.25794627414705928459e+00 6.17986485775789251562e+00 9.79307226669112651507e+00 +2735 13670.00 6.77650079484365335247e+01 5.17590308733102588690e+00 1.01343401664060088763e+01 5.61841348769625703596e+00 8.49340205881834720003e+00 5.25113314313134615929e+00 8.26104202984032021106e+00 6.18338759077138888642e+00 9.79746487177015623615e+00 +2736 13675.00 6.77912905414102766599e+01 5.17754503074510541438e+00 1.01388724370665865848e+01 5.62108134073122833740e+00 8.49668236808312826724e+00 5.25302682892703565187e+00 8.26413764577367437880e+00 6.18691100465451704338e+00 9.80185723986364898508e+00 +2737 13680.00 6.78175731343840482168e+01 5.17918663222675768054e+00 1.01434049596162800810e+01 5.62374955159715916864e+00 8.49996267736863586606e+00 5.25492029609200805851e+00 8.26723312205076332759e+00 6.19043509685770754203e+00 9.80624936999737606413e+00 +2738 13685.00 6.78438557273578055629e+01 5.18082789209726879420e+00 1.01479377339929044410e+01 5.62641811926800450294e+00 8.50324298659196209371e+00 5.25681354459517269362e+00 8.27032845877523214995e+00 6.19395986484175509190e+00 9.81064126119711588103e+00 +2739 13690.00 6.78701383203315629089e+01 5.18246881064683417861e+00 1.01524707601342765173e+01 5.62908704271771487271e+00 8.50652329589819977684e+00 5.25870657437434552151e+00 8.27342365604035379079e+00 6.19748530604672698274e+00 9.81503291249900300386e+00 +2740 13695.00 6.78964209133053202549e+01 5.18410938820710320840e+00 1.01570040379678481202e+01 5.63175632090988464995e+00 8.50980360512152422814e+00 5.26059938537770399591e+00 8.27651871392904148195e+00 6.20101141791269050429e+00 9.81942432293917555342e+00 +2741 13700.00 6.79227035062790918118e+01 5.18574962506827308317e+00 1.01615375674314325494e+01 5.63442595280810110125e+00 8.51308391438630529535e+00 5.26249197755342912330e+00 8.27961363254493498687e+00 6.20453819789007621210e+00 9.82381549155377520322e+00 +2742 13705.00 6.79489860992528349470e+01 5.18738952155162991176e+00 1.01660713484628484338e+01 5.63709593737595415774e+00 8.51636422369254297848e+00 5.26438435083933686798e+00 8.28270841196058604794e+00 6.20806564340858635376e+00 9.82820641737893829770e+00 +2743 13710.00 6.79752686922266207148e+01 5.18902907795773238320e+00 1.01706053810102705626e+01 5.63976627357703463872e+00 8.51964453290550238762e+00 5.26627650519396883766e+00 8.28580305226927116280e+00 6.21159375189792584138e+00 9.83259709945080651039e+00 +2744 13715.00 6.80015512852003780608e+01 5.19066829458714007473e+00 1.01751396650115175646e+01 5.64243696037493158713e+00 8.52292484219101176279e+00 5.26816844056550692699e+00 8.28889755355390356328e+00 6.21512252080852434233e+00 9.83698753682624271732e+00 +2745 13720.00 6.80278338781741354069e+01 5.19230717175077671754e+00 1.01796742004044062924e+01 5.64510799673323493408e+00 8.52620515142470125625e+00 5.27006015689176443573e+00 8.29199191589739115216e+00 6.21865194755971995022e+00 9.84137772854138681566e+00 +2746 13725.00 6.80541164711478927529e+01 5.19394570974919833617e+00 1.01842089871474765772e+01 5.64777938160517045674e+00 8.52948546068948232346e+00 5.27195165411055732818e+00 8.29508613937228744817e+00 6.22218202958121757717e+00 9.84576767366347205268e+00 +2747 13730.00 6.80803990641216500990e+01 5.19558390888296717236e+00 1.01887440251785470480e+01 5.65045111394396482041e+00 8.53276576997498992228e+00 5.27384293219079491877e+00 8.29818022406150390680e+00 6.22571276429235531680e+00 9.85015737122863122011e+00 +2748 13735.00 6.81066816570954074450e+01 5.19722176945264102699e+00 1.01932793144457942702e+01 5.65312319271320795622e+00 8.53604607919831437357e+00 5.27573399105992546509e+00 8.30127417003759049408e+00 6.22924414913319779430e+00 9.85454682030410111793e+00 +2749 13740.00 6.81329642500691647911e+01 5.19885929176914096672e+00 1.01978148549077651808e+01 5.65579561685575971097e+00 8.53932638843200386702e+00 5.27762483067649590396e+00 8.30436797737309362333e+00 6.23277618150235923622e+00 9.85893601993638313274e+00 +2750 13745.00 6.81592468430429505588e+01 5.20049647612266507934e+00 1.02023506465022713030e+01 5.65846838533521090397e+00 8.54260669772787828435e+00 5.27951545096795538115e+00 8.30746164614056326059e+00 6.23630885883990426777e+00 9.86332496921343704344e+00 +2751 13750.00 6.81855294360166936940e+01 5.20213332281377027755e+00 1.02068866891878595737e+01 5.66114149709442315839e+00 8.54588700698229253305e+00 5.28140585189284816892e+00 8.31055517640218610609e+00 6.23984217855480860493e+00 9.86771366718176246025e+00 +2752 13755.00 6.82118120289904652509e+01 5.20376983214301613856e+00 1.02114229829230698243e+01 5.66381495108662313953e+00 8.54916731624707537662e+00 5.28329603338898845521e+00 8.31364856823050502044e+00 6.24337613804568292153e+00 9.87210211290859085409e+00 +2753 13760.00 6.82380946219642225969e+01 5.20540600441096135143e+00 1.02159595276560857258e+01 5.66648874626503751273e+00 8.55244762550149317804e+00 5.28518599541492140048e+00 8.31674182167734699078e+00 6.24691073475259361913e+00 9.87649030547151873805e+00 +2754 13765.00 6.82643772149379799430e+01 5.20704183989743629724e+00 1.02204963233454488858e+01 5.66916288156216019445e+00 8.55572793480773086117e+00 5.28707573789809792686e+00 8.31983493682561991989e+00 6.25044596605342217543e+00 9.88087824394814262519e+00 +2755 13770.00 6.82906598079117372890e+01 5.20867733891336470720e+00 1.02250333699600677306e+01 5.67183735593121962637e+00 8.55900824403105353610e+00 5.28896526078669726445e+00 8.32292791371678397638e+00 6.25398182937787350255e+00 9.88526592741605192316e+00 +2756 13775.00 6.83169424007818548716e+01 5.21031250173857696240e+00 1.02295706674481206022e+01 5.67451216831507654348e+00 8.56228855332692795344e+00 5.29085456402889953154e+00 8.32602075241302230779e+00 6.25751832212455738613e+00 9.88965335494248343196e+00 +2757 13780.00 6.83432249937556122177e+01 5.21194732868399768222e+00 1.02341082157785141504e+01 5.67718731764622841496e+00 8.56556886255025418109e+00 5.29274364757288307004e+00 8.32911345297651806163e+00 6.26105544169208450000e+00 9.89404052562575841989e+00 +2758 13785.00 6.83695075867293979854e+01 5.21358182001909042924e+00 1.02386460149097953121e+01 5.67986280288826783647e+00 8.56884917184612682206e+00 5.29463251134609880211e+00 8.33220601545909289598e+00 6.26459318547906462982e+00 9.89842743854347162369e+00 +2759 13790.00 6.83957901797031553315e+01 5.21521597605477982285e+00 1.02431840648108707370e+01 5.68253862295296041651e+00 8.57212948107981453916e+00 5.29652115530709277635e+00 8.33529843989184016095e+00 6.26813155087374518359e+00 9.90281409279394431167e+00 +2760 13795.00 6.84220727726769126775e+01 5.21684979707089802048e+00 1.02477223654506452988e+01 5.68521477679353282042e+00 8.57540979032386729841e+00 5.29840957939367918073e+00 8.33839072635767131203e+00 6.27167053529546425494e+00 9.90720048745477299690e+00 +2761 13800.00 6.84483553656506700236e+01 5.21848328336800104665e+00 1.02522609167980309763e+01 5.68789126335284933589e+00 8.57869009961974171574e+00 5.30029778355403724532e+00 8.34148287487731465717e+00 6.27521013611174094393e+00 9.91158662163464576622e+00 +2762 13805.00 6.84746379586244273696e+01 5.22011643521555779301e+00 1.02567997188115693774e+01 5.69056808155303972541e+00 8.58197040884306439068e+00 5.30218576772598115809e+00 8.34457488550259007809e+00 6.27875035073154919019e+00 9.91597249442152062215e+00 +2763 13810.00 6.85009205515981847157e+01 5.22174925290376190645e+00 1.02613387714705321940e+01 5.69324523032660323452e+00 8.58525071808711714993e+00 5.30407353184732777152e+00 8.34766675827495774342e+00 6.28229117652240898195e+00 9.92035810492408742789e+00 +2764 13815.00 6.85272031445719420617e+01 5.22338173673317296419e+00 1.02658780747541893419e+01 5.69592270860603822058e+00 8.58853102736226325931e+00 5.30596107587662135785e+00 8.35075849323586894002e+00 6.28583261089329248250e+00 9.92474345224066567539e+00 +2765 13820.00 6.85534857375457278295e+01 5.22501388697325719335e+00 1.02704176286210877578e+01 5.69860051532384126460e+00 8.59181133663740936868e+00 5.30784839973094779708e+00 8.35385009042678206015e+00 6.28937465121171790372e+00 9.92912853547994522785e+00 +2766 13825.00 6.85797683305194851755e+01 5.22664570392457328296e+00 1.02749574330712238890e+01 5.70127864942287398975e+00 8.59509164589182539373e+00 5.30973550337921462727e+00 8.35694154987879045393e+00 6.29291729485557027601e+00 9.93351335375061239574e+00 +2767 13830.00 6.86060509234932425215e+01 5.22827718785659012468e+00 1.02794974880527831829e+01 5.70395710980454229144e+00 8.59837195514624141879e+00 5.31162238673851039295e+00 8.36003287162298747148e+00 6.29646053922345849685e+00 9.93789790617171853171e+00 +2768 13835.00 6.86323335164669998676e+01 5.22990833904913543506e+00 1.02840377935657585340e+01 5.70663589541170868102e+00 8.60165226441102426236e+00 5.31350904977774174398e+00 8.36312405570082617601e+00 6.30000438167253751232e+00 9.94228219184158668043e+00 +2769 13840.00 6.86586161094407572136e+01 5.23153915779240463735e+00 1.02885783495894251871e+01 5.70931500516650469734e+00 8.60493257367580355321e+00 5.31539549241399633672e+00 8.36621510213303487546e+00 6.30354881958068880010e+00 9.94666620989999650249e+00 +2770 13845.00 6.86848987024145145597e+01 5.23316964436622988899e+00 1.02931191560926933448e+01 5.71199443800142780958e+00 8.60821288297167619419e+00 5.31728171459545251309e+00 8.36930601095070691997e+00 6.30709385032579472607e+00 9.95104995946599935053e+00 +2771 13850.00 6.87111812953882861166e+01 5.23479979904007741709e+00 1.02976602130755559017e+01 5.71467419281788480134e+00 8.61149319219500242184e+00 5.31916771627029127956e+00 8.37239678217457417020e+00 6.31063947128573943246e+00 9.95543343964828331139e+00 +2772 13855.00 6.87374638883620292518e+01 5.23642962210414086854e+00 1.03022015205172916552e+01 5.71735426854837314181e+00 8.61477350147014853121e+00 5.32105349737632771223e+00 8.37548741583572287084e+00 6.31418567980731015865e+00 9.95981664958662626930e+00 +2773 13860.00 6.87637464813358150195e+01 5.23805911382788824682e+00 1.03067430783971705210e+01 5.72003466411502525801e+00 8.61805381072456455627e+00 5.32293905784101273326e+00 8.37857791194452339312e+00 6.31773247326839193505e+00 9.96419958841044639541e+00 +2774 13865.00 6.87900290743095723656e+01 5.23968827448078311448e+00 1.03112848867151889465e+01 5.72271537843997446515e+00 8.62133411999971066564e+00 5.32482439762288972673e+00 8.38166827053206198173e+00 6.32127984902613793139e+00 9.96858225524915653182e+00 +2775 13870.00 6.88163116672833297116e+01 5.24131710435302533568e+00 1.03158269454609889948e+01 5.72539641042462665865e+00 8.62461442923339660638e+00 5.32670951665977465694e+00 8.38475849160870545518e+00 6.32482780445842873718e+00 9.97296464924253811546e+00 +2776 13875.00 6.88425942602570870577e+01 5.24294560371407936117e+00 1.03203692546242020711e+01 5.72807775899111693008e+00 8.62789473850854271575e+00 5.32859441487911844604e+00 8.38784857518481707928e+00 6.32837633690169365508e+00 9.97734676953037080693e+00 +2777 13880.00 6.88688768532308444037e+01 5.24457377282304637589e+00 1.03249118141944649096e+01 5.73075942305121177611e+00 8.63117504776295874080e+00 5.33047909223946447810e+00 8.39093852127076189618e+00 6.33192544372344734427e+00 9.98172861525243249048e+00 +2778 13885.00 6.88951594462046017497e+01 5.24620161197012180310e+00 1.03294546241614142446e+01 5.73344140152704717650e+00 8.63445535701737831857e+00 5.33236354865790040947e+00 8.39402832988726999019e+00 6.33547512228084830355e+00 9.98611018555886786885e+00 +2779 13890.00 6.89214420391783590958e+01 5.24782912142477364625e+00 1.03339976845354115653e+01 5.73612369332002547395e+00 8.63773566631325095955e+00 5.33424778409296962423e+00 8.39711800103433603226e+00 6.33902536993104703811e+00 9.99049147958945660264e+00 +2780 13895.00 6.89477246321521448635e+01 5.24945630144610309031e+00 1.03385409953164622010e+01 5.73880629734191938240e+00 8.64101597552621036868e+00 5.33613179846175977872e+00 8.40020753471196535145e+00 6.34257618401047107426e+00 9.99487249650470666040e+00 +2781 13900.00 6.89740072251259022096e+01 5.25108315230357636239e+00 1.03430845564941975567e+01 5.74148921250449451037e+00 8.64429628481171974386e+00 5.33801559173317841100e+00 8.40329693094088447936e+00 6.34612756187627446991e+00 9.99925323545476096854e+00 +2782 13905.00 6.90002898180996595556e+01 5.25270967426666146594e+00 1.03476283680686194089e+01 5.74417243770916030599e+00 8.64757659406613754527e+00 5.33989916382431140107e+00 8.40638618971072659747e+00 6.34967950087524801717e+00 1.00036336956001274956e+01 +2783 13910.00 6.90265724110734169017e+01 5.25433586761518967023e+00 1.03521724300500892468e+01 5.74685597186768326594e+00 8.65085690335164514408e+00 5.34178251467297560140e+00 8.40947531102149525850e+00 6.35323199835417984360e+00 1.00080138761013142101e+01 +2784 13915.00 6.90528550039435344843e+01 5.25596173259789622989e+00 1.03567167424386106234e+01 5.74953981388146928566e+00 8.65413721257497137174e+00 5.34366564422735024209e+00 8.41256429486282542030e+00 6.35678505163913420972e+00 1.00123937761084658149e+01 +2785 13920.00 6.90791375969172918303e+01 5.25758726948425092473e+00 1.03612613052445468043e+01 5.75222396265192514875e+00 8.65741752191230062863e+00 5.34554855242525128745e+00 8.41565314124508034865e+00 6.36033865809762755106e+00 1.00167733948028168101e+01 +2786 13925.00 6.91054201898910491764e+01 5.25921247854371909369e+00 1.03658061184471677052e+01 5.75490841709081735189e+00 8.66069783111489677196e+00 5.34743123920449292541e+00 8.41874185015789677777e+00 6.36389281504535730960e+00 1.00211527313448769405e+01 +2787 13930.00 6.91317027828648065224e+01 5.26083736003540369808e+00 1.03703511821812082161e+01 5.75759317608918941289e+00 8.66397814039004288134e+00 5.34931370449252696631e+00 8.42183042158054639970e+00 6.36744751982911605381e+00 1.00255317849158789301e+01 +2788 13935.00 6.91579853758385922902e+01 5.26246191421840681102e+00 1.03748964962082936836e+01 5.76027823854844456264e+00 8.66725844963409564059e+00 5.35119594822716848626e+00 8.42491885551302743806e+00 6.37100276977496360331e+00 1.00299105546866975658e+01 +2789 13940.00 6.91842679688123354254e+01 5.26408614136219554780e+00 1.03794420608393469507e+01 5.76296360336999047291e+00 8.67053875897142489748e+00 5.35307797035659671536e+00 8.42800715193461513763e+00 6.37455856222969163838e+00 1.00342890398282040820e+01 +2790 13945.00 6.92105505617861069823e+01 5.26571004170514367360e+00 1.03839878758670849379e+01 5.76564926944486710880e+00 8.67381906815329273286e+00 5.35495977081862939428e+00 8.43109531083494267989e+00 6.37811489450899493647e+00 1.00386672395319980211e+01 +2791 13950.00 6.92368331547598643283e+01 5.26733361553744572348e+00 1.03885339413951527376e+01 5.76833523567447858937e+00 8.67709937744916715019e+00 5.35684134953035062665e+00 8.43418333219328353323e+00 6.38167176393893775810e+00 1.00430451529689506174e+01 +2792 13955.00 6.92631157477336216743e+01 5.26895686308711397317e+00 1.03930802574235450209e+01 5.77102150094986932061e+00 8.68037968667249160148e+00 5.35872270645030468472e+00 8.43727121598890583698e+00 6.38522916786631089536e+00 1.00474227793410300080e+01 +2793 13960.00 6.92893983407073790204e+01 5.27057978462361198524e+00 1.03976268239522671166e+01 5.77370806416207660305e+00 8.68365999600982085838e+00 5.36060384150594515518e+00 8.44035896219072157010e+00 6.38878710359644585992e+00 1.00518001178398304063e+01 +2794 13965.00 6.93156809336811505773e+01 5.27220238040604449736e+00 1.04021736410849552357e+01 5.77639492420214573087e+00 8.68694030519168869375e+00 5.36248475463508444960e+00 8.44344657078836569042e+00 6.39234556845540602410e+00 1.00561771676362283756e+01 +2795 13970.00 6.93419635266549079233e+01 5.27382465069351358267e+00 1.04067207087179696146e+01 5.77908207997147727042e+00 8.69022061448756133473e+00 5.36436544576517526650e+00 8.44653404175074484783e+00 6.39590455976925298387e+00 1.00605539279529132557e+01 +2796 13975.00 6.93682461196286794802e+01 5.27544659571402885234e+00 1.04112680269549553458e+01 5.78176953035075147369e+00 8.69350092371088578602e+00 5.36624591484439861233e+00 8.44962137504676746858e+00 6.39946407485368418122e+00 1.00649303979711213231e+01 +2797 13980.00 6.93945287126024368263e+01 5.27706821574742246383e+00 1.04158155958995468637e+01 5.78445727423100919395e+00 8.69678123311040174315e+00 5.36812616180020274470e+00 8.45270857064534020253e+00 6.40302411102439794632e+00 1.00693065769031857570e+01 +2798 13985.00 6.94208113055761941723e+01 5.27868951103206729414e+00 1.04203634153444646415e+01 5.78714531049292713050e+00 8.70006154224044969681e+00 5.37000618657040451609e+00 8.45579562851537147594e+00 6.40658466559709083299e+00 1.00736824639407007709e+01 +2799 13990.00 6.94470938985499515184e+01 5.28031048181670215058e+00 1.04249114856006368512e+01 5.78983363802754524841e+00 8.70334185153632233778e+00 5.37188598908245484864e+00 8.45888254862577149140e+00 6.41014573588746205957e+00 1.00780580583063610334e+01 +2800 13995.00 6.94733764915237088644e+01 5.28193112836042910629e+00 1.04294598064607733079e+01 5.79252225571554202332e+00 8.70662216075964678907e+00 5.37376556928453474882e+00 8.46196933093508008028e+00 6.41370731920084491406e+00 1.00824333592021311290e+01 +2801 14000.00 6.94996590844974804213e+01 5.28355145090162459098e+00 1.04340083781321606438e+01 5.79521116244795830852e+00 8.70990247004515616425e+00 5.37564492710409336240e+00 8.46505597539147913722e+00 6.41726941285293595030e+00 1.00868083658507003975e+01 +2802 14005.00 6.95259416774712235565e+01 5.28517144968902474744e+00 1.04385572005111573191e+01 5.79790035709510842565e+00 8.71318277927884388134e+00 5.37752406246858427608e+00 8.46814248197423680153e+00 6.42083201413870696683e+00 1.00911830774644002418e+01 +2803 14010.00 6.95522242704450093242e+01 5.28679112497136927118e+00 1.04431062738050446370e+01 5.80058983854803056346e+00 8.71646308857471652232e+00 5.37940297531581990143e+00 8.47122885063153674423e+00 6.42439512038421689510e+00 1.00955574932555602885e+01 +2804 14015.00 6.95785068634187666703e+01 5.28841047699739519317e+00 1.04476555978065412944e+01 5.80327960567703993178e+00 8.71974339779804097361e+00 5.38128166559398124491e+00 8.47431508131155553087e+00 6.42795872887407515606e+00 1.00999316124572349196e+01 +2805 14020.00 6.96047894563925240163e+01 5.29002950600547805493e+00 1.04522051728265683579e+01 5.80596965737317738387e+00 8.72302370741520327613e+00 5.38316013322015685105e+00 8.47740117397284009826e+00 6.43152283691361148499e+00 1.01043054342921152511e+01 +2806 14025.00 6.96310720493662813624e+01 5.29164821223399250982e+00 1.04567549986578480770e+01 5.80865999249639042290e+00 8.72630401631724161859e+00 5.38503837813216090780e+00 8.48048712855320196979e+00 6.43508744180816183444e+00 1.01086789579828959518e+01 +2807 14030.00 6.96573546423400529193e+01 5.29326659593167558882e+00 1.04613050755076582021e+01 5.81135060994808583246e+00 8.72958432558202268581e+00 5.38691640025744344911e+00 8.48357294502155134808e+00 6.43865254086306038062e+00 1.01130521827729964457e+01 +2808 14035.00 6.96836372353137960545e+01 5.29488465734726609924e+00 1.04658554033760005098e+01 5.81404150857784784989e+00 8.73286463484680197666e+00 5.38879419954418725780e+00 8.48665862330533826707e+00 6.44221813135254617322e+00 1.01174251078954746674e+01 +2809 14040.00 6.97099198282875676114e+01 5.29650239669841216283e+00 1.04704059822628767762e+01 5.81673268726635406267e+00 8.73614494409085651228e+00 5.39067177590947554933e+00 8.48974416336310788722e+00 6.44578421059231843060e+00 1.01217977325730217331e+01 +2810 14045.00 6.97362024212613391683e+01 5.29811981424421230003e+00 1.04749568122719249885e+01 5.81942414489428028190e+00 8.73942525336600084529e+00 5.39254912929112695252e+00 8.49282956512231024249e+00 6.44935077586698213281e+00 1.01261700560697871509e+01 +2811 14050.00 6.97624850142350965143e+01 5.29973691021268145107e+00 1.04795078935067866865e+01 5.82211588032157667527e+00 8.74270556262041864670e+00 5.39442625962695476716e+00 8.49591482853112722751e+00 6.45291782447150819024e+00 1.01305420776084638135e+01 +2812 14055.00 6.97887676071052140969e+01 5.30135368485255487059e+00 1.04840592258638221068e+01 5.82480789242891994206e+00 8.74598587188519793756e+00 5.39630316683404664957e+00 8.49899995351700532353e+00 6.45648535369050158295e+00 1.01349137964531959000e+01 +2813 14060.00 6.98150502000789714430e+01 5.30297013838147890397e+00 1.04886108094466710128e+01 5.82750018007625936178e+00 8.74926618114998078113e+00 5.39817985086058271804e+00 8.50208494001776315940e+00 6.46005336080856640280e+00 1.01392852118370466741e+01 +2814 14065.00 6.98413327930527287890e+01 5.30458627103782998091e+00 1.04931626443589731679e+01 5.83019274214427074554e+00 8.75254649039403176403e+00 5.40005631163401478290e+00 8.50516978798158085340e+00 6.46362184312067267200e+00 1.01436563230241603151e+01 +2815 14070.00 6.98676153860264861351e+01 5.30620208307034424422e+00 1.04977147307043754410e+01 5.83288557748253921886e+00 8.75582679968990440500e+00 5.40193254908179198992e+00 8.50825449731517835517e+00 6.46719079790106210481e+00 1.01480271292683248419e+01 +2816 14075.00 6.98938979790002434811e+01 5.30781757468630477348e+00 1.05022670683792309632e+01 5.83557868497174236921e+00 8.75910710893395894061e+00 5.40380856313136792579e+00 8.51133906796673933570e+00 6.47076022244470383527e+00 1.01523976298233229443e+01 +2817 14080.00 6.99201805719740292488e+01 5.30943274614481275364e+00 1.05068196575908228141e+01 5.83827206347182769974e+00 8.76238741818837496567e+00 5.40568435372055677846e+00 8.51442349985334878681e+00 6.47433011402584135396e+00 1.01567678239636656201e+01 +2818 14085.00 6.99464631649477865949e+01 5.31104759765315215247e+00 1.05113724983391527701e+01 5.84096571184274804267e+00 8.76566772773298730215e+00 5.40755992077681035823e+00 8.51750779290245496611e+00 6.47790046991871371063e+00 1.01611377109431426646e+01 +2819 14090.00 6.99727457579215439409e+01 5.31266212946006088913e+00 1.05159255907278605946e+01 5.84365962894444734843e+00 8.76894803670757383429e+00 5.40943526422757869909e+00 8.52059194703115174718e+00 6.48147128740792766166e+00 1.01655072900258982571e+01 +2820 14095.00 6.99990283508953012870e+01 5.31427634177282026684e+00 1.05204789346533029715e+01 5.84635381364724082687e+00 8.77222834600344647527e+00 5.41131038401067865351e+00 8.52367596216688383493e+00 6.48504256377808818712e+00 1.01698765604968119902e+01 +2821 14100.00 7.00253109438690586330e+01 5.31589023484016998111e+00 1.05250325304264098492e+01 5.84904826480071271533e+00 8.77550865523713596872e+00 5.41318528004319698965e+00 8.52675983822674155022e+00 6.48861429628270780512e+00 1.01742455216096683301e+01 +2822 14105.00 7.00515935368428159791e+01 5.31750380886939044700e+00 1.05295863779435325824e+01 5.85174298127517822365e+00 8.77878896447082546217e+00 5.41505995227331382580e+00 8.52984357511745194813e+00 6.49218648220639149571e+00 1.01786141726597065826e+01 +2823 14110.00 7.00778761298165733251e+01 5.31911706408849305205e+00 1.05341404774119578036e+01 5.85443796192021892466e+00 8.78206927370451317927e+00 5.41693440061811415376e+00 8.53292717276645795721e+00 6.49575911882338452585e+00 1.01829825129214430746e+01 +2824 14115.00 7.01041587227903448820e+01 5.32073000073585067327e+00 1.05386948287280439729e+01 5.85713320560614914001e+00 8.78534958301074908604e+00 5.41880862500505156021e+00 8.53601063107012336673e+00 6.49933220339756001493e+00 1.01873505416797502932e+01 +2825 14120.00 7.01304413157641022281e+01 5.32234261902911143238e+00 1.05432494320990723935e+01 5.85982871117218984125e+00 8.78862989226516511110e+00 5.42068262536157696729e+00 8.53909394995589998700e+00 6.50290573320315967720e+00 1.01917182582091445653e+01 +2826 14125.00 7.01567239087378737850e+01 5.32395491917555574446e+00 1.05478042875250412891e+01 5.86252447747828941971e+00 8.79191020151958468887e+00 5.42255640163586960512e+00 8.54217712932014627825e+00 6.50647970549369869531e+00 1.01960856618048669731e+01 +2827 14130.00 7.01830065017116311310e+01 5.32556690140319588522e+00 1.05523593951095939758e+01 5.86522050337403300091e+00 8.79519051080509228768e+00 5.42442995372428793388e+00 8.54526016906958219010e+00 6.51005411754341700714e+00 1.02004527517621550459e+01 +2828 14135.00 7.02092890946853884770e+01 5.32717856595040384349e+00 1.05569147549563719934e+01 5.86791678772973224198e+00 8.79847082005951008910e+00 5.42630328158537444949e+00 8.54834306910057151185e+00 6.51362896661619306116e+00 1.02048195273658919291e+01 +2829 14140.00 7.02355716876591458231e+01 5.32878991300373439088e+00 1.05614703670653717893e+01 5.87061332937424573686e+00 8.80175112935538273007e+00 5.42817638513622036101e+00 8.55142582933019923530e+00 6.51720424997590352945e+00 1.02091859879216748652e+01 +2830 14145.00 7.02618542806329031691e+01 5.33040094281192544656e+00 1.05660262316438799957e+01 5.87331012717788603084e+00 8.80503143857870718136e+00 5.43004926429390888387e+00 8.55450844965482204429e+00 6.52077996487606004195e+00 1.02135521327351153076e+01 +2831 14150.00 7.02881368736066605152e+01 5.33201165556153178215e+00 1.05705823486918948362e+01 5.87600717996950816513e+00 8.80831174785385329074e+00 5.43192191899625775875e+00 8.55759092996043868595e+00 6.52435610858054282346e+00 1.02179179611014543383e+01 +2832 14155.00 7.03144194665804320721e+01 5.33362205149092716283e+00 1.05751387182094145345e+01 5.87870448661942646140e+00 8.81159205709790427363e+00 5.43379434917071524325e+00 8.56067327015377088628e+00 6.52793267834286350393e+00 1.02222834723262927525e+01 +2833 14160.00 7.03407020595542036290e+01 5.33523213080739466818e+00 1.05796953405073637100e+01 5.88140204596686189120e+00 8.81487236635232385140e+00 5.43566655474473670040e+00 8.56375547012081383969e+00 6.53150967142689786726e+00 1.02266486657152420037e+01 +2834 14165.00 7.03669846525279609750e+01 5.33684189371821382508e+00 1.05842522154821025993e+01 5.88409985685103364972e+00 8.81815267558601156850e+00 5.43753853564577216417e+00 8.56683752975792600637e+00 6.53508708507579871849e+00 1.02310135405946294185e+01 +2835 14170.00 7.03932672455017183211e+01 5.33845134045139690926e+00 1.05888093432372674130e+01 5.88679791812152686248e+00 8.82143298486115590151e+00 5.43941029179090573820e+00 8.56991944895110080438e+00 6.53866491654307413484e+00 1.02353780962700628976e+01 +2836 14175.00 7.04195498384754756671e+01 5.34006047120386195814e+00 1.05933667238765050200e+01 5.88949622862792754319e+00 8.82471329418812189260e+00 5.44128182311795693948e+00 8.57300122758633520448e+00 6.54224316309260700564e+00 1.02397423320575118311e+01 +2837 14180.00 7.04458324314492472240e+01 5.34166928618289116315e+00 1.05979243576070931709e+01 5.89219478720945488703e+00 8.82799360340108307810e+00 5.44315312954400987167e+00 8.57608286554962262471e+00 6.54582182195717621198e+00 1.02441062472833088748e+01 +2838 14185.00 7.04721150244229903592e+01 5.34327778560612820513e+00 1.06024822444290371948e+01 5.89489359271569490772e+00 8.83127391267622741111e+00 5.44502421099651812142e+00 8.57916436272696003584e+00 6.54940089040066464321e+00 1.02484698412737884610e+01 +2839 14190.00 7.04983976173967619161e+01 5.34488596968085794003e+00 1.06070403844459697495e+01 5.89759264397550264647e+00 8.83455422192028194672e+00 5.44689506741329676487e+00 8.58224571899397759012e+00 6.55298036566621977528e+00 1.02528331133552832455e+01 +2840 14195.00 7.05246802102668794987e+01 5.34649383861436167109e+00 1.06115987776578979407e+01 5.90029193983846589333e+00 8.83783453117469797178e+00 5.44876569871143079382e+00 8.58532693423666692922e+00 6.55656024498662493016e+00 1.02571960628541276606e+01 +2841 14200.00 7.05509628032406510556e+01 5.34810139261391981336e+00 1.06161574243757446112e+01 5.90299147914380029079e+00 8.84111484043947903899e+00 5.45063610480800964098e+00 8.58840800832029849232e+00 6.56014052562575855632e+00 1.02615586891070176279e+01 +2842 14205.00 7.05772453962144084016e+01 5.34970863187645129244e+00 1.06207163244958628923e+01 5.90569126072036798547e+00 8.84439514970426010620e+00 5.45250628563048511666e+00 8.59148894113086925017e+00 6.56372120481640486389e+00 1.02659209914402893560e+01 +2843 14210.00 7.06035279891881657477e+01 5.35131555660923918794e+00 1.06252754783291827323e+01 5.90839128341774788566e+00 8.84767545898976770502e+00 5.45437624111666874427e+00 8.59456973253363898380e+00 6.56730227980171310520e+00 1.02702829692113635218e+01 +2844 14215.00 7.06298105821619230937e+01 5.35292216701956391489e+00 1.06298348857720572624e+01 5.91109154607516629198e+00 8.85095576825455054859e+00 5.45624597118365173287e+00 8.59765038239387990870e+00 6.57088374782483342074e+00 1.02746446217465781103e+01 +2845 14220.00 7.06560931751356946506e+01 5.35452846330434439892e+00 1.06343945469281315752e+01 5.91379204752147558111e+00 8.85423607748823826569e+00 5.45811547574852085063e+00 8.60073089059758366659e+00 6.57446560611855002065e+00 1.02790059484033573511e+01 +2846 14225.00 7.06823757681094377858e+01 5.35613444567086283143e+00 1.06389544621083267373e+01 5.91649278658553612331e+00 8.85751638675302110926e+00 5.45998475474909117366e+00 8.60381125701001892025e+00 6.57804785192601215726e+00 1.02833669485080356765e+01 +2847 14230.00 7.07086583610832235536e+01 5.35774011430567220771e+00 1.06435146313126445250e+01 5.91919376211693037959e+00 8.86079669598670882635e+00 5.46185380809208353980e+00 8.60689148147572247183e+00 6.58163048248000492890e+00 1.02877276214387656239e+01 +2848 14235.00 7.07349409540569808996e+01 5.35934546941605560733e+00 1.06480750546447229254e+01 5.92189497293414923718e+00 8.86407700530330977529e+00 5.46372263571531391335e+00 8.60997156388069129207e+00 6.58521349502367669970e+00 1.02920879665322448915e+01 +2849 14240.00 7.07612235470307382457e+01 5.36095051119892929137e+00 1.06526357322082052548e+01 5.92459641787641544397e+00 8.86735731431935292335e+00 5.46559123753587261518e+00 8.61305150406946218311e+00 6.58879688677944930220e+00 1.02964479831562627510e+01 +2850 14245.00 7.07875061400044955917e+01 5.36255523985121307362e+00 1.06571966641067330528e+01 5.92729809578295085970e+00 8.87063762379141529379e+00 5.46745961348120790291e+00 8.61613130190730380775e+00 6.59238065498010694654e+00 1.03008076706578819426e+01 +2851 14250.00 7.08137887329782529378e+01 5.36415965556982321516e+00 1.06617578504439460829e+01 5.93000000546188044126e+00 8.87391793307692466897e+00 5.46932776346840832105e+00 8.61921095723875474448e+00 6.59596479685843295471e+00 1.03051670284048917381e+01 +2852 14255.00 7.08400713259520102838e+01 5.36576375854131359944e+00 1.06663192913234858850e+01 5.93270214577315702087e+00 8.87719824230025089662e+00 5.47119568742492567992e+00 8.62229046993944159283e+00 6.59954930965758013173e+00 1.03095260557650814093e+01 +2853 14260.00 7.08663539189257676298e+01 5.36736754896260492842e+00 1.06708809870562735256e+01 5.93540451551454051327e+00 8.88047855160648502704e+00 5.47306338527820823714e+00 8.62536983985390648400e+00 6.60313419058960260344e+00 1.03138847521062437806e+01 +2854 14265.00 7.08926365118995391867e+01 5.36897102703061257500e+00 1.06754429375386692413e+01 5.93810711353561870851e+00 8.88375886066398479102e+00 5.47493085693498215960e+00 8.62844906682668799647e+00 6.60671943688728724453e+00 1.03182431168065296134e+01 +2855 14270.00 7.09189191048732965328e+01 5.37057419292152626866e+00 1.06800051429779578882e+01 5.94080993865488515837e+00 8.88703917009459232190e+00 5.47679810232269836945e+00 8.63152815071268797453e+00 6.61030504577305322300e+00 1.03226011492233649136e+01 +2856 14275.00 7.09452016978470680897e+01 5.37217704685299235479e+00 1.06845676033741359134e+01 5.94351298969082808554e+00 8.89031947935937338912e+00 5.47866512136880778883e+00 8.63460709135644144396e+00 6.61389101449004979116e+00 1.03269588487556340795e+01 +2857 14280.00 7.09714842908208254357e+01 5.37377958898047225489e+00 1.06891303191417676999e+01 5.94621626548267023793e+00 8.89359978860342792473e+00 5.48053191400076045170e+00 8.63768588860249231232e+00 6.61747734023997047359e+00 1.03313162147607595642e+01 +2858 14285.00 7.09977668837945827818e+01 5.37538181952161320254e+00 1.06936932901772152604e+01 5.94891976484890605548e+00 8.89688009789930056570e+00 5.48239848012528074861e+00 8.64076454229537915808e+00 6.62106402024523532646e+00 1.03356732466376257662e+01 +2859 14290.00 7.10240494767683401278e+01 5.37698373864223988505e+00 1.06982565165841165822e+01 5.95162348661839057939e+00 8.90016040717444667507e+00 5.48426481966982048988e+00 8.64384305226927018850e+00 6.62465105174899449025e+00 1.03400299437747502651e+01 +2860 14295.00 7.10503320697421116847e+01 5.37858534652890618588e+00 1.07028199986733945082e+01 5.95432742960961469691e+00 8.90344071638740608421e+00 5.48613093255146466731e+00 8.64692141836871108751e+00 6.62823843195293793684e+00 1.03443863055502855985e+01 +2861 14300.00 7.10766146627158548199e+01 5.38018664338889518461e+00 1.07073837364450508147e+01 5.95703159263070958218e+00 8.90672102566255041722e+00 5.48799681869766864395e+00 8.64999964043823688087e+00 6.63182615808985431727e+00 1.03487423313631161648e+01 +2862 14305.00 7.11028972556896263768e+01 5.38178762937766652641e+00 1.07119477300027252653e+01 5.95973597453125769619e+00 8.91000133491696821864e+00 5.48986247801514970490e+00 8.65307771830165606275e+00 6.63541422736143449157e+00 1.03530980206017595435e+01 +2863 14310.00 7.11291798486633979337e+01 5.38338830469213913688e+00 1.07165119796573424793e+01 5.96244057410902428273e+00 8.91328164417138424369e+00 5.49172791045209240934e+00 8.65615565179314394584e+00 6.63900263699009940410e+00 1.03574533726754616225e+01 +2864 14315.00 7.11554624416371552798e+01 5.38498866951886689947e+00 1.07210764853052591405e+01 5.96514539019286615940e+00 8.91656195343616708726e+00 5.49359311589448839896e+00 8.65923344074687939553e+00 6.64259138420863326502e+00 1.03618083869727399815e+01 +2865 14320.00 7.11817450346109126258e+01 5.38658872402367538967e+00 1.07256412472573998684e+01 5.96785042159091005942e+00 8.91984226270094637812e+00 5.49545809429051956840e+00 8.66231108498666557693e+00 6.64618046620836633309e+00 1.03661630628613821159e+01 +2866 14325.00 7.12080276275846699718e+01 5.38818846839311849095e+00 1.07302062656174044264e+01 5.97055566713201457674e+00 8.92312257203827563501e+00 5.49732284553654437786e+00 8.66538858435704639760e+00 6.64976988021171688814e+00 1.03705173998750090902e+01 +2867 14330.00 7.12343102205584273179e+01 5.38978790280338504459e+00 1.07347715405925576704e+01 5.97326112563467059857e+00 8.92640288120978020459e+00 5.49918736957037612711e+00 8.66846593866110382010e+00 6.65335962343074616143e+00 1.03748713972570367758e+01 +2868 14335.00 7.12605928134285591113e+01 5.39138702744103071041e+00 1.07393370721828560477e+01 5.97596679590700841089e+00 8.92968319048492631396e+00 5.50105166629874009487e+00 8.67154314773300782804e+00 6.65694969308787065643e+00 1.03792250545929025662e+01 +2869 14340.00 7.12868754064023022465e+01 5.39298584247187928753e+00 1.07439028605955826379e+01 5.97867267677788394309e+00 8.93296349973934233901e+00 5.50291573564908897964e+00 8.67462021138620720251e+00 6.66054008637441885554e+00 1.03835783711571210119e+01 +2870 14345.00 7.13131579993760880143e+01 5.39458434807212139361e+00 1.07484689060380205206e+01 5.98137876704505888625e+00 8.93624380900412340623e+00 5.50477957752814006653e+00 8.67769712945487903255e+00 6.66413080051281614402e+00 1.03879313464314844140e+01 +2871 14350.00 7.13394405923498453603e+01 5.39618254441794675813e+00 1.07530352085101714721e+01 5.98408506552702856851e+00 8.93952411828963100504e+00 5.50664319186335138312e+00 8.68077390175246499382e+00 6.66772183271511398317e+00 1.03922839797941470863e+01 +2872 14355.00 7.13657231853236027064e+01 5.39778043168554422238e+00 1.07576017683229530064e+01 5.98679157104228565345e+00 8.94280442750259396689e+00 5.50850657858216941065e+00 8.68385052808205060160e+00 6.67131318017264529630e+00 1.03966362707269048826e+01 +2873 14360.00 7.13920057782973600524e+01 5.39937801005110529218e+00 1.07621685855800119924e+01 5.98949828239895776250e+00 8.94608473676737325775e+00 5.51036973758095616205e+00 8.68692700827780761585e+00 6.67490484010782836322e+00 1.04009882186079138933e+01 +2874 14365.00 7.14182883712711173985e+01 5.40097527967008961269e+00 1.07667356603849846408e+01 5.99220519841553578289e+00 8.94936504605288440928e+00 5.51223266878716078310e+00 8.69000334213245473336e+00 6.67849680971199166635e+00 1.04053398228153231031e+01 +2875 14370.00 7.14445709642448747445e+01 5.40257224071868868975e+00 1.07713029929451558075e+01 5.99491231790015000058e+00 8.95264535530730043433e+00 5.51409537212823686048e+00 8.69307952946980400100e+00 6.68208908619719377242e+00 1.04096910829345734584e+01 +2876 14375.00 7.14708535572186320906e+01 5.40416889337308958829e+00 1.07758705833641652561e+01 5.99761963965056388304e+00 8.95592566457208150155e+00 5.51595784751090523201e+00 8.69615557009293560498e+00 6.68568166677548880727e+00 1.04140419983438174967e+01 +2877 14380.00 7.14971361501924178583e+01 5.40576523778875728254e+00 1.07804384318492978423e+01 6.00032716249563335964e+00 8.95920597385758910036e+00 5.51782009484189117643e+00 8.69923146380492973151e+00 6.68927454863820791786e+00 1.04183925684212042029e+01 +2878 14385.00 7.15234187431661752044e+01 5.40736127415224210324e+00 1.07850065386078313168e+01 6.00303488523312456238e+00 8.96248628309127859382e+00 5.51968211405900621713e+00 8.70230721041923871439e+00 6.69286772898704374057e+00 1.04227427926485365361e+01 +2879 14390.00 7.15497013361399325504e+01 5.40895700260864398246e+00 1.07895749036397674558e+01 6.00574280668152837848e+00 8.96576659233533312943e+00 5.52154390506897829738e+00 8.70538280972857236861e+00 6.69646120502368624727e+00 1.04270926705076014684e+01 +2880 14395.00 7.15759839291136898964e+01 5.41055242333415176148e+00 1.07941435272560308789e+01 6.00845092563861005175e+00 8.96904690164157081256e+00 5.52340546778889063262e+00 8.70845826153602153852e+00 6.70005497394983073889e+00 1.04314422013765604191e+01 +2881 14400.00 7.16022665220874472425e+01 5.41214753648422686183e+00 1.07987124096639011128e+01 6.01115924090213216147e+00 8.97232721087525852965e+00 5.52526680213583354373e+00 8.71153356564466285761e+00 6.70364903296716985182e+00 1.04357913846335605967e+01 +2882 14405.00 7.16285491150612045885e+01 5.41374234222469574718e+00 1.08032815508633817103e+01 6.01386775130095330155e+00 8.97560752012967455471e+00 5.52712790802689291070e+00 8.71460872184721502265e+00 6.70724337927739355791e+00 1.04401402199676827109e+01 +2883 14410.00 7.16548317080349761454e+01 5.41533684073174637064e+00 1.08078509510617504219e+01 6.01657645562247189730e+00 8.97888782938409235612e+00 5.52898878536879134771e+00 8.71768372994675821985e+00 6.71083801006146885015e+00 1.04444887066534413123e+01 +2884 14415.00 7.16811143010087334915e+01 5.41693103214011451030e+00 1.08124206104662903272e+01 6.01928535268518327683e+00 8.98216813862814511538e+00 5.53084943408897888872e+00 8.72075858973601469870e+00 6.71443292253145163073e+00 1.04488368441726269253e+01 +2885 14420.00 7.17073968939825050484e+01 5.41852491662598723110e+00 1.08169905292842845057e+01 6.02199444128684824307e+00 8.98544844791365271419e+00 5.53270985409418170065e+00 8.72383330099733811380e+00 6.71802811386830711626e+00 1.04531846320070389567e+01 +2886 14425.00 7.17336794869562623944e+01 5.42011849434482773091e+00 1.08215607077230178135e+01 6.02470372022523203981e+00 8.98872875717843378141e+00 5.53457004530148655164e+00 8.72690786353380509865e+00 6.72162358128409120894e+00 1.04575320696384697072e+01 +2887 14430.00 7.17599620799300197405e+01 5.42171176546246158523e+00 1.08261311457824849214e+01 6.02741318830846495302e+00 8.99200906643285335917e+00 5.53643000762797754533e+00 8.72998227711741137114e+00 6.72521932195976823721e+00 1.04618791565487114781e+01 +2888 14435.00 7.17862446729037770865e+01 5.42330473011362101943e+00 1.08307018437736104488e+01 6.03012284434467282779e+00 8.99528937567690434207e+00 5.53828974099074589077e+00 8.73305654154087029895e+00 6.72881533309703083745e+00 1.04662258922195654520e+01 +2889 14440.00 7.18125272658775344325e+01 5.42489738847449753933e+00 1.08352728019036774754e+01 6.03283268713162090791e+00 8.99856968493132036713e+00 5.54014924530687569160e+00 8.73613065659690413156e+00 6.73241161187684422629e+00 1.04705722759255390741e+01 +2890 14445.00 7.18388098588513059894e+01 5.42648974069018663613e+00 1.08398440201726860010e+01 6.03554271545670939503e+00 9.00184999421683151866e+00 5.54200852047272629619e+00 8.73920462205750148144e+00 6.73600815550090192829e+00 1.04749183074593528175e+01 +2891 14450.00 7.18650924518250491246e+01 5.42808178691615061950e+00 1.08444154989952004087e+01 6.03825292814879599490e+00 9.00513030346088250155e+00 5.54386756641575217941e+00 8.74227843771537926898e+00 6.73960496116053064952e+00 1.04792639860955212328e+01 +2892 14455.00 7.18913750447988206815e+01 5.42967352729748764517e+00 1.08489872384748604617e+01 6.04096332397454904850e+00 9.00841061270493703717e+00 5.54572638305303566852e+00 8.74535210333216106449e+00 6.74320202603669471841e+00 1.04836093113158366208e+01 +2893 14460.00 7.19176576377725922384e+01 5.43126496200002328862e+00 1.08535592386116661601e+01 6.04367390176282981429e+00 9.01169092200080967814e+00 5.54758497029130381861e+00 8.74842561870056911744e+00 6.74679934733108765954e+00 1.04879542827057345988e+01 +2894 14465.00 7.19439402307463495845e+01 5.43285609115848799888e+00 1.08581314999238234265e+01 6.04638466029067167540e+00 9.01497123125522747955e+00 5.54944332804764162148e+00 8.75149898359259204028e+00 6.75039692221431053554e+00 1.04922988996433712572e+01 +2895 14470.00 7.19702228237201069305e+01 5.43444691493871268051e+00 1.08627040223076907210e+01 6.04909559836620225326e+00 9.01825154052000677041e+00 5.55130145623913762165e+00 8.75457219779057993492e+00 6.75399474788805509462e+00 1.04966431616105388969e+01 +2896 14475.00 7.19965054165902245131e+01 5.43603743347542511799e+00 1.08672768060741908869e+01 6.05180671478718856804e+00 9.02153184976405952966e+00 5.55315935476214850297e+00 8.75764526104580021126e+00 6.75759282154364981920e+00 1.05009870682963182276e+01 +2897 14480.00 7.20227880095639818592e+01 5.43762764691372524339e+00 1.08718498514306070035e+01 6.05451800835139231083e+00 9.02481215903920563903e+00 5.55501702355449289428e+00 8.76071817314060119486e+00 6.76119114035169488375e+00 1.05053306189752166944e+01 +2898 14485.00 7.20490706025377534161e+01 5.43921755541944040857e+00 1.08764231585842221506e+01 6.05722947785657961361e+00 9.02809246830398670625e+00 5.55687446250216332544e+00 8.76379093383661356143e+00 6.76478970150351965884e+00 1.05096738132326752435e+01 +2899 14490.00 7.20753531955114965513e+01 5.44080715911693602038e+00 1.08809967276386743151e+01 6.05994112209014801351e+00 9.03137277755840450766e+00 5.55873167153261160678e+00 8.76686354291618741286e+00 6.76838850219045173873e+00 1.05140166506541294922e+01 +2900 14495.00 7.21016357884852823190e+01 5.44239645816167705306e+00 1.08855705588012465768e+01 6.06265293984986541886e+00 9.03465308682318379851e+00 5.56058865056292539464e+00 8.76993600014095164852e+00 6.77198753959345811637e+00 1.05183591306177319780e+01 +2901 14500.00 7.21279183814590396651e+01 5.44398545268839573197e+00 1.08901446523828617785e+01 6.06536492993349263259e+00 9.03793339616051483176e+00 5.56244539948946403740e+00 8.77300830526216479655e+00 6.77558681090386283330e+00 1.05227012526052750019e+01 +2902 14505.00 7.21542009744327970111e+01 5.44557414285255347863e+00 1.08947190084871614602e+01 6.06807709113879756302e+00 9.04121370535274593294e+00 5.56430191823967845721e+00 8.77608045804145397994e+00 6.77918631329227050486e+00 1.05270430163058410500e+01 +2903 14510.00 7.21804835674065543571e+01 5.44716252878888163025e+00 1.08992936273214269249e+01 6.07078942224281092876e+00 9.04449401459679869220e+00 5.56615820670992622610e+00 8.77915245825080781117e+00 6.78278604393964279495e+00 1.05313844209939375673e+01 +2904 14515.00 7.22067661603803117032e+01 5.44875061063211596490e+00 1.09038685091965827922e+01 6.07350192206403161066e+00 9.04777432389267310953e+00 5.56801426482766004256e+00 8.78222430565185518958e+00 6.78638600003731085053e+00 1.05357254663586452637e+01 +2905 14520.00 7.22330487533540690492e+01 5.45033838851698959616e+00 1.09084436541126308384e+01 6.07621458937949032730e+00 9.05105463311599933718e+00 5.56987009248923925497e+00 8.78529599998548960116e+00 6.78998617876623544731e+00 1.05400661518817582163e+01 +2906 14525.00 7.22593313463278263953e+01 5.45192586259896394552e+00 1.09130190623804885774e+01 6.07892742298695409886e+00 9.05433494239114189384e+00 5.57172568961174974334e+00 8.78836754101333816891e+00 6.79358657729702208883e+00 1.05444064770450687263e+01 +2907 14530.00 7.22856139393016121630e+01 5.45351303300240797256e+00 1.09175947343110824050e+01 6.08164042166345808482e+00 9.05761525165592296105e+00 5.57358105611228005216e+00 8.79143892849702801584e+00 6.79718719282099392842e+00 1.05487464414340177399e+01 +2908 14535.00 7.23118965322753552982e+01 5.45509989987241805665e+00 1.09221706699044105449e+01 6.08435358422749494878e+00 9.06089556089997749666e+00 5.57543619189755279564e+00 8.79451016217745618064e+00 6.80078802251911973542e+00 1.05530860445303975581e+01 +2909 14540.00 7.23381791252491268551e+01 5.45668646333336404552e+00 1.09267468695750409324e+01 6.08706690944573836077e+00 9.06417587016475856387e+00 5.57729109686392643397e+00 8.79758124180588119145e+00 6.80438906356199613157e+00 1.05574252859196420218e+01 +2910 14545.00 7.23644617182228842012e+01 5.45827272353034498309e+00 1.09313233334266097785e+01 6.08978039611594912373e+00 9.06745617946063120485e+00 5.57914577094921604328e+00 8.80065216714393372399e+00 6.80799031313059010984e+00 1.05617641649799072212e+01 +2911 14550.00 7.23907443111966415472e+01 5.45985868059809043018e+00 1.09359000616664037153e+01 6.09249404303589248144e+00 9.07073648869431892194e+00 5.58100021403941770615e+00 8.80372293792214222208e+00 6.81159176840586688684e+00 1.05661026814002720897e+01 +2912 14555.00 7.24170269041703988933e+01 5.46144433465061052146e+00 1.09404770545016987171e+01 6.09520784898260803431e+00 9.07401679793837345755e+00 5.58285442605161907892e+00 8.80679355388140727712e+00 6.81519342655842308432e+00 1.05704408347661704681e+01 +2913 14560.00 7.24433094971441704502e+01 5.46302968583299808358e+00 1.09450543122434229559e+01 6.09792181275385480888e+00 9.07729710721351779057e+00 5.58470840689254188760e+00 8.80986401478335245940e+00 6.81879528477959251376e+00 1.05747786243521133542e+01 +2914 14565.00 7.24695920901179277962e+01 5.46461473427999067098e+00 1.09496318349952161952e+01 6.10063593313703744769e+00 9.08057741654048378166e+00 5.58656215647927290036e+00 8.81293432036887836034e+00 6.82239734022960586657e+00 1.05791160499508229975e+01 +2915 14570.00 7.24958746830916993531e+01 5.46619948010558953655e+00 1.09542096230680012781e+01 6.10335020891955259970e+00 9.08385772568089500112e+00 5.58841567471853650773e+00 8.81600447036851697646e+00 6.82599959008943191208e+00 1.05834531110440899226e+01 +2916 14575.00 7.25221572760654566991e+01 5.46778392344453045837e+00 1.09587876765654179678e+01 6.10606463887843808891e+00 9.08713803499749772641e+00 5.59026896152741947787e+00 8.81907446451280030431e+00 6.82960203154003320236e+00 1.05877898072173515231e+01 +2917 14580.00 7.25484398690392140452e+01 5.46936806444190803944e+00 1.09633659959020342001e+01 6.10877922182182153676e+00 9.09041834426227879362e+00 5.59212201679191611703e+00 8.82214430256335191416e+00 6.83320466176237406586e+00 1.05921261378487638893e+01 +2918 14585.00 7.25747224620129713912e+01 5.47095190319100321830e+00 1.09679445810778446457e+01 6.11149395651637661331e+00 9.09369865349596651072e+00 5.59397484043947823551e+00 8.82521398422998437638e+00 6.83680747791669052305e+00 1.05964621027310439416e+01 +2919 14590.00 7.26010050549867287373e+01 5.47253543984727475191e+00 1.09725234325074154640e+01 6.11420884175986589781e+00 9.09697896277111084373e+00 5.59582743237683022386e+00 8.82828350927431593220e+00 6.84041047717358452473e+00 1.06007977012423442176e+01 +2920 14595.00 7.26272876479605002942e+01 5.47411867451436418008e+00 1.09771025502943899710e+01 6.11692387633968870375e+00 9.10025927203589191095e+00 5.59767979250032965410e+00 8.83135287739579055710e+00 6.84401365672438366516e+00 1.06051329329681003344e+01 +2921 14600.00 7.26535702409342434294e+01 5.47570160732700550454e+00 1.09816819347496910098e+01 6.11963905903288374333e+00 9.10353958143540609171e+00 5.59953192073742567203e+00 8.83442208835603537409e+00 6.84761701373968811879e+00 1.06094677974937514620e+01 +2922 14605.00 7.26798528339080291971e+01 5.47728423840956590851e+00 1.09862615859769565674e+01 6.12235438863721359581e+00 9.10681989054472573741e+00 5.60138381697411791293e+00 8.83749114186485407174e+00 6.85122054539009894825e+00 1.06138022945083729809e+01 +2923 14610.00 7.27061354268817865432e+01 5.47886656786568870814e+00 1.09908415043907510267e+01 6.12506986392971430888e+00 9.11010019981987184678e+00 5.60323548113785285807e+00 8.84056003766314191239e+00 6.85482424883585217401e+00 1.06181364233901174288e+01 +2924 14615.00 7.27324180197519041258e+01 5.48044859584047117096e+00 1.09954216900947177038e+01 6.12778548368742281838e+00 9.11338050908465291400e+00 5.60508691312499340853e+00 8.84362877546070969004e+00 6.85842812126827539032e+00 1.06224701838280637389e+01 +2925 14620.00 7.27587006127256614718e+01 5.48203032243755394859e+00 1.10000021433997776654e+01 6.13050124670810259175e+00 9.11666081834943398121e+00 5.60693811285262544430e+00 8.84669735499845089066e+00 6.86203215984760550583e+00 1.06268035753040042124e+01 +2926 14625.00 7.27849832056994188179e+01 5.48361174778130511243e+00 1.10045828644095724513e+01 6.13321715176878967668e+00 9.11994112757275843251e+00 5.60878908021710564924e+00 8.84976577598617097919e+00 6.86563636175480773716e+00 1.06311365975070177825e+01 +2927 14630.00 7.28112657986731761639e+01 5.48519287198573035624e+00 1.10091638535386664444e+01 6.13593319765688249845e+00 9.12322143685826780768e+00 5.61063981512516107841e+00 8.85283403815440195217e+00 6.86924072415011721660e+00 1.06354692499189003030e+01 +2928 14635.00 7.28375483916469477208e+01 5.48677369516483537382e+00 1.10137451108907011843e+01 6.13864938315978569960e+00 9.12650174617486875661e+00 5.61249031748351256965e+00 8.85590214122331609303e+00 6.87284524421449916076e+00 1.06398015321250856147e+01 +2929 14640.00 7.28638309846206908560e+01 5.48835421745335416688e+00 1.10183266368802392776e+01 6.14136570704416762112e+00 9.12978205537746489995e+00 5.61434058721961282146e+00 8.85897008491308213252e+00 6.87644991911855285593e+00 1.06441334437110111111e+01 +2930 14645.00 7.28901135775944766237e+01 5.48993443893419641455e+00 1.10229084315072807243e+01 6.14408216810779439498e+00 9.13306236464224596716e+00 5.61619062420908932154e+00 8.86203786893350375919e+00 6.88005474603288114110e+00 1.06484649843657539492e+01 +2931 14650.00 7.29163961705682339698e+01 5.49151435975246382526e+00 1.10274904951863934599e+01 6.14679876512770118069e+00 9.13634267389666199222e+00 5.61804042837939565658e+00 8.86510549300474792744e+00 6.88365972211771648404e+00 1.06527961535711064300e+01 +2932 14655.00 7.29426787635419913158e+01 5.49309398000142934393e+00 1.10320728281248534586e+01 6.14951549689128729170e+00 9.13962298319253640955e+00 5.61988999962689206313e+00 8.86817295683662720762e+00 6.88726484456439091986e+00 1.06571269510161474869e+01 +2933 14660.00 7.29689613565157486619e+01 5.49467329980546548285e+00 1.10366554305299491290e+01 6.15223236216522550990e+00 9.14290329242622412664e+00 5.62173933786866353302e+00 8.87124026014930500139e+00 6.89087011051241127291e+00 1.06614573761826729736e+01 +2934 14665.00 7.29952439494895202188e+01 5.49625231925784607512e+00 1.10412383027125962087e+01 6.15494935974728107908e+00 9.14618360168064370441e+00 5.62358844300107119096e+00 8.87430740264222350788e+00 6.89447551716346929140e+00 1.06657874286561185073e+01 +2935 14670.00 7.30215265424632633540e+01 5.49783103849330778701e+00 1.10458214448800831065e+01 6.15766648841448915874e+00 9.14946391092469468731e+00 5.62543731493083498663e+00 8.87737438404591827634e+00 6.89808106166743773002e+00 1.06701171081255576922e+01 +2936 14675.00 7.30478091354370349109e+01 5.49940945760512445162e+00 1.10504048573433291125e+01 6.16038374694388490838e+00 9.15274422021020406248e+00 5.62728595356468019872e+00 8.88044120403909609252e+00 6.90168674120528269356e+00 1.06744464141764314746e+01 +2937 14680.00 7.30740917284108064678e+01 5.50098757669694027328e+00 1.10549885402059757666e+01 6.16310113411250704019e+00 9.15602452946462186389e+00 5.62913435879896617564e+00 8.88350786236266110052e+00 6.90529255292687338397e+00 1.06787753464978134588e+01 +2938 14685.00 7.31003743213845638138e+01 5.50256539588275739305e+00 1.10595724939862289915e+01 6.16581864871811635709e+00 9.15930483872940115475e+00 5.63098253056114295134e+00 8.88657435869532541517e+00 6.90889849402354006003e+00 1.06831039044678597350e+01 +2939 14690.00 7.31266569143583211599e+01 5.50414291527658150471e+00 1.10641567186840887871e+01 6.16853628952738564095e+00 9.16258514799418222196e+00 5.63283046873720660841e+00 8.88964069275725599084e+00 6.91250456165551963039e+00 1.06874320878792854472e+01 +2940 14695.00 7.31529395073320785059e+01 5.50572013498205414805e+00 1.10687412146104797728e+01 6.17125405531735271580e+00 9.16586545722787171542e+00 5.63467817323387887285e+00 8.89270686423752820815e+00 6.91611075299341138134e+00 1.06917598963175315419e+01 +2941 14700.00 7.31792221003058358519e+01 5.50729705509245270889e+00 1.10733259821799645550e+01 6.17397194487541778329e+00 9.16914576651338109059e+00 5.63652564396824828918e+00 8.89577287284594930838e+00 6.91971706520781548733e+00 1.06960873293680265306e+01 +2942 14705.00 7.32055046932795931980e+01 5.50887367571141872702e+00 1.10779110214961811209e+01 6.17668995697861511474e+00 9.17242607575743384984e+00 5.63837288083667242944e+00 8.89883871829232653283e+00 6.92332349545896885701e+00 1.07004143866162131360e+01 +2943 14710.00 7.32317872862533647549e+01 5.51044999695295345532e+00 1.10824963328700576426e+01 6.17940809041434579996e+00 9.17570638503257995922e+00 5.64021988373551153018e+00 8.90190440025537021995e+00 6.92693004091747077666e+00 1.07047410677511649624e+01 +2944 14715.00 7.32580698792271078901e+01 5.51202601892070287448e+00 1.10870819165088718705e+01 6.18212634394928262083e+00 9.17898669427663094211e+00 5.64206665258185324774e+00 8.90496991844488761103e+00 6.93053669876428735108e+00 1.07090673723583211796e+01 +2945 14720.00 7.32843524722008936578e+01 5.51360174170794081761e+00 1.10916677728271917402e+01 6.18484471637082222628e+00 9.18226700355177705148e+00 5.64391318727205337780e+00 8.90803527254995231033e+00 6.93414346614929044677e+00 1.07133933001267518392e+01 +2946 14725.00 7.33106350651746510039e+01 5.51517716540794555868e+00 1.10962539019286534625e+01 6.18756320644564095090e+00 9.18554731281655811870e+00 5.64575948772320312941e+00 8.91110046227000829333e+00 6.93775034025344350397e+00 1.07177188505382581241e+01 +2947 14730.00 7.33369176581484083499e+01 5.51675229013472190331e+00 1.11008403041241869857e+01 6.19028181297150048579e+00 9.18882762207097592011e+00 5.64760555382129503244e+00 8.91416548730449420646e+00 6.94135731823698254317e+00 1.07220440233855569545e+01 +2948 14735.00 7.33632002511221656960e+01 5.51832711597118397151e+00 1.11054269798283495874e+01 6.19300053471507450098e+00 9.19210793133575521097e+00 5.64945138547305436560e+00 8.91723034733212394087e+00 6.94496439728087366916e+00 1.07263688182540839477e+01 +2949 14740.00 7.33894828440959230420e+01 5.51990164303133390433e+00 1.11100139291447828072e+01 6.19571937045339815597e+00 9.19538824060053805454e+00 5.65129698259556434436e+00 8.92029504204197642991e+00 6.94857157453498786026e+00 1.07306932347292729446e+01 +2950 14745.00 7.34157654370696945989e+01 5.52147587139808670997e+00 1.11146011523844165936e+01 6.19843831897386987606e+00 9.19866854985495407959e+00 5.65314234508518786981e+00 8.92335957114385358580e+00 6.95217884719065448706e+00 1.07350172725002046548e+01 +2951 14750.00 7.34420480300434519449e+01 5.52304980117508126369e+00 1.11191886497545251444e+01 6.20115737904316510765e+00 9.20194885913010018896e+00 5.65498747283828073762e+00 8.92642393430610781024e+00 6.95578621238738037391e+00 1.07393409312559526825e+01 +2952 14755.00 7.34683306229135695276e+01 5.52462343245559672766e+00 1.11237764217733179350e+01 6.20387654944868049967e+00 9.20522916839488125618e+00 5.65683236576156911468e+00 8.92948813122817774968e+00 6.95939366732685904537e+00 1.07436642104783128815e+01 +2953 14760.00 7.34946132158873410845e+01 5.52619676533290959952e+00 1.11283644684407931891e+01 6.20659582895709061034e+00 9.20850947757674909155e+00 5.65867702376177472701e+00 8.93255216157841047675e+00 6.96300120914859910215e+00 1.07479871099600039486e+01 +2954 14765.00 7.35208958088610984305e+01 5.52776979988993222292e+00 1.11329527901715152893e+01 6.20931521636615890714e+00 9.21178978689334826413e+00 5.66052144674562018878e+00 8.93561602505625174331e+00 6.96660883503356398450e+00 1.07523096292864615009e+01 +2955 14770.00 7.35471784018348557765e+01 5.52934253624066940347e+00 1.11375413871727655390e+01 6.21203471043219401793e+00 9.21507009615813110770e+00 5.66236563459910158258e+00 8.93867972135077337725e+00 6.97021654215235297869e+00 1.07566317681467626954e+01 +2956 14775.00 7.35734609948086131226e+01 5.53091497445767199537e+00 1.11421302598591083211e+01 6.21475430994259259165e+00 9.21835040543327544071e+00 5.66420958724966805420e+00 8.94174325011996451451e+00 6.97382432766520565792e+00 1.07609535261263449257e+01 +2957 14780.00 7.35997435877823704686e+01 5.53248711463421471990e+00 1.11467194084378284913e+01 6.21747401367439511688e+00 9.22163071467732819997e+00 5.66605330457295242041e+00 8.94480661106326202514e+00 6.97743218875308368609e+00 1.07652749029142817960e+01 +2958 14785.00 7.36260261807561420255e+01 5.53405895686357318652e+00 1.11513088331162055766e+01 6.22019382041499913072e+00 9.22491102393174777774e+00 5.66789678649640471519e+00 8.94786980385938335303e+00 6.98104012256586070606e+00 1.07695958983032920031e+01 +2959 14790.00 7.36523087737298851607e+01 5.53563050122866417979e+00 1.11558985342051606438e+01 6.22291372892071326106e+00 9.22819133317579876064e+00 5.66974003290602102112e+00 8.95093282817667379447e+00 6.98464812629486431206e+00 1.07739165117751731771e+01 +2960 14795.00 7.36785913667036709285e+01 5.53720174783312568678e+00 1.11604885121192598518e+01 6.22563373797893770956e+00 9.23147164246130813581e+00 5.67158304369815979840e+00 8.95399568370421228281e+00 6.98825619708996814694e+00 1.07782367430189989221e+01 +2961 14800.00 7.37048739596774282745e+01 5.53877269674950767353e+00 1.11650787670657880568e+01 6.22835384636670941205e+00 9.23475195172608742666e+00 5.67342581880027196917e+00 8.95705837009998084852e+00 6.99186433213213387461e+00 1.07825565917238517244e+01 +2962 14805.00 7.37311565526511856206e+01 5.54034334806071981916e+00 1.11696692993556645490e+01 6.23107405287142590566e+00 9.23803226098050700443e+00 5.67526835808798857386e+00 8.96012088705306020131e+00 6.99547252859196433405e+00 1.07868760576824431752e+01 +2963 14810.00 7.37574391456249429666e+01 5.54191370186004483855e+00 1.11742601091961688553e+01 6.23379435625976086044e+00 9.24131257022455798733e+00 5.67711066147839726881e+00 8.96318323423179741383e+00 6.99908078361932961542e+00 1.07911951403765691282e+01 +2964 14815.00 7.37837217385987145235e+01 5.54348375824075567664e+00 1.11788511968982309241e+01 6.23651475529838794643e+00 9.24459287949970409670e+00 5.67895272886785562605e+00 8.96624541131490282453e+00 7.00268909440556086565e+00 1.07955138395989500566e+01 +2965 14820.00 7.38100043315724576587e+01 5.54505351726503814547e+00 1.11834425628764098093e+01 6.23923524878506796654e+00 9.24787318878521169552e+00 5.68079456016308892430e+00 8.96930741796036556934e+00 7.00629745812125737103e+00 1.07998321549350215776e+01 +2966 14825.00 7.38362869245462292156e+01 5.54662297902616785450e+00 1.11880342072343506032e+01 6.24195583548647459082e+00 9.25115349801890118897e+00 5.68263615525009146978e+00 8.97236925384689421037e+00 7.00990587191629099806e+00 1.08041500861775006115e+01 +2967 14830.00 7.38625695175200007725e+01 5.54819214360705981193e+00 1.11926261304902521232e+01 6.24467651419000979729e+00 9.25443380727331899038e+00 5.68447751404594647795e+00 8.97543091864284114934e+00 7.01351433298198934096e+00 1.08084676329118245519e+01 +2968 14835.00 7.38888521104937581185e+01 5.54976101109062458505e+00 1.11972183328514027778e+01 6.24739728365197688476e+00 9.25771411654846332340e+00 5.68631863644702040261e+00 8.97849241201655168254e+00 7.01712283847859019659e+00 1.08127847949307103192e+01 +2969 14840.00 7.39151347034675154646e+01 5.55132958155977540571e+00 1.12018108145250803176e+01 6.25011814265978049576e+00 9.26099442581324439061e+00 5.68815952236002964071e+00 8.98155373362601494591e+00 7.02073138557669462756e+00 1.08171015718195935307e+01 +2970 14845.00 7.39414172964412728106e+01 5.55289785507669897413e+00 1.12064035758222093619e+01 6.25283909000081816743e+00 9.26427473515057542386e+00 5.69000017168133620515e+00 8.98461488314993950155e+00 7.02433997144690014380e+00 1.08214179632675513432e+01 +2971 14850.00 7.39676998894150301567e+01 5.55446583173467001160e+00 1.12109966171573542937e+01 6.25556012444176268161e+00 9.26755504432207821708e+00 5.69184058429693617853e+00 8.98767586023594766687e+00 7.02794859325980958431e+00 1.08257339690673042298e+01 +2972 14855.00 7.39939824823887875027e+01 5.55603351161660263813e+00 1.12155899388414379558e+01 6.25828124475965186235e+00 9.27083535358685928429e+00 5.69368076013427693027e+00 8.99073666457311659883e+00 7.03155724818602223536e+00 1.08300495888042824788e+01 +2973 14860.00 7.40202650753625590596e+01 5.55760089478467911306e+00 1.12201835410817416516e+01 6.26100244974188147040e+00 9.27411566286200539366e+00 5.69552069906899216534e+00 8.99379729579870357270e+00 7.03516593340650331356e+00 1.08343648221675685761e+01 +2974 14865.00 7.40465476683363021948e+01 5.55916798132181710912e+00 1.12247774241891900004e+01 6.26372373815512784034e+00 9.27739597211642141872e+00 5.69736040102853280587e+00 8.99685775358105566113e+00 7.03877464609185121702e+00 1.08386796689498776658e+01 +2975 14870.00 7.40728302613100879626e+01 5.56073477130055948692e+00 1.12293715885783456088e+01 6.26644510877642346713e+00 9.28067628139156575173e+00 5.69919986588852989229e+00 8.99991803758851993678e+00 7.04238338340230640711e+00 1.08429941288402886812e+01 +2976 14875.00 7.40991128542838453086e+01 5.56230126479345798884e+00 1.12339660344564915562e+01 6.26916656038280795116e+00 9.28395659062525524519e+00 5.70103909355570515061e+00 9.00297814746872226976e+00 7.04599214252919203716e+00 1.08473082014242336868e+01 +2977 14880.00 7.41253954472576026546e+01 5.56386746189379000072e+00 1.12385607621345471330e+01 6.27188809176167882953e+00 9.28723689989003631240e+00 5.70287808394714712534e+00 9.00603808287964469059e+00 7.04960092063274856855e+00 1.08516218865980746955e+01 +2978 14885.00 7.41516780402313600007e+01 5.56543336264301125027e+00 1.12431557719234422876e+01 6.27460970167971066047e+00 9.29051720916518064541e+00 5.70471683693848508057e+00 9.00909784348963249556e+00 7.05320971488357439938e+00 1.08559351838436093374e+01 +2979 14890.00 7.41779606332051315576e+01 5.56699896714476238913e+00 1.12477510642377360739e+01 6.27733138892429920475e+00 9.29379751838850687307e+00 5.70655535244680844897e+00 9.01215742894631333115e+00 7.05681852246263385808e+00 1.08602480930571907436e+01 +2980 14895.00 7.42042432261788746928e+01 5.56856427544050003320e+00 1.12523466391810682552e+01 6.28005315227248495091e+00 9.29707782770510604564e+00 5.70839363035811064861e+00 9.01521683890766567515e+00 7.06042734054052889547e+00 1.08645606139279014002e+01 +2981 14900.00 7.42305258190490064862e+01 5.57012928762349979195e+00 1.12569424973752898467e+01 6.28277499049093623995e+00 9.30035813692843227329e+00 5.71023167058947844765e+00 9.01827607303167511077e+00 7.06403616629822295181e+00 1.08688727460411715953e+01 +2982 14905.00 7.42568084120227638323e+01 5.57169400375595014197e+00 1.12615386388203990720e+01 6.28549690236705682622e+00 9.30363844617248503255e+00 5.71206947302690792867e+00 9.02133513096596395542e+00 7.06764499690631531337e+00 1.08731844892933633417e+01 +2983 14910.00 7.42830910049965353892e+01 5.57325842390003156623e+00 1.12661350640345983010e+01 6.28821888668824424684e+00 9.30691875545799440772e+00 5.71390703757712081767e+00 9.02439401235815452651e+00 7.07125382954577119676e+00 1.08774958432699158095e+01 +2984 14915.00 7.43093735979702927352e+01 5.57482254813865907295e+00 1.12707317733288121531e+01 6.29094094221080712970e+00 9.31019906469168390117e+00 5.71574436413647912758e+00 9.02745271686622530183e+00 7.07486266137682928701e+00 1.08818068077635405899e+01 +2985 14920.00 7.43356561909440500813e+01 5.57638637653401580963e+00 1.12753287669103272606e+01 6.29366306772214656462e+00 9.31347937399791980795e+00 5.71758145260133865406e+00 9.03051124413780392786e+00 7.07847148959081540198e+00 1.08861173824633183926e+01 +2986 14925.00 7.43619387839178074273e+01 5.57794990913792432252e+00 1.12799260450900575847e+01 6.29638526200966008872e+00 9.31675968326270265152e+00 5.71941830287842201130e+00 9.03356959383087243509e+00 7.08208031136869298194e+00 1.08904275671619679144e+01 +2987 14930.00 7.43882213768915789842e+01 5.57951314603329606712e+00 1.12845236083862143772e+01 6.29910752385038819057e+00 9.32003999249638859226e+00 5.72125491486409121222e+00 9.03662776558268454608e+00 7.08568912388106486588e+00 1.08947373614449212198e+01 +2988 14935.00 7.44145039698653221194e+01 5.58107608728231507911e+00 1.12891214570060807176e+01 6.30182985201099743477e+00 9.32332030175080817003e+00 5.72309128845470116431e+00 9.03968575904086435457e+00 7.08929792429853122826e+00 1.08990467652085403216e+01 +2989 14940.00 7.44407865628391078872e+01 5.58263873294716628237e+00 1.12937195911569343565e+01 6.30455224527889157571e+00 9.32660061101558746088e+00 5.72492742355697981083e+00 9.04274357385303062529e+00 7.09290670981241966331e+00 1.09033557780382608371e+01 +2990 14945.00 7.44670691558128652332e+01 5.58420108309003548896e+00 1.12983180113569812164e+01 6.30727470244147081502e+00 9.32988092028037030445e+00 5.72676332006728383561e+00 9.04580120967716894143e+00 7.09651547758296707968e+00 1.09076643998304430028e+01 +2991 14950.00 7.44933517487866225792e+01 5.58576313778347088856e+00 1.13029167179171476931e+01 6.30999722226540615821e+00 9.33316122955551286111e+00 5.72859897788197169888e+00 9.04885866614016975973e+00 7.10012422481186522560e+00 1.09119726301705188831e+01 +2992 14955.00 7.45196343417603799253e+01 5.58732489707929325107e+00 1.13075157110447115372e+01 6.31271980353809603059e+00 9.33644153879956739672e+00 5.73043439689740186083e+00 9.05191594290002043977e+00 7.10373294868007931768e+00 1.09162804689548522674e+01 +2993 14960.00 7.45459169347341372713e+01 5.58888636103968483582e+00 1.13121149910505973679e+01 6.31544244503658003254e+00 9.33972184805398519813e+00 5.73226957700993633438e+00 9.05497303959397470408e+00 7.10734164634784626458e+00 1.09205879157688752201e+01 +2994 14965.00 7.45721995277079088282e+01 5.59044752972683323122e+00 1.13167145584530111080e+01 6.31816514553789065900e+00 9.34300215731876448899e+00 5.73410451813665922316e+00 9.05802995585929160427e+00 7.11095031500649277234e+00 1.09248949705089497542e+01 +2995 14970.00 7.45984821206816519634e+01 5.59200840320292069663e+00 1.13213144134592358370e+01 6.32088790382943166435e+00 9.34628246658354733256e+00 5.73593922016356572158e+00 9.06108669134359168140e+00 7.11455895183698405759e+00 1.09292016327605079340e+01 +2996 14975.00 7.46247647136554235203e+01 5.59356898151977155464e+00 1.13259145563801926215e+01 6.32361071868823643172e+00 9.34956277586905493138e+00 5.73777368298701695437e+00 9.06414324569449370017e+00 7.11816755403064949093e+00 1.09335079024199135489e+01 +2997 14980.00 7.46510473066291950772e+01 5.59512926474992955406e+00 1.13305149876304440681e+01 6.32633358890170605093e+00 9.35284308510274442483e+00 5.73960790650336871721e+00 9.06719961853888811731e+00 7.12177611875809102315e+00 1.09378137791762384268e+01 +2998 14985.00 7.46773298996029524233e+01 5.59668925294521901748e+00 1.13351157075209183489e+01 6.32905651323651152751e+00 9.35612339436752549204e+00 5.74144189062971221915e+00 9.07025580952440257931e+00 7.12538464321063180762e+00 1.09421192627185650537e+01 +2999 14990.00 7.47036124925767097693e+01 5.59824894615745716209e+00 1.13397167163625329778e+01 6.33177949049041810525e+00 9.35940370360121498550e+00 5.74327563524167494791e+00 9.07331181828828370328e+00 7.12899312456924239001e+00 1.09464243529432501134e+01 +3000 14995.00 7.47298950855504671154e+01 5.59980834444883246448e+00 1.13443180144662125741e+01 6.33450251944046272001e+00 9.36268401288672258431e+00 5.74510914025634633617e+00 9.07636764446779764626e+00 7.13260156002524681185e+00 1.09507290495393654339e+01 +3001 15000.00 7.47561776785242244614e+01 5.60136744787116214184e+00 1.13489196022465232971e+01 6.33722559886367964310e+00 9.36596432214114038572e+00 5.74694240555971713746e+00 9.07942328770019635442e+00 7.13620994675961117792e+00 1.09550333522996385938e+01 +3002 15005.00 7.47824602714979960183e+01 5.60292625648663200622e+00 1.13535214800143844371e+01 6.33994872754746907617e+00 9.36924463141628471874e+00 5.74877543105851707139e+00 9.08247874762273355032e+00 7.13981828195330070486e+00 1.09593372609131396445e+01 +3003 15010.00 7.48087428644717533643e+01 5.60448477034706193933e+00 1.13581236480807223899e+01 6.34267190426886973142e+00 9.37252494068106578595e+00 5.75060821663873511511e+00 9.08553402386230679610e+00 7.14342656279764387506e+00 1.09636407751725872828e+01 +3004 15015.00 7.48350254574455107104e+01 5.60604298950427537562e+00 1.13627261067564617747e+01 6.34539512781527914598e+00 9.37580524992511854521e+00 5.75244076221746158950e+00 9.08858911606653308013e+00 7.14703478648396739459e+00 1.09679438949743435217e+01 +3005 15020.00 7.48613080504192822673e+01 5.60760091401008775591e+00 1.13673288565598014088e+01 6.34811839697409663330e+00 9.37908555918989961242e+00 5.75427306768069080078e+00 9.09164402386230641184e+00 7.15064295020360241040e+00 1.09722466199038422019e+01 +3006 15025.00 7.48875906433930396133e+01 5.60915854391632340281e+00 1.13719318976980279245e+01 6.35084171053272505958e+00 9.38236586844431741383e+00 5.75610513293514358679e+00 9.09469874687651902434e+00 7.15425105113751147456e+00 1.09765489497538002439e+01 +3007 15030.00 7.49138732363667969594e+01 5.61071587927480219804e+00 1.13765352304820641649e+01 6.35356506725783454215e+00 9.38564617769873343889e+00 5.75793695786681869464e+00 9.09775328475679145868e+00 7.15785908648738811166e+00 1.09808508844205796606e+01 +3008 15035.00 7.49401558293405543054e+01 5.61227292014770906547e+00 1.13811388553264727364e+01 6.35628846594719121299e+00 9.38892648696351450610e+00 5.75976854238243785034e+00 9.10080763713001417159e+00 7.16146705342383249615e+00 1.09851524235932540563e+01 +3009 15040.00 7.49664384222106718880e+01 5.61382966656613469070e+00 1.13857427726458197981e+01 6.35901190537782845524e+00 9.39220679624902388127e+00 5.76159988637835773773e+00 9.10386180362308117253e+00 7.16507494915890141840e+00 1.09894535670645439041e+01 +3010 15045.00 7.49927210151844292341e+01 5.61538611859226399758e+00 1.13903469826473848769e+01 6.36173538434751240089e+00 9.39548710548271337473e+00 5.76343098975094036973e+00 9.10691578386288647096e+00 7.16868277088392247265e+00 1.09937543147308076641e+01 +3011 15050.00 7.50190036081582007910e+01 5.61694227627791953239e+00 1.13949514857457323558e+01 6.36445890162291405545e+00 9.39876741474749444194e+00 5.76526185239654331838e+00 9.10996957749704705520e+00 7.17229051576949760971e+00 1.09980546661774809536e+01 +3012 15055.00 7.50452862011319723479e+01 5.61849813967491940048e+00 1.13995562823554283938e+01 6.36718245601216281671e+00 9.40204772399154720119e+00 5.76709247422188919785e+00 9.11302318414209544528e+00 7.17589818103804688576e+00 1.10023546213009204564e+01 +3013 15060.00 7.50715687941057296939e+01 5.62005370881435695196e+00 1.14041613727873940576e+01 6.36990604628193057835e+00 9.40532803326669153421e+00 5.76892285512333735653e+00 9.11607660342492032157e+00 7.17950576387053462923e+00 1.10066541797902104349e+01 +3014 15065.00 7.50978513870794870400e+01 5.62160898374805206856e+00 1.14087667573525521902e+01 6.37262967122997991964e+00 9.40860834253147260142e+00 5.77075299499724891916e+00 9.11912983498277895933e+00 7.18311326146865525288e+00 1.10109533416453420074e+01 +3015 15070.00 7.51241339800532443860e+01 5.62316396452782729654e+00 1.14133724363618256348e+01 6.37535332964371281861e+00 9.41188865179625366864e+00 5.77258289373997879323e+00 9.12218287844256536800e+00 7.18672067102373457459e+00 1.10152521064517561200e+01 +3016 15075.00 7.51504165730270017320e+01 5.62471865120550074124e+00 1.14179784103334220902e+01 6.37807702031052947689e+00 9.41516896109212808597e+00 5.77441255124788987985e+00 9.12523573343117178069e+00 7.19032798972710196495e+00 1.10195504741058094567e+01 +3017 15080.00 7.51766991660007732889e+01 5.62627304382252901860e+00 1.14225846795782643994e+01 6.38080074201782831977e+00 9.41844927030508749510e+00 5.77624196742770124047e+00 9.12828839956512005926e+00 7.19393521480118014466e+00 1.10238484444002224905e+01 +3018 15085.00 7.52029817589745164241e+01 5.62782714241000459054e+00 1.14271912443036303131e+01 6.38352449354264717130e+00 9.42172957956986856232e+00 5.77807114216541339857e+00 9.13134087648167813711e+00 7.19754234341656751184e+00 1.10281460170240723784e+01 +3019 15090.00 7.52292643519483021919e+01 5.62938094703011504549e+00 1.14317981050277293065e+01 6.38624827369311276470e+00 9.42500988883464962953e+00 5.77990007536774363928e+00 9.13439316380772758919e+00 7.20114937278531996867e+00 1.10324431919773555677e+01 +3020 15095.00 7.52555469449220595379e+01 5.63093445772431167029e+00 1.14364052620614806699e+01 6.38897208124626203585e+00 9.42829019807870238878e+00 5.78172876693105575185e+00 9.13744526115980448822e+00 7.20475630011949697007e+00 1.10367399689491527681e+01 +3021 15100.00 7.52818295378958168840e+01 5.63248767452369136777e+00 1.14410127158194541153e+01 6.39169591499985934036e+00 9.43157050733311841384e+00 5.78355721675170375562e+00 9.14049716816479751458e+00 7.20836312261042611027e+00 1.10410363476285375839e+01 +3022 15105.00 7.53081121308695742300e+01 5.63404059748007135511e+00 1.14456204665089238404e+01 6.39441977373094161408e+00 9.43485081659789948105e+00 5.78538542473641559383e+00 9.14354888445996216717e+00 7.21196983745980002567e+00 1.10453323280155135677e+01 +3023 15110.00 7.53343947238433315761e+01 5.63559322663491091276e+00 1.14502285146481028733e+01 6.39714365624763470208e+00 9.43813112591450220634e+00 5.78721339077118113181e+00 9.14660040965146414749e+00 7.21557644187967461846e+00 1.10496279099027958637e+01 +3024 15115.00 7.53606773168170889221e+01 5.63714556201929983814e+00 1.14548368605479069515e+01 6.39986756132697731658e+00 9.44141143515855318924e+00 5.78904111475236593520e+00 9.14965174336619746498e+00 7.21918293307174252504e+00 1.10539230929794616287e+01 +3025 15120.00 7.53869599097908462682e+01 5.63869760369542305511e+00 1.14594455046229075634e+01 6.40259148777709619083e+00 9.44469174439224268269e+00 5.79086859659705055492e+00 9.15270288524141584219e+00 7.22278930823769904634e+00 1.10582178771418710994e+01 +3026 15125.00 7.54132425027646178251e+01 5.64024935167364560584e+00 1.14640544471840222229e+01 6.40531543436466499486e+00 9.44797205366738879206e+00 5.79269583618086958410e+00 9.15575383488328320425e+00 7.22639556457923237787e+00 1.10625122621827394198e+01 +3027 15130.00 7.54395250957383893819e+01 5.64180080602651745636e+00 1.14686636885421737730e+01 6.40803939990817372774e+00 9.45125236291144155132e+00 5.79452283342090979090e+00 9.15880459192906037913e+00 7.23000169932913117066e+00 1.10668062478947923921e+01 +3028 15135.00 7.54658076887121467280e+01 5.64335196676440009611e+00 1.14732732292155699128e+01 6.41076338319502347929e+00 9.45453267217622261853e+00 5.79634958820316459338e+00 9.16185515598490596290e+00 7.23360770966835975315e+00 1.10710998340707380549e+01 +3029 15140.00 7.54920902816859040740e+01 5.64490283393911429499e+00 1.14778830694114954980e+01 6.41348738301261533934e+00 9.45781298136845549607e+00 5.79817610042399511627e+00 9.16490552667771396500e+00 7.23721359282969967097e+00 1.10753930206069437503e+01 +3030 15145.00 7.55183728746596614201e+01 5.64645340759211933346e+00 1.14824932096481475696e+01 6.41621139814834862136e+00 9.46109329068505644500e+00 5.80000237000048635139e+00 9.16795570363438017125e+00 7.24081934601484711322e+00 1.10796858073997590566e+01 +3031 15150.00 7.55446554676334187661e+01 5.64800368774413907857e+00 1.14871036502364560761e+01 6.41893542742071598894e+00 9.46437359999129412813e+00 5.80182839680827111550e+00 9.17100568647142644352e+00 7.24442496642549293995e+00 1.10839781941382700126e+01 +3032 15155.00 7.55709380606071903230e+01 5.64955367445736111875e+00 1.14917143914873420840e+01 6.42165946959639022396e+00 9.46765390925607341899e+00 5.80365418075407202281e+00 9.17405547480538707816e+00 7.24803045129442491401e+00 1.10882701806151935386e+01 +3033 15160.00 7.55972206535809476691e+01 5.65110336774214960798e+00 1.14963254339190079634e+01 6.42438352350422636761e+00 9.47093421850012795460e+00 5.80547972174460902295e+00 9.17710506826315253193e+00 7.25163579783369538490e+00 1.10925617667268809896e+01 +3034 15165.00 7.56235032465547050151e+01 5.65265276765032265160e+00 1.15009367777387385701e+01 6.42710758791089720177e+00 9.47421452774418071385e+00 5.80730501966588175122e+00 9.18015446646124999575e+00 7.25524100324499965353e+00 1.10968529523696979311e+01 +3035 15170.00 7.56497858395284765720e+01 5.65420187421297537611e+00 1.15055484234647398267e+01 6.42983166163489450184e+00 9.47749483700896000471e+00 5.80913007442461104546e+00 9.18320366902657170272e+00 7.25884606476112281825e+00 1.11011437373363648362e+01 +3036 15175.00 7.56760684325022339181e+01 5.65575068746119846708e+00 1.15101603714079328000e+01 6.43255574346361935767e+00 9.48077514626337958248e+00 5.81095488591715536586e+00 9.18625267555491831217e+00 7.26245097958375662728e+00 1.11054341214195897436e+01 +3037 15180.00 7.57023510253723515007e+01 5.65729920743644942860e+00 1.15147726218792385566e+01 6.43527983219483701305e+00 9.48405545552815709698e+00 5.81277945403987494899e+00 9.18930148569391214153e+00 7.26605574495605033292e+00 1.11097241044121002318e+01 +3038 15185.00 7.57286336183461230576e+01 5.65884743415945568046e+00 1.15193851753968665719e+01 6.43800392663667331306e+00 9.48733576478257667475e+00 5.81460377868912736687e+00 9.19235009904971356320e+00 7.26966035806933330576e+00 1.11140136863138927481e+01 +3039 15190.00 7.57549162113198661928e+01 5.66039536768203710437e+00 1.15239980321680963726e+01 6.44072802557652934752e+00 9.49061607407844931572e+00 5.81642785977163789823e+00 9.19539851523885509721e+00 7.27326481616675302178e+00 1.11183028668140444495e+01 +3040 15195.00 7.57811988042936377497e+01 5.66194300801455963068e+00 1.15286111928147754213e+01 6.44345212783289689185e+00 9.49389638334323038293e+00 5.81825169717339729658e+00 9.19844673387786393448e+00 7.27686911647073308984e+00 1.11225916458089120198e+01 +3041 15200.00 7.58074813972673950957e+01 5.66349035520884136474e+00 1.15332246574405417050e+01 6.44617623219317792405e+00 9.49717669260801145015e+00 5.82007529081149854733e+00 9.20149475459362875540e+00 7.28047325619332674762e+00 1.11268800230912159321e+01 +3042 15205.00 7.58337639902411666526e+01 5.66503740928561150270e+00 1.15378384266672480152e+01 6.44890033745513591157e+00 9.50045700181060759348e+00 5.82189864057193151581e+00 9.20454257699231703782e+00 7.28407723255695849218e+00 1.11311679986609579629e+01 +3043 15210.00 7.58600465832149239986e+01 5.66658417028632843682e+00 1.15424525007021667733e+01 6.45162444243726262982e+00 9.50373731108575370286e+00 5.82372174635105910312e+00 9.20759020071118428064e+00 7.28768104281513817710e+00 1.11354555722072117163e+01 +3044 15215.00 7.58863291761886813447e+01 5.66813063822135454473e+00 1.15470668800635110074e+01 6.45434854592695916864e+00 9.50701762035053477007e+00 5.82554460805560037073e+00 9.21063762534603114318e+00 7.29128468416956021514e+00 1.11397427436263374290e+01 +3045 15220.00 7.59126117691624386907e+01 5.66967681314250881996e+00 1.15516815650622000078e+01 6.45707264674271730343e+00 9.51029792959458752932e+00 5.82736722558191733157e+00 9.21368485052374808220e+00 7.29488815385301059280e+00 1.11440295128146917847e+01 +3046 15225.00 7.59388943621361960368e+01 5.67122269507052223503e+00 1.15562965561127963809e+01 6.45979674367193812401e+00 9.51357823886973186234e+00 5.82918959882636844583e+00 9.21673187585050257553e+00 7.29849144910863589786e+00 1.11483158795649970330e+01 +3047 15230.00 7.59651769551099675937e+01 5.67276828402612220970e+00 1.15609118535262300753e+01 6.46252083553311340580e+00 9.51685854813451292955e+00 5.83101172769567632770e+00 9.21977870096355012208e+00 7.30209456715885796285e+00 1.11526018437736098576e+01 +3048 15235.00 7.59914595480837107289e+01 5.67431358005076358353e+00 1.15655274577170565919e+01 6.46524492113437165841e+00 9.52013885739929399676e+00 5.83283361207583528341e+00 9.22282532546905109427e+00 7.30569750523646099793e+00 1.11568874052332489555e+01 +3049 15240.00 7.60177421410574964966e+01 5.67585858317553970664e+00 1.15701433692034871825e+01 6.46796899927347546111e+00 9.52341916668480337194e+00 5.83465525188393474565e+00 9.22587174898353978847e+00 7.30930026057423276598e+00 1.11611725638402710103e+01 +3050 15245.00 7.60440247340312538427e+01 5.67740329341081473302e+00 1.15747595881928013739e+01 6.47069306875855598804e+00 9.52669947591849108903e+00 5.83647664699560220214e+00 9.22891797112354161925e+00 7.31290283041532074293e+00 1.11654573195946813513e+01 +3051 15250.00 7.60703073270050111887e+01 5.67894771079804616676e+00 1.15793761152032033124e+01 6.47341712839774086063e+00 9.52997978520400046420e+00 5.83829779733829035138e+00 9.23196399150558200120e+00 7.31650521199250825077e+00 1.11697416720819084901e+01 +3052 15255.00 7.60965899199787685347e+01 5.68049183536832380526e+00 1.15839929505456176173e+01 6.47614117700952185430e+00 9.53326009443768995766e+00 5.84011870278763201014e+00 9.23500980975655672012e+00 7.32010740254894720636e+00 1.11740256214055992956e+01 +3053 15260.00 7.61228725129525400916e+01 5.68203566713201446703e+00 1.15886100947382466586e+01 6.47886521339166243649e+00 9.53654040373356259863e+00 5.84193936326071217024e+00 9.23805542547226465899e+00 7.32370939931742004347e+00 1.11783091673584706882e+01 +3054 15265.00 7.61491551059262832268e+01 5.68357920613057299164e+00 1.15932275479883770686e+01 6.48158923636265615897e+00 9.53982071295688882628e+00 5.84375977864352513791e+00 9.24110083827960160363e+00 7.32731119955144194478e+00 1.11825923097332360356e+01 +3055 15270.00 7.61754376989000547837e+01 5.68512245237436442125e+00 1.15978453108142129935e+01 6.48431324473063064318e+00 9.54310102221130307498e+00 5.84557994884279530368e+00 9.24414604780545268170e+00 7.33091280047343207826e+00 1.11868750484262626799e+01 +3056 15275.00 7.62017202918738121298e+01 5.68666540590484359541e+00 1.16024633835266737236e+01 6.48703723730371617506e+00 9.54638133146572265275e+00 5.84739987375488201593e+00 9.24719105365598892377e+00 7.33451419933690473840e+00 1.11911573834375435155e+01 +3057 15280.00 7.62280028848475836867e+01 5.68820806674273882209e+00 1.16070817665403289709e+01 6.48976121290040364187e+00 9.54966164074086698577e+00 5.84921955328650788886e+00 9.25023585544773396805e+00 7.33811539339537244331e+00 1.11954393144561592521e+01 +3058 15285.00 7.62542854778213410327e+01 5.68975043489841603161e+00 1.16117004603733739998e+01 6.49248517033918481900e+00 9.55294195000564805298e+00 5.85103898732366722868e+00 9.25328045279721855820e+00 7.34171637989198444529e+00 1.11997208414821081135e+01 +3059 15290.00 7.62805680707950983788e+01 5.69129251041333006356e+00 1.16163194652331043244e+01 6.49520910841782672662e+00 9.55622225926006407803e+00 5.85285817578344680356e+00 9.25632484532097166152e+00 7.34531715606988999667e+00 1.12040019643081070200e+01 +3060 15295.00 7.63068506637688557248e+01 5.69283429330821011405e+00 1.16209387816377152092e+01 6.49793302596518262959e+00 9.55950256851448187945e+00 5.85467711856220862643e+00 9.25936903263551691623e+00 7.34891771919296754589e+00 1.12082826829341595243e+01 +3061 15300.00 7.63331332567426130709e+01 5.69437578359341944889e+00 1.16255584100017710369e+01 6.50065692179974696785e+00 9.56278287781035452042e+00 5.85649581555630938112e+00 9.26241301436775366085e+00 7.35251806649399952676e+00 1.12125629970493392307e+01 +3062 15305.00 7.63594158497163846278e+01 5.69591698131041557218e+00 1.16301783506361999798e+01 6.50338079472964647465e+00 9.56606318704404223752e+00 5.85831426666210575149e+00 9.26545679011347544929e+00 7.35611819522650112191e+00 1.12168429067572912317e+01 +3063 15310.00 7.63856984426901277629e+01 5.69745788646956174972e+00 1.16347986039555610915e+01 6.50610464357337647812e+00 9.56934349633991665485e+00 5.86013247178632568080e+00 9.26850035950994310952e+00 7.35971810266471315742e+00 1.12211224118507271186e+01 +3064 15315.00 7.64119810356638993198e+01 5.69899849909158628947e+00 1.16394191703744240840e+01 6.50882846714942608912e+00 9.57262380560469949842e+00 5.86195043082532407652e+00 9.27154372217368205611e+00 7.36331778605178577379e+00 1.12254015121223709173e+01 +3065 15320.00 7.64382636285340311133e+01 5.70053881921794491916e+00 1.16440400503073444582e+01 6.51155226427628974761e+00 9.57590411482802217336e+00 5.86376814368582621739e+00 9.27458687770049650112e+00 7.36691724264122882460e+00 1.12296802075722190750e+01 +3066 15325.00 7.64645462215077884593e+01 5.70207884683827437300e+00 1.16486612441688954789e+01 6.51427603378282427116e+00 9.57918442406171166681e+00 5.86558561026418967543e+00 9.27762982572763661437e+00 7.37051646970728580044e+00 1.12339584979929920650e+01 +3067 15330.00 7.64908288144815458054e+01 5.70361858200439542088e+00 1.16532827523736379760e+01 6.51699977448752054698e+00 9.58246473240408747074e+00 5.86740283045677646356e+00 9.28067256587163491588e+00 7.37411546449310684181e+00 1.12382363833846863344e+01 +3068 15335.00 7.65171114074553031514e+01 5.70515802471630806281e+00 1.16579045752324930163e+01 6.51972348520887212686e+00 9.58574504264309368295e+00 5.86921980418067157359e+00 9.28371509774902037293e+00 7.37771422427293277480e+00 1.12425138635400241327e+01 +3069 15340.00 7.65433940004290604975e+01 5.70669717501546802652e+00 1.16625267131600249826e+01 6.52244716476537167438e+00 9.58902535187678140005e+00 5.87103653133223257754e+00 9.28675742096595335795e+00 7.38131274630027434114e+00 1.12467909384590019073e+01 +3070 15345.00 7.65696765934028320544e+01 5.70823603289151115803e+00 1.16671491666744397975e+01 6.52517081199623927290e+00 9.59230566112083593566e+00 5.87285301179745644617e+00 9.28979953514932965675e+00 7.38491102785974007361e+00 1.12510676079343419076e+01 +3071 15350.00 7.65959591863765751896e+01 5.70977459839625822724e+00 1.16717719360866620804e+01 6.52789442570960343204e+00 9.59558597038561700288e+00 5.87466924549342905948e+00 9.29284143992604150242e+00 7.38850906619447744816e+00 1.12553438719660388045e+01 +3072 15355.00 7.66222417793503609573e+01 5.71131287152971101051e+00 1.16763950218112508850e+01 6.53061800473432008118e+00 9.59886627964003302793e+00 5.87648523231651154219e+00 9.29588313490225104374e+00 7.39210685858909322121e+00 1.12596197303468130713e+01 +3073 15360.00 7.66485243723241183034e+01 5.71285085231259337490e+00 1.16810184242627741469e+01 6.53334154790961196824e+00 9.60214658891517913730e+00 5.87830097216306057817e+00 9.29892461969448547165e+00 7.39570440231782733065e+00 1.12638951829730249443e+01 +3074 15365.00 7.66748069652978756494e+01 5.71438854077600044690e+00 1.16856421437521547091e+01 6.53606505405396909225e+00 9.60542689810741023848e+00 5.88011646495016382374e+00 9.30196589392964057197e+00 7.39930169463419318276e+00 1.12681702298446726473e+01 +3075 15370.00 7.67010895582716329955e+01 5.71592593691993311467e+00 1.16902661809012400340e+01 6.53878852198588500499e+00 9.60870720742401296377e+00 5.88193171057418151548e+00 9.30500695723460857778e+00 7.40289873283316168795e+00 1.12724448707544748771e+01 +3076 15375.00 7.67273721512453903415e+01 5.71746304077548295197e+00 1.16948905360209494120e+01 6.54151195055494572017e+00 9.61198751667842898883e+00 5.88374670893147122541e+00 9.30804780921555163786e+00 7.40649551417860863012e+00 1.12767191057024298573e+01 +3077 15380.00 7.67536547442191618984e+01 5.71899985236337737859e+00 1.16995152094222110151e+01 6.54423533857964123683e+00 9.61526782592248174808e+00 5.88556145991839319009e+00 9.31108844948899871952e+00 7.41009203594477572352e+00 1.12809929345849013771e+01 +3078 15385.00 7.67799373371929192444e+01 5.72053637169397966034e+00 1.17041402015195838970e+01 6.54695868489919341471e+00 9.61854813520799112325e+00 5.88737596346239655531e+00 9.31412887769220532164e+00 7.41368829542663299037e+00 1.12852663572982443441e+01 +3079 15390.00 7.68062199301666908013e+01 5.72207259878802165787e+00 1.17087655129349172967e+01 6.54968198834245907136e+00 9.62182844454532038014e+00 5.88919021943911502603e+00 9.31716909344170041152e+00 7.41728428988805710276e+00 1.12895393736351756786e+01 +3080 15395.00 7.68325025231404481474e+01 5.72360853366622812644e+00 1.17133911437718474247e+01 6.55240524773829413618e+00 9.62510875379973818156e+00 5.89100422776563359406e+00 9.32020909634364791430e+00 7.42088001662401808289e+00 1.12938119836993386969e+01 +3081 15400.00 7.68587851161142054934e+01 5.72514417633896322002e+00 1.17180170947558668360e+01 6.55512846191555542674e+00 9.62838906302306085649e+00 5.89281798834867753811e+00 9.32324888603530510522e+00 7.42447547290875675685e+00 1.12980841872834556483e+01 +3082 15405.00 7.68850677090879628395e+01 5.72667952682695702293e+00 1.17226433659906152940e+01 6.55785162973419133436e+00 9.63166937225675212630e+00 5.89463150108460265386e+00 9.32628846214356599376e+00 7.42807065602687988104e+00 1.13023559842838761114e+01 +3083 15410.00 7.69113503020617343964e+01 5.72821458514057280098e+00 1.17272699580979384848e+01 6.56057475000233214502e+00 9.63494968152153141716e+00 5.89644476586977095423e+00 9.32932782426422591016e+00 7.43166556328371985529e+00 1.13066273747006071915e+01 +3084 15415.00 7.69376328950354775316e+01 5.72974935131090301610e+00 1.17318968713887592514e+01 6.56329782157992358549e+00 9.63822999076558595277e+00 5.89825778263163158499e+00 9.33236697204490894819e+00 7.43526019195351928204e+00 1.13108983584300055725e+01 +3085 15420.00 7.69639154880092490885e+01 5.73128382533794766829e+00 1.17365241063812817401e+01 6.56602084329582602606e+00 9.64151030004073028579e+00 5.90007055124581647476e+00 9.33540590510214229880e+00 7.43885453933124551895e+00 1.13151689352647863984e+01 +3086 15425.00 7.69901980809830064345e+01 5.73281800724243328915e+00 1.17411516633864270176e+01 6.56874381398925599740e+00 9.64479060929514631084e+00 5.90188307162941327988e+00 9.33844462305245492928e+00 7.44244860271187036460e+00 1.13194391053085965382e+01 +3087 15430.00 7.70164806739567779914e+01 5.73435189704509085118e+00 1.17457795428187647957e+01 6.57146673249943713557e+00 9.64807091859102072817e+00 5.90369534369950610397e+00 9.34148312553310233852e+00 7.44604237939036206484e+00 1.13237088684577908992e+01 +3088 15435.00 7.70427632669305353375e+01 5.73588549475628184382e+00 1.17504077450928559045e+01 6.57418959767595367794e+00 9.65135122782470844527e+00 5.90550736733173131654e+00 9.34452141216061527018e+00 7.44963586666169153006e+00 1.13279782245050881784e+01 +3089 15440.00 7.70690458599042926835e+01 5.73741880039673723957e+00 1.17550362707269062668e+01 6.57691240835802481968e+00 9.65463153707912802304e+00 5.90731914245353451065e+00 9.34755948255151558612e+00 7.45322906183119204826e+00 1.13322471734504883756e+01 +3090 15445.00 7.70953284528780500295e+01 5.73895181397681941604e+00 1.17596651200318387254e+01 6.57963516338487330870e+00 9.65791184631281396378e+00 5.90913066897164185320e+00 9.35059733635343270919e+00 7.45682196219383186531e+00 1.13365157151903517274e+01 +3091 15450.00 7.71216110458518073756e+01 5.74048453550689163905e+00 1.17642942934222158868e+01 6.58235786160608249418e+00 9.66119215559832511531e+00 5.91094194677204853861e+00 9.35363497317252345908e+00 7.46041456505494515739e+00 1.13407838496210366941e+01 +3092 15455.00 7.71478936388255789325e+01 5.74201696501804903505e+00 1.17689237913126021340e+01 6.58508050186087423583e+00 9.66447246486310618252e+00 5.91275297577184044684e+00 9.35667239263568362162e+00 7.46400686771986610069e+00 1.13450515768461830390e+01 +3093 15460.00 7.71741762316956965151e+01 5.74354910251028805135e+00 1.17735536141175618496e+01 6.58780308300919603681e+00 9.66775277411752220758e+00 5.91456375587774019209e+00 9.35970959439053373785e+00 7.46759886749392798322e+00 1.13493188965548661429e+01 +3094 15465.00 7.72004588246694680720e+01 5.74508094799397550645e+00 1.17781837623553045091e+01 6.59052560390063302265e+00 9.67103308337193823263e+00 5.91637428699647305308e+00 9.36274657804323773291e+00 7.47119056168246586935e+00 1.13535858088507346508e+01 +3095 15470.00 7.72267414176432254180e+01 5.74661250150020386229e+00 1.17828142363367458501e+01 6.59324806336404201090e+00 9.67431339264708434200e+00 5.91818456902439660183e+00 9.36578334324141437151e+00 7.47478194760117631290e+00 1.13578523136301399177e+01 +3096 15475.00 7.72530240106169827641e+01 5.74814376302897045434e+00 1.17874450364764538079e+01 6.59597046026973554689e+00 9.67759370169421906382e+00 5.91999460187859671834e+00 9.36881988959122757876e+00 7.47837302256575675585e+00 1.13621184107894421800e+01 +3097 15480.00 7.72793066035907401101e+01 5.74967473259064210112e+00 1.17920761631889909893e+01 6.59869279346729964431e+00 9.68087401120773982655e+00 5.92180438545543452733e+00 9.37185621675066826697e+00 7.48196378388154137440e+00 1.13663841003286467668e+01 +3098 15485.00 7.73055891965644974562e+01 5.75120541021630860001e+00 1.17967076169925650930e+01 6.60141506180631676415e+00 9.68415432046215585160e+00 5.92361391966163264300e+00 9.37489232432589147948e+00 7.48555422887459354087e+00 1.13706493820404634931e+01 +3099 15490.00 7.73318717895382548022e+01 5.75273579591633676955e+00 1.18013393981980971859e+01 6.60413726413637380830e+00 9.68743462967511526074e+00 5.92542320442464198749e+00 9.37792821195415982061e+00 7.48914435486060714453e+00 1.13749142560285374515e+01 +3100 15495.00 7.73581543825120263591e+01 5.75426588969072394519e+00 1.18059715072201498742e+01 6.60685939931742005626e+00 9.69071493895026137011e+00 5.92723223962009271304e+00 9.38096387927273056562e+00 7.49273415915528406828e+00 1.13791787221892288784e+01 +3101 15500.00 7.73844369754857694943e+01 5.75579569156020109943e+00 1.18106039445769308571e+01 6.60958146620940212301e+00 9.69399524820467739517e+00 5.92904102517543751816e+00 9.38399932590849061853e+00 7.49632363908468324354e+00 1.13834427803152564707e+01 +3102 15505.00 7.74107195684595552621e+01 5.75732520153513060990e+00 1.18152367105793629776e+01 6.61230346366190602225e+00 9.69727555746946023874e+00 5.93084956099739901703e+00 9.38703455149870080731e+00 7.49991279198523219662e+00 1.13877064305102564390e+01 +3103 15510.00 7.74370021614333126081e+01 5.75885441963623989636e+00 1.18198698057456521582e+01 6.61502539053488014531e+00 9.70055586672387626379e+00 5.93265784699269982383e+00 9.39006955568061485451e+00 7.50350161516226599190e+00 1.13919696727742323361e+01 +3104 15515.00 7.74632847544070699541e+01 5.76038334587389488917e+00 1.18245032303867141366e+01 6.61774724570900296783e+00 9.70383617596792902305e+00 5.93446588305770017513e+00 9.39310433808112854592e+00 7.50709010595220682660e+00 1.13962325067962595426e+01 +3105 15520.00 7.74895673473808273002e+01 5.76191198024809558831e+00 1.18291369850207637171e+01 6.62046902801312864284e+00 9.70711648527416670618e+00 5.93627366911985010489e+00 9.39613889833749382774e+00 7.51067826169148311521e+00 1.14004949327836193618e+01 +3106 15525.00 7.75158499403545988571e+01 5.76344032278993267937e+00 1.18337710699587184138e+01 6.62319073633830068815e+00 9.71039679451821946543e+00 5.93808120506514303116e+00 9.39917323609733479373e+00 7.51426607971652060769e+00 1.14047569505290358194e+01 +3107 15530.00 7.75421325333283419923e+01 5.76496837350977209269e+00 1.18384054857187859255e+01 6.62591236952373829894e+00 9.71367710375190895888e+00 5.93988849082103254062e+00 9.40220735097718041118e+00 7.51785355735338090000e+00 1.14090185600325018100e+01 +3108 15535.00 7.75684151263021135492e+01 5.76649613240761116373e+00 1.18430402326118873191e+01 6.62863392646048321666e+00 9.71695741303741655770e+00 5.94169552629424302381e+00 9.40524124262464411572e+00 7.52144069194885478424e+00 1.14132797611903775703e+01 +3109 15540.00 7.75946977192758851061e+01 5.76802359950418086498e+00 1.18476753112598682804e+01 6.63135540599811879048e+00 9.72023772230219762491e+00 5.94350231138113027640e+00 9.40827491068735533020e+00 7.52502748082900296822e+00 1.14175405540026666529e+01 +3110 15545.00 7.76209803122496424521e+01 5.76955077482020772806e+00 1.18523107218700154419e+01 6.63407680700696111842e+00 9.72351803155661364997e+00 5.94530884600914699689e+00 9.41130835479220451134e+00 7.52861392135098128620e+00 1.14218009384693672814e+01 +3111 15550.00 7.76472629052233997982e+01 5.77107765834532848714e+00 1.18569464649605293971e+01 6.63679812835732096943e+00 9.72679834082139649354e+00 5.94711513007465164549e+00 9.41434157458681042385e+00 7.53220001085121371176e+00 1.14260609143831963763e+01 +3112 15555.00 7.76735454981971571442e+01 5.77260425011063649237e+00 1.18615825409459727524e+01 6.63951936890914762301e+00 9.73007865007581251859e+00 5.94892116348436861273e+00 9.41737456970842501391e+00 7.53578574666612688304e+00 1.14303204819514352408e+01 +3113 15560.00 7.76998280911709287011e+01 5.77413055012649323317e+00 1.18662189502409134434e+01 6.64224052755348104427e+00 9.73335895934059358581e+00 5.95072694616574793258e+00 9.42040733980467592801e+00 7.53937112616324078829e+00 1.14345796408631645846e+01 +3114 15565.00 7.77261106841446718363e+01 5.77565655840326463988e+00 1.18708556932599123002e+01 6.64496160316063644302e+00 9.73663926860537465302e+00 5.95253247801514984161e+00 9.42343988450245539923e+00 7.54295614668934266689e+00 1.14388383912220223948e+01 +3115 15570.00 7.77523932771184433932e+01 5.77718227495131397831e+00 1.18754927704175372583e+01 6.64768259459056132243e+00 9.73991957787015572023e+00 5.95433775894966021980e+00 9.42647220347010872388e+00 7.54654080558086093333e+00 1.14430967329243653552e+01 +3116 15575.00 7.77786758700922007392e+01 5.77870769978100629061e+00 1.18801301822319906876e+01 6.65040350072393238179e+00 9.74319988713493678745e+00 5.95614278888636761167e+00 9.42950429633452813505e+00 7.55012510020531202315e+00 1.14473546659701987949e+01 +3117 15580.00 7.78049584630659722961e+01 5.78023283290270484258e+00 1.18847679289105538913e+01 6.65312432045179136253e+00 9.74648019639971785466e+00 5.95794756772162781289e+00 9.43253616275370099231e+00 7.55370902793021681276e+00 1.14516121902558793977e+01 +3118 15585.00 7.78312410560397296422e+01 5.78175767434750120799e+00 1.18894060111787194245e+01 6.65584505263408754416e+00 9.74976050565413387972e+00 5.95975209537253292069e+00 9.43556780235451597605e+00 7.55729258609199749941e+00 1.14558693058850451507e+01 +3119 15590.00 7.78575236490135011991e+01 5.78328222410503389739e+00 1.18940444291401217214e+01 6.65856569615149762598e+00 9.75304081491891672329e+00 5.96155637175616526235e+00 9.43859921481568875379e+00 7.56087577207890326747e+00 1.14601260126504218562e+01 +3120 15595.00 7.78838062419872443343e+01 5.78480648219602855420e+00 1.18986831834166082444e+01 6.66128624989506334941e+00 9.75632112417333097198e+00 5.96336039677925189295e+00 9.44163039975374829282e+00 7.56445858322735986690e+00 1.14643823105520024086e+01 +3121 15600.00 7.79100888348573761277e+01 5.78633044863085110876e+00 1.19033222744227433765e+01 6.66400671274546141376e+00 9.75960143342775054975e+00 5.96516417036924195827e+00 9.44466135684740670797e+00 7.56804101692561292936e+00 1.14686381996934283478e+01 +3122 15605.00 7.79363714278311192629e+01 5.78785412343022720449e+00 1.19079617024694535132e+01 6.66672708358336674195e+00 9.76288174268216835117e+00 5.96696769241213065271e+00 9.44769208572355267961e+00 7.57162307053081740094e+00 1.14728936798674219233e+01 +3123 15610.00 7.79626540208048908198e+01 5.78937750659415861776e+00 1.19126014680749410246e+01 6.66944736128945958598e+00 9.76616205194694764202e+00 5.96877096284573305240e+00 9.45072258605054038583e+00 7.57520474142085564750e+00 1.14771487510739813587e+01 +3124 15615.00 7.79889366137786623767e+01 5.79090059814337454469e+00 1.19172415716537685171e+01 6.67216754475477991093e+00 9.76944236121173048559e+00 5.97057398157677265971e+00 9.45375285747598859132e+00 7.57878602697360914675e+00 1.14814034133131031012e+01 +3125 15620.00 7.80152192067524197228e+01 5.79242339807787232075e+00 1.19218820135168606100e+01 6.67488763287036945826e+00 9.77272267046614651065e+00 5.97237674851197386516e+00 9.45678289965788110294e+00 7.58236692455659788692e+00 1.14856576665847871510e+01 +3126 15625.00 7.80415017997261770688e+01 5.79394590642874796060e+00 1.19265227942860612131e+01 6.67760762452726730487e+00 9.77600297973092757786e+00 5.97417926356842254876e+00 9.45981271224383846175e+00 7.58594743153733830354e+00 1.14899115107854008500e+01 +3127 15630.00 7.80677843926999344148e+01 5.79546812320636206550e+00 1.19311639142723002749e+01 6.68032751860615192641e+00 9.77928328895425202916e+00 5.97598152666320459048e+00 9.46284229489184447459e+00 7.58952754532480611260e+00 1.14941649460185786324e+01 +3128 15635.00 7.80940669856736917609e+01 5.79699004841071641181e+00 1.19358053738901350727e+01 6.68304731399806506431e+00 9.78256359823975962797e+00 5.97778353771340942302e+00 9.46587164725988650105e+00 7.59310726327615359565e+00 1.14984179720770391953e+01 +3129 15640.00 7.81203495786474633178e+01 5.79851168205217426532e+00 1.19404471735541299893e+01 6.68576700961477587981e+00 9.78584390752527077950e+00 5.97958529662575877239e+00 9.46890076901631339013e+00 7.59668658280035913322e+00 1.15026705889607807620e+01 +3130 15645.00 7.81466321716212206638e+01 5.80003302416182897616e+00 1.19450893136788529603e+01 6.68848660432659780639e+00 9.78912421673823018864e+00 5.98138680332770533710e+00 9.47192965980874035381e+00 7.60026550126493827264e+00 1.15069227967734484253e+01 +3131 15650.00 7.81729147645949922207e+01 5.80155407472931550217e+00 1.19497317947825028028e+01 6.69120609705566238290e+00 9.79240452601337452165e+00 5.98318805772597084314e+00 9.47495831929515830439e+00 7.60384401606850257593e+00 1.15111745953077555527e+01 +3132 15655.00 7.81991973575687495668e+01 5.80307483379608957108e+00 1.19543746171760112418e+01 6.69392548667228393100e+00 9.79568483528852063102e+00 5.98498905973764205868e+00 9.47798674715427580395e+00 7.60742212460966182874e+00 1.15154259847709887765e+01 +3133 15660.00 7.82254799505425069128e+01 5.80459530135178880528e+00 1.19590177813775735416e+01 6.69664477209859487772e+00 9.79896514454293665608e+00 5.98678980927980841642e+00 9.48101494304408198843e+00 7.61099982427666343909e+00 1.15196769649558650173e+01 +3134 15665.00 7.82517625435162642589e+01 5.80611547741714062454e+00 1.19636612878017647432e+01 6.69936395223600289484e+00 9.80224545380771772329e+00 5.98859030626955490817e+00 9.48404290662255711197e+00 7.61457711246811719263e+00 1.15239275358623824985e+01 +3135 15670.00 7.82780451364900216049e+01 5.80763536200251007102e+00 1.19683051367594988079e+01 6.70208302596518290528e+00 9.80552576306213552471e+00 5.99039055063433423243e+00 9.48707063755805179994e+00 7.61815398658263465137e+00 1.15281776974905412203e+01 +3136 15675.00 7.83043277294637931618e+01 5.80915495511825863417e+00 1.19729493287689816583e+01 6.70480199220826822426e+00 9.80880607230618828396e+00 5.99219054228086989156e+00 9.49009813551891490135e+00 7.62173044403955390891e+00 1.15324274498403411826e+01 +3137 15680.00 7.83306103224375362970e+01 5.81067425679548144046e+00 1.19775938642447830063e+01 6.70752084986666652355e+00 9.81208638159169765913e+00 5.99399028112624598919e+00 9.49312540017349348886e+00 7.62530648221675733112e+00 1.15366767928081426220e+01 +3138 15685.00 7.83568929154113078539e+01 5.81219326703417760172e+00 1.19822387436014636819e+01 6.71023959784177925769e+00 9.81536669085647694999e+00 5.99578976708755284619e+00 9.49615243119014174056e+00 7.62888209855431131956e+00 1.15409257264975870783e+01 +3139 15690.00 7.83831755083850794108e+01 5.81371198584470949555e+00 1.19868839672535862917e+01 6.71295823504537825244e+00 9.81864700012125979356e+00 5.99758900009224049654e+00 9.49917922824756466582e+00 7.63245729043009912829e+00 1.15451742508050312352e+01 +3140 15695.00 7.84094581013588367568e+01 5.81523041324780809447e+00 1.19915295356157152185e+01 6.71567676039959859935e+00 9.82192730936531255281e+00 5.99938798005739570840e+00 9.50220579101411644274e+00 7.63603205528418893522e+00 1.15494223658341184091e+01 +3141 15700.00 7.84357406943325941029e+01 5.81674854925383666426e+00 1.19961754491024166214e+01 6.71839517279547759898e+00 9.82520761861973035423e+00 6.00118670688974376048e+00 9.50523211915814236761e+00 7.63960639052555290363e+00 1.15536700713775637439e+01 +3142 15705.00 7.84620232873063514489e+01 5.81826639387315758256e+00 1.20008217082318928703e+01 6.72111347115515123107e+00 9.82848792789487291088e+00 6.00298518052709617621e+00 9.50825821236872492648e+00 7.64318029356316674949e+00 1.15579173675390123321e+01 +3143 15710.00 7.84883058802801087950e+01 5.81978394712650182186e+00 1.20054683133150721375e+01 6.72383165439038865685e+00 9.83176823714929248865e+00 6.00478340087618001064e+00 9.51128407030384437348e+00 7.64675376182673449676e+00 1.15621642542148208577e+01 +3144 15715.00 7.85145884732538803519e+01 5.82130120903459502557e+00 1.20101152648701532399e+01 6.72654972142332319152e+00 9.83504854640370851371e+00 6.00658136787480945173e+00 9.51430969265257608924e+00 7.65032679273559335087e+00 1.15664107315086290839e+01 +3145 15720.00 7.85408710662276376979e+01 5.82281817959743808188e+00 1.20147625632080625735e+01 6.72926767117608726210e+00 9.83832885566848958092e+00 6.00837908141934295969e+00 9.51733507909363751764e+00 7.65389938371944733575e+00 1.15706567993167972475e+01 +3146 15725.00 7.85671536592013950440e+01 5.82433485884612345274e+00 1.20194102087433627446e+01 6.73198550255008676402e+00 9.84160916494363213758e+00 6.01017654144759472246e+00 9.52036022931610403930e+00 7.65747153220799958717e+00 1.15749024576393253483e+01 +3147 15730.00 7.85934362521751666009e+01 5.82585124678065113812e+00 1.20240582019942596759e+01 6.73470321447782005464e+00 9.84488947419805171535e+00 6.01197374787665417273e+00 9.52338514297795946106e+00 7.66104323563095057636e+00 1.15791477064762151628e+01 +3148 15735.00 7.86197188451489239469e+01 5.82736734342174944601e+00 1.20287065433753177501e+01 6.73742080589178371497e+00 9.84816978344210447460e+00 6.01377070063397134447e+00 9.52640981979937251367e+00 7.66461449142836936943e+00 1.15833925458274631382e+01 +3149 15740.00 7.86460014380190415295e+01 5.82888314879014579617e+00 1.20333552333010995739e+01 6.74013827569338364043e+00 9.85145009271724880762e+00 6.01556739963663478221e+00 9.52943425942796196182e+00 7.66818529702995999031e+00 1.15876369756930728272e+01 +3150 15745.00 7.86722840309927988756e+01 5.83039866289620700712e+00 1.20380042721861713062e+01 6.74285562282548234236e+00 9.85473040198203165119e+00 6.01736384480172947775e+00 9.53245846158390541802e+00 7.67175564987578617604e+00 1.15918809959694009137e+01 +3151 15750.00 7.86985666239665562216e+01 5.83191388575029279195e+00 1.20426536603414540139e+01 6.74557284621021047144e+00 9.85801071122608263408e+00 6.01916003606707139539e+00 9.53548242592517603100e+00 7.67532554741628025852e+00 1.15961246067600889376e+01 +3152 15755.00 7.87248492169403135676e+01 5.83342881738349916532e+00 1.20473033983887969356e+01 6.74828994476970489558e+00 9.86129102050122874346e+00 6.02095597334974907966e+00 9.53850615217195318962e+00 7.67889498709151130384e+00 1.16003678080651368987e+01 +3153 15760.00 7.87511318099140851245e+01 5.83494345779582435085e+00 1.20519534865354760456e+01 6.75100691744682368522e+00 9.86457132975564476851e+00 6.02275165656684929871e+00 9.54152963999257863748e+00 7.68246396635190809121e+00 1.16046105997809014809e+01 +3154 15765.00 7.87774144028878566814e+01 5.83645780701836169868e+00 1.20566039254033441352e+01 6.75372376317406786228e+00 9.86785163938317033683e+00 6.02454708565618712868e+00 9.54455288908649635005e+00 7.68603248264790384070e+00 1.16088529819073862370e+01 +3155 15770.00 7.88036969958616140275e+01 5.83797186506147447460e+00 1.20612547153033187186e+01 6.75644048087356896559e+00 9.87113194830593343454e+00 6.02634226053484844954e+00 9.54757589916351179227e+00 7.68960053341956228934e+00 1.16130949544445929433e+01 +3156 15775.00 7.88299795888353713735e+01 5.83948563193552683259e+00 1.20659058566499695075e+01 6.75915706948818950650e+00 9.87441225758108132027e+00 6.02813718111992358217e+00 9.55059866989197558951e+00 7.69316811614840823097e+00 1.16173365174961578106e+01 +3157 15780.00 7.88562621818091429304e+01 5.84099910767161123459e+00 1.20705573499614970956e+01 6.76187352796079021999e+00 9.87769256680440399521e+00 6.02993184735958820397e+00 9.55362120100241618559e+00 7.69673522828487577385e+00 1.16215776709584410753e+01 +3158 15785.00 7.88825447747828860656e+01 5.84251229228009183458e+00 1.20752091954451845623e+01 6.76458985521350530945e+00 9.88097287606918683878e+00 6.03172625916056937001e+00 9.55664349216318420588e+00 7.70030186727939103264e+00 1.16258184148314427375e+01 +3159 15790.00 7.89088273677566576225e+01 5.84402518578169694052e+00 1.20798613937228775939e+01 6.76730605019955966384e+00 9.88425318531323782167e+00 6.03352041645031622608e+00 9.55966554309445015747e+00 7.70386803060311731173e+00 1.16300587491151627972e+01 +3160 15795.00 7.89351099607304149686e+01 5.84553778818678893003e+00 1.20845139452091405730e+01 6.77002211186181757085e+00 9.88753349458838393105e+00 6.03531431916664207193e+00 9.56268735349565623949e+00 7.70743371573757585224e+00 1.16342986738096065835e+01 +3161 15800.00 7.89613925537041865255e+01 5.84705009952646470595e+00 1.20891668502148981190e+01 6.77273803914313710095e+00 9.89081380382207342450e+00 6.03710796723700227062e+00 9.56570892307660258780e+00 7.71099892013319809791e+00 1.16385381889147652146e+01 +3162 15805.00 7.89876751466779438715e+01 5.84856211981108309317e+00 1.20938201091547128385e+01 6.77545383098638165364e+00 9.89409411310758102331e+00 6.03890136057848270212e+00 9.56873025153673673060e+00 7.71456364127150884258e+00 1.16427772944306422431e+01 +3163 15810.00 7.90139577396517012176e+01 5.85007384906137595237e+00 1.20984737225467906541e+01 6.77816948634477700608e+00 9.89737442234127051677e+00 6.04069449913926082019e+00 9.57175133858585880375e+00 7.71812787663403021554e+00 1.16470159903572394455e+01 +3164 15815.00 7.90402403326254585636e+01 5.85158528730843219279e+00 1.21031276907020526323e+01 6.78088500416118566960e+00 9.90065473162677811558e+00 6.04248738281569774955e+00 9.57477218392341278275e+00 7.72169162370228434611e+00 1.16512542766945550454e+01 +3165 15820.00 7.90665229255992159096e+01 5.85309643455225536712e+00 1.21077820141387046959e+01 6.78360038338883342135e+00 9.90393504087083265119e+00 6.04428001156633687430e+00 9.57779278727993066411e+00 7.72525487994743365050e+00 1.16554921534425908192e+01 +3166 15825.00 7.90928055185729874665e+01 5.85460729082393616096e+00 1.21124366931676732406e+01 6.78631562298094248575e+00 9.90721535015634025001e+00 6.04607238531862822839e+00 9.58081314836521791278e+00 7.72881764286136174746e+00 1.16597296204977052270e+01 +3167 15830.00 7.91190881115467306017e+01 5.85611785613383784010e+00 1.21170917283071570836e+01 6.78903072190110723483e+00 9.91049565944185140154e+00 6.04786450398966124453e+00 9.58383326688907999369e+00 7.73237990993596024936e+00 1.16639666780671760193e+01 +3168 15835.00 7.91453707045205021586e+01 5.85762813052341790865e+00 1.21217471199717259367e+01 6.79174567908182336140e+00 9.91377596866517585283e+00 6.04965636751724833431e+00 9.58685314256132237176e+00 7.73594167865274862095e+00 1.16682033259437289985e+01 +3169 15840.00 7.91716532974942737155e+01 5.85913811400304052057e+00 1.21264028684723008666e+01 6.79446049350740821637e+00 9.91705627790922861209e+00 6.05144797582884308440e+00 9.58987277512284030934e+00 7.73950294651398262857e+00 1.16724395642309985988e+01 +3170 15845.00 7.91979358904680310616e+01 5.86064780659343309566e+00 1.21310589743270824670e+01 6.79717516412072431109e+00 9.92033658719473976362e+00 6.05323932886225879457e+00 9.59289216427307600554e+00 7.74306371101154589098e+00 1.16766753930326281363e+01 +3171 15850.00 7.92242184834417884076e+01 5.86215720831532483004e+00 1.21357154378470024625e+01 6.79988968989572573065e+00 9.92361689649061240459e+00 6.05503042654495082786e+00 9.59591130974256500963e+00 7.74662396964769239815e+00 1.16809108121413380843e+01 +3172 15855.00 7.92505010764155599645e+01 5.86366631918944491986e+00 1.21403722595502578940e+01 6.80260406978563914038e+00 9.92689720574502842965e+00 6.05682126880436566552e+00 9.59893021126183931813e+00 7.75018371993503762951e+00 1.16851458216607628771e+01 +3173 15860.00 7.92767836693893030997e+01 5.86517513924688138616e+00 1.21450294398514184735e+01 6.80531830275405180686e+00 9.93017751497871792310e+00 6.05861185558868609036e+00 9.60194886854070261961e+00 7.75374295936546786834e+00 1.16893804215909096200e+01 +3174 15865.00 7.93030662623630746566e+01 5.86668366849800282381e+00 1.21496869790614052675e+01 6.80803238778528552189e+00 9.93345782423313394816e+00 6.06040218682536124817e+00 9.60496728133041877129e+00 7.75730168545160037041e+00 1.16936146120354145239e+01 +3175 15870.00 7.93293488553368320026e+01 5.86819190698426318420e+00 1.21543448776984241988e+01 6.81074632383256073354e+00 9.93673813349791501537e+00 6.06219226244184383745e+00 9.60798544935115472754e+00 7.76085989571641299278e+00 1.16978483927869998382e+01 +3176 15875.00 7.93556314483105893487e+01 5.86969985471602839766e+00 1.21590031360733945576e+01 6.81346010986983685598e+00 9.94001844274196777462e+00 6.06398208238631308831e+00 9.61100337232308277180e+00 7.76441758766215972543e+00 1.17020817639493017737e+01 +3177 15880.00 7.93819140411807211422e+01 5.87120751173475330376e+00 1.21636617547045240428e+01 6.81617374487106530978e+00 9.94329875201711210764e+00 6.06577164658621992288e+00 9.61402105000782469801e+00 7.76797475881181842539e+00 1.17063147256259671991e+01 +3178 15885.00 7.94081966341544784882e+01 5.87271487804043879066e+00 1.21683207339027372740e+01 6.81888722781020018004e+00 9.94657906127152990905e+00 6.06756095496901615149e+00 9.61703848211518774747e+00 7.77153140668836872607e+00 1.17105472777133456930e+01 +3179 15890.00 7.94344792271282358342e+01 5.87422195367453969794e+00 1.21729800741862366209e+01 6.82160055766119555187e+00 9.94985937053630919991e+00 6.06935000748288189243e+00 9.62005566839643577737e+00 7.77508752881479292540e+00 1.17147794202114496898e+01 +3180 15895.00 7.94607618201020073911e+01 5.87572873865778522173e+00 1.21776397758659467030e+01 6.82431373340836966435e+00 9.95313967980109204348e+00 6.07113880405526451511e+00 9.62307260859246227369e+00 7.77864312272443214624e+00 1.17190111531202667550e+01 +3181 15900.00 7.94870444130757505263e+01 5.87723523302126960033e+00 1.21822998393564283504e+01 6.82702675403603898019e+00 9.95641998898295987885e+00 6.07292734463434946690e+00 9.62608930243380278569e+00 7.78219818594026779834e+00 1.17232424765434455338e+01 +3182 15905.00 7.95133270060495220832e+01 5.87874143678571936533e+00 1.21869602651758928147e+01 6.82973961850779787142e+00 9.95970029832028913575e+00 6.07471562914758322904e+00 9.62910574968208088364e+00 7.78575271599564278091e+00 1.17274733903773462629e+01 +3183 15910.00 7.95396095990232794293e+01 5.88024734998222520233e+00 1.21916210536352593863e+01 6.83245232582868844418e+00 9.96298060755397862920e+00 6.07650365754314858435e+00 9.63212195007819538262e+00 7.78930671044463007746e+00 1.17317038947256033765e+01 +3184 15915.00 7.95658921919970509862e+01 5.88175297264188223778e+00 1.21962822051490906716e+01 6.83516487496229974141e+00 9.96626091687057957813e+00 6.07829142975885794442e+00 9.63513790336304509765e+00 7.79286016681020932140e+00 1.17359339894845824404e+01 +3185 15920.00 7.95921747849708083322e+01 5.88325830478541700330e+00 1.22009437201319546062e+01 6.83787726492404601686e+00 9.96954122622863714298e+00 6.08007894572216578410e+00 9.63815360929825715175e+00 7.79641308264645171988e+00 1.17401636747579196651e+01 +3186 15925.00 7.96184573779445656783e+01 5.88476334644392107265e+00 1.22056055989984120203e+01 6.84058949467751631346e+00 9.97282153536904836244e+00 6.08186620538124866897e+00 9.64116906763508829670e+00 7.79996545548670194847e+00 1.17443929504419770637e+01 +3187 15930.00 7.96447399709183230243e+01 5.88626809764848868411e+00 1.22102678421630290728e+01 6.84330156322775362554e+00 9.97610184461310112169e+00 6.08365320868428760548e+00 9.64418427811443734754e+00 7.80351728289539803285e+00 1.17486218167440341631e+01 +3188 15935.00 7.96710225638920803704e+01 5.88777255843021052328e+00 1.22149304499367268306e+01 6.84601346955907974490e+00 9.97938215387788218891e+00 6.08543995555873351577e+00 9.64719924050829646944e+00 7.80706856241624524984e+00 1.17528502734568114363e+01 +3189 15940.00 7.96973051568658519273e+01 5.88927672880981667447e+00 1.22195934229413527561e+01 6.84872521268690359619e+00 9.98266246314266325612e+00 6.08722644595276562995e+00 9.65021395457829100906e+00 7.81061929161367984875e+00 1.17570783206839486468e+01 +3190 15945.00 7.97235877498395950624e+01 5.89078060883912701939e+00 1.22242567613841881524e+01 6.85143679158517837635e+00 9.98594277240744432333e+00 6.08901267980420168868e+00 9.65322842007567771816e+00 7.81416946805213985527e+00 1.17613059585290837816e+01 +3191 15950.00 7.97498703428133808302e+01 5.89228419852850393568e+00 1.22289204656797974025e+01 6.85414820525895240877e+00 9.98922308164113381679e+00 6.09079865706121736935e+00 9.65624263677245231463e+00 7.81771908927533054623e+00 1.17655331867849426430e+01 +3192 15955.00 7.97761529357871381762e+01 5.89378749790904166161e+00 1.22335845363463828761e+01 6.85685945272363372993e+00 9.99250339095773654208e+00 6.09258437767199367840e+00 9.65925660443023836876e+00 7.82126815286842003161e+00 1.17697600056587994288e+01 +3193 15960.00 7.98024355287608955223e+01 5.89529050703256096710e+00 1.22382489736948745218e+01 6.85957053296354146710e+00 9.99578370018106099337e+00 6.09436984156398331436e+00 9.66227032281065945085e+00 7.82481665639584189620e+00 1.17739864150470161519e+01 +3194 15965.00 7.98287181217346528683e+01 5.89679322591978749557e+00 1.22429137782434711568e+01 6.86228144500445047527e+00 9.99906400943547879479e+00 6.09615504869572966129e+00 9.66528379169607454457e+00 7.82836459742203238932e+00 1.17782124149495945886e+01 +3195 15970.00 7.98550007147084244252e+01 5.89829565460181548531e+00 1.22475789501994558606e+01 6.86499218783067899352e+00 1.00023443187417147016e+01 6.09793999900504601897e+00 9.66829701085846693331e+00 7.83191197353215873278e+00 1.17824380054701727261e+01 +3196 15975.00 7.98812833076821817713e+01 5.89979779310973739825e+00 1.22522444900810363322e+01 6.86770276046800098868e+00 1.00056246280064957688e+01 6.09972469244011250566e+00 9.67130998006983233495e+00 7.83545878230101688899e+00 1.17866631866087523406e+01 +3197 15980.00 7.99075659006559391173e+01 5.90129964149537311613e+00 1.22569103983027751781e+01 6.87041316192146300779e+00 1.00089049372194551779e+01 6.10150912894911101603e+00 9.67432269910215758557e+00 7.83900502132413823375e+00 1.17908879582616901160e+01 +3198 15985.00 7.99338484936296964634e+01 5.90280119977945094689e+00 1.22615766751755934649e+01 6.87312339120647486368e+00 1.00121852464842380215e+01 6.10329330846985396164e+00 9.67733516774815782924e+00 7.84255068817632139400e+00 1.17951123205326311449e+01 +3199 15990.00 7.99601310866034680203e+01 5.90430246799306424066e+00 1.22662433212176988917e+01 6.87583344733844636920e+00 1.00154655557386540465e+01 6.10507723096088650294e+00 9.68034738577983056018e+00 7.84609578044273270336e+00 1.17993362734215736509e+01 +3200 15995.00 7.99864136795772253663e+01 5.90580344618803021461e+00 1.22709103366363727616e+01 6.87854332933279000173e+00 1.00187458650034351137e+01 6.10686089636002371606e+00 9.68335935297952410394e+00 7.84964029572926502709e+00 1.18035598170321573974e+01 +3201 16000.00 8.00126962725509827123e+01 5.90730413439544577159e+00 1.22755777220534607608e+01 6.88125303620491468592e+00 1.00220261742474878730e+01 6.10864430462580898507e+00 9.68637106915032042309e+00 7.85318423163144441190e+00 1.18077829511570993049e+01 +3202 16005.00 8.00389788655247542692e+01 5.90880453265676486296e+00 1.22802454777798839558e+01 6.88396256698059438861e+00 1.00253064835537255561e+01 6.11042745570642154007e+00 9.68938253406420813008e+00 7.85672758574480045723e+00 1.18120056759000426894e+01 +3203 16010.00 8.00652614584984974044e+01 5.91030464099271490852e+00 1.22849136041265705188e+01 6.88667192068560574114e+00 1.00285867927874132732e+01 6.11221034953967734538e+00 9.69239374751390947438e+00 7.86027035566486098617e+00 1.18162279913646308671e+01 +3204 16015.00 8.00915440514722689613e+01 5.91180445946548172031e+00 1.22895821015080795036e+01 6.88938109634572093398e+00 1.00318671020521943404e+01 6.11399298608412156142e+00 9.69540470930250641857e+00 7.86381253901825072461e+00 1.18204498974472169692e+01 +3205 16020.00 8.01178266444460263074e+01 5.91330398809579271813e+00 1.22942509704426186090e+01 6.89209009298671571031e+00 1.00351474113480669814e+01 6.11577536529829490775e+00 9.69841541923307737250e+00 7.86735413339012890077e+00 1.18246713942514478646e+01 +3206 16025.00 8.01441092373161581008e+01 5.91480322693546956003e+00 1.22989202112411106782e+01 6.89479890963436403695e+00 1.00384277205817582512e+01 6.11755748712001246048e+00 9.70142587708797776713e+00 7.87089513641748173001e+00 1.18288924817773182241e+01 +3207 16030.00 8.01703918302899154469e+01 5.91630217602596708559e+00 1.23035898242144767778e+01 6.89750754532480492287e+00 1.00417080298258092341e+01 6.11933935149745700244e+00 9.70443608267029134140e+00 7.87443554570620385391e+00 1.18331131599211900607e+01 +3208 16035.00 8.01966744232636727929e+01 5.91780083539837953310e+00 1.23082598098809263831e+01 6.90021599908381322308e+00 1.00449883391216818751e+01 6.12112095839953429532e+00 9.70744603579345977096e+00 7.87797535888291555750e+00 1.18373334288903482303e+01 +3209 16040.00 8.02229570162374301390e+01 5.91929920510452678428e+00 1.23129301685513787845e+01 6.90292426995789032418e+00 1.00482686483346448370e+01 6.12290230777442356924e+00 9.71045573626057034744e+00 7.88151457356387119546e+00 1.18415532884775043243e+01 +3210 16045.00 8.02492396092112016959e+01 5.92079728518586367869e+00 1.23176009006403965884e+01 6.90563235698317523514e+00 1.00515489575890608620e+01 6.12468339957030494247e+00 9.71346518388506652286e+00 7.88505318738605875950e+00 1.18457727387862998825e+01 +3211 16050.00 8.02755222021849448311e+01 5.92229507568384949678e+00 1.23222720064589061906e+01 6.90834025919580785313e+00 1.00548292668642069714e+01 6.12646423375608417672e+00 9.71647437847003025979e+00 7.88859119798646091226e+00 1.18499917799203835500e+01 +3212 16055.00 8.03018047951587163880e+01 5.92379257663993730176e+00 1.23269434865251135136e+01 6.91104797564228867657e+00 1.00581095761289862622e+01 6.12824481025921574684e+00 9.71948331983927360511e+00 7.89212860297097229534e+00 1.18542104117761049054e+01 +3213 16060.00 8.03280873881324737340e+01 5.92528978810594963988e+00 1.23316153411499378478e+01 6.91375550535875760261e+00 1.00613898853937673294e+01 6.13002512906933461068e+00 9.72249200780624001084e+00 7.89566540000766892149e+00 1.18584286343534710539e+01 +3214 16065.00 8.03543699811062452909e+01 5.92678671011297897309e+00 1.23362875707479453524e+01 6.91646284740208283637e+00 1.00646701947000050126e+01 6.13180519011389080219e+00 9.72550044218437825805e+00 7.89920158673353522971e+00 1.18626464477561199828e+01 +3215 16070.00 8.03806525740800026369e+01 5.92828334273357349105e+00 1.23409601756300606468e+01 6.91917000081876309991e+00 1.00679505039233294639e+01 6.13358499337215690161e+00 9.72850862279749861727e+00 7.90273716078555743536e+00 1.18668638519840516921e+01 +3216 16075.00 8.04069351670537599830e+01 5.92977968598846061354e+00 1.23456331563144825481e+01 6.92187696464494184312e+00 1.00712308131777472653e+01 6.13536453878194798506e+00 9.73151654947977284849e+00 7.90627211982144739721e+00 1.18710808469336246418e+01 +3217 16080.00 8.04332177600275173290e+01 5.93127573993982615264e+00 1.23503065130085012413e+01 6.92458373795820936181e+00 1.00745111224425265561e+01 6.13714382632253663274e+00 9.73452422204465150912e+00 7.90980646148855459643e+00 1.18752974328121236880e+01 +3218 16085.00 8.04595003530012746751e+01 5.93277150462912583606e+00 1.23549802462303155437e+01 6.92729031979470732949e+00 1.00777914316969461339e+01 6.13892285593173792080e+00 9.73753164033666607224e+00 7.91334018344459089178e+00 1.18795136094122604220e+01 +3219 16090.00 8.04857829459750462320e+01 5.93426698010818132190e+00 1.23596543562908518510e+01 6.92999670922166632892e+00 1.00810717409617272011e+01 6.14070162758882265308e+00 9.74053880417963391380e+00 7.91687328334727258294e+00 1.18837293769413250288e+01 +3220 16095.00 8.05120655389488035780e+01 5.93576216643917486948e+00 1.23643288436046745460e+01 6.93270290528558685850e+00 1.00843520502161432262e+01 6.14248014124197094787e+00 9.74354571341809005958e+00 7.92040575886467390632e+00 1.18879447351920290998e+01 +3221 16100.00 8.05383481319225751349e+01 5.93725706365319982893e+00 1.23690037084827064717e+01 6.93540890706406720767e+00 1.00876323594809242934e+01 6.14425839684972707744e+00 9.74655236787584478009e+00 7.92393760766487442737e+00 1.18921596844753025835e+01 +3222 16105.00 8.05646307248963324810e+01 5.93875167181244290049e+00 1.23736789514431499981e+01 6.93811471361397291702e+00 1.00909126688286185924e+01 6.14603639438099857983e+00 9.74955876739743843018e+00 7.92746882741595015887e+00 1.18963742244802137549e+01 +3223 16110.00 8.05909133178700898270e+01 5.94024599095835714735e+00 1.23783545726932882047e+01 6.94082032399216863894e+00 1.00941929780312129594e+01 6.14781413380469210495e+00 9.75256491183777107778e+00 7.93099941579634126754e+00 1.19005883554140510228e+01 +3224 16115.00 8.06171959108438471731e+01 5.94174002116349431191e+00 1.23830305726476836981e+01 6.94352573728661504049e+00 1.00974732871716259552e+01 6.14959161506898777105e+00 9.75557080103102158830e+00 7.93452937048448969648e+00 1.19048020772768108344e+01 +3225 16120.00 8.06434785038176187300e+01 5.94323376246930923372e+00 1.23877069517209079663e+01 6.94623095254381706098e+00 1.01007535964985919463e+01 6.15136883814279400440e+00 9.75857643484245151910e+00 7.93805868916920243095e+00 1.19090153899648534264e+01 +3226 16125.00 8.06697610967913618651e+01 5.94472721492762268269e+00 1.23923837103275165106e+01 6.94893596886209330421e+00 1.01040339057737362793e+01 6.15314580299501745486e+00 9.76158181310623440652e+00 7.94158736951855637187e+00 1.19132282935818221148e+01 +3227 16130.00 8.06960436897651334220e+01 5.94622037860061780634e+00 1.23970608486747941868e+01 6.95164078529831375164e+00 1.01073142150385173466e+01 6.15492250959456654869e+00 9.76458693568764246606e+00 7.94511540924208325976e+00 1.19174407882313548868e+01 +3228 16135.00 8.07223262827388907681e+01 5.94771325354011715092e+00 1.24017383672809469175e+01 6.95434540093007402817e+00 1.01105945243136634559e+01 6.15669895788961962779e+00 9.76759180243121072351e+00 7.94864280601822592587e+00 1.19216528737061722154e+01 +3229 16140.00 8.07486088757126623250e+01 5.94920583981866979428e+00 1.24064162665605373093e+01 6.95704981484533035996e+00 1.01138748335991710547e+01 6.15847514786981431456e+00 9.77059641322293437327e+00 7.95216955755651788706e+00 1.19258645501099103114e+01 +3230 16145.00 8.07748914686864196710e+01 5.95069813746736464566e+00 1.24110945467208519943e+01 6.95975402612168103644e+00 1.01171551428328605482e+01 6.16025107948332895091e+00 9.77360076789698872801e+00 7.95569566154576346406e+00 1.19300758175462142674e+01 +3231 16150.00 8.08011740616601770171e+01 5.95219014656911937777e+00 1.24157732081764464738e+01 6.96245803384708139561e+00 1.01204354520872783496e+01 6.16202675270943434072e+00 9.77660486633936898215e+00 7.95922111570586210405e+00 1.19342866758078027800e+01 +3232 16155.00 8.08274566546339485740e+01 5.95368186716538616565e+00 1.24204522512382506960e+01 6.96516183708876557290e+00 1.01237157613520576405e+01 6.16380216750667653258e+00 9.77960870841533846942e+00 7.96274591773598228173e+00 1.19384971251019571525e+01 +3233 16160.00 8.08537392476076917092e+01 5.95517329932871675169e+00 1.24251316764244652546e+01 6.96786543496578225643e+00 1.01269960705961103997e+01 6.16557732384396217640e+00 9.78261229400053089478e+00 7.96627006534565751394e+00 1.19427071654286738323e+01 +3234 16165.00 8.08800218404778092918e+01 5.95666444311093012942e+00 1.24298114840460200980e+01 6.97056882654536469346e+00 1.01302763797987083194e+01 6.16735222171092534182e+00 9.78561562296021492102e+00 7.96979355626515140187e+00 1.19469167966843166084e+01 +3235 16170.00 8.09063044334515808487e+01 5.95815529858457448853e+00 1.24344916744138309639e+01 6.97327201091547177469e+00 1.01335566891464026185e+01 6.16912686105574969986e+00 9.78861869518038041349e+00 7.97331638820399479783e+00 1.19511260189725216918e+01 +3236 16175.00 8.09325870264253524056e+01 5.95964586581183564107e+00 1.24391722478388260242e+01 6.97597498719515307641e+00 1.01368369984733668332e+01 6.17090124186806576745e+00 9.79162151053666285350e+00 7.97683855888208537266e+00 1.19553348322932944114e+01 +3237 16180.00 8.09588696193991097516e+01 5.96113614484453346876e+00 1.24438532047355643329e+01 6.97867775447236837749e+00 1.01401173076552346686e+01 6.17267536410642225775e+00 9.79462406891505388273e+00 7.98036006604005265785e+00 1.19595432365429896748e+01 +3238 16185.00 8.09851522123728670977e+01 5.96262613576557942707e+00 1.24485345455186138253e+01 6.98138031183507834498e+00 1.01433976169096506936e+01 6.17444922773972404428e+00 9.79762637020155047196e+00 7.98388090740815581370e+00 1.19637512318252525745e+01 +3239 16190.00 8.10114348053466244437e+01 5.96411583862679783863e+00 1.24532162704988973445e+01 6.98408265840233255517e+00 1.01466779261537052292e+01 6.17622283275760786125e+00 9.80062841429251108138e+00 7.98740108071665666500e+00 1.19679588181400777813e+01 +3240 16195.00 8.10377173983203960006e+01 5.96560525349036918641e+00 1.24578983799873341809e+01 6.98678479326209078693e+00 1.01499582354288513386e+01 6.17799617912897947036e+00 9.80363020107392735270e+00 7.99092058370618119056e+00 1.19721659954874706244e+01 +3241 16200.00 8.10639999912941391358e+01 5.96709438044957263259e+00 1.24625808743984922700e+01 6.98948671553340350471e+00 1.01532385446936306295e+01 6.17976926683311411637e+00 9.80663173044216307517e+00 7.99443941412772041133e+00 1.19763727638674239984e+01 +3242 16205.00 8.10902825842679106927e+01 5.96858321954586479308e+00 1.24672637540432926784e+01 6.99218842431459464137e+00 1.01565188539584116967e+01 6.18154209582855340699e+00 9.80963300229357670901e+00 7.99795756972189941791e+00 1.19805791232799450086e+01 +3243 16210.00 8.11165651772416680387e+01 5.97007177086215801154e+00 1.24719470193363033417e+01 6.99488991873508147989e+00 1.01597991632542861140e+01 6.18331466610493230007e+00 9.81263401654525146967e+00 8.00147504823971011945e+00 1.19847850737250336550e+01 +3244 16215.00 8.11428477702154395956e+01 5.97156003446063543549e+00 1.24766306704847984577e+01 6.99759119788282113461e+00 1.01630794724568822573e+01 6.18508697764152426402e+00 9.81563477309354937006e+00 8.00499184744250236179e+00 1.19889906152026846087e+01 +3245 16220.00 8.11691303631891969417e+01 5.97304801042421207313e+00 1.24813147080069928307e+01 7.00029226089759326612e+00 1.01663597817423898562e+01 6.18685903040723594870e+00 9.81863527184519213620e+00 8.00850796508126983042e+00 1.19931957477128996459e+01 +3246 16225.00 8.11954129561629684986e+01 5.97453569881507196015e+00 1.24859991321101624351e+01 7.00299310688808507308e+00 1.01696400909968094339e+01 6.18863082439170497651e+00 9.82163551270690504680e+00 8.01202339893809245552e+00 1.19974004713593238591e+01 +3247 16230.00 8.12216955491367116338e+01 5.97602309970576328624e+00 1.24906839432088716535e+01 7.00569373497334790812e+00 1.01729204002823170327e+01 6.19040235957420126311e+00 9.82463549560613813583e+00 8.01553814675360065678e+00 1.20016047860383103796e+01 +3248 16235.00 8.12479781421104831907e+01 5.97751021317919750686e+00 1.24953691416140433290e+01 7.00839414427243490024e+00 1.01762007095470981000e+01 6.19217363592363323477e+00 9.82763522044961490565e+00 8.01905220632023585381e+00 1.20058086917498645363e+01 +3249 16240.00 8.12742607350842405367e+01 5.97899703930792636442e+00 1.25000547277402418445e+01 7.01109433391475889152e+00 1.01794810188326074751e+01 6.19394465341927169533e+00 9.83063468716478539022e+00 8.02256557542008330586e+00 1.20100121885976225400e+01 +3250 16245.00 8.13005433280579978828e+01 5.98048357816449716040e+00 1.25047407017947520558e+01 7.01379430304010131891e+00 1.01827613280352036185e+01 6.19571541206111842115e+00 9.83363389567910317624e+00 8.02607825180413136934e+00 1.20142152764779464036e+01 +3251 16250.00 8.13268259210317694397e+01 5.98196982982145719632e+00 1.25094270642957745565e+01 7.01649405075714849289e+00 1.01860416372688931119e+01 6.19748591182844421610e+00 9.83663284590965147913e+00 8.02959023328555510091e+00 1.20184179553908343507e+01 +3252 16255.00 8.13531085140055267857e+01 5.98345579437208474616e+00 1.25141138153469544392e+01 7.01919357621604600439e+00 1.01893219465647657529e+01 6.19925615269015750641e+00 9.83963153779424892775e+00 8.03310151763607294129e+00 1.20226202254399279212e+01 +3253 16260.00 8.13793911069792841317e+01 5.98494147187856562198e+00 1.25188009555701338371e+01 7.02189287853584254151e+00 1.01926022558088185122e+01 6.20102613463589413811e+00 9.84262997126034733242e+00 8.03661210264813163917e+00 1.20268220865215891280e+01 +3254 16265.00 8.14056736999530414778e+01 5.98642686243417454506e+00 1.25234884850689560665e+01 7.02459195686668280700e+00 1.01958825650632345372e+01 6.20279585766565233484e+00 9.84562814625612325869e+00 8.04012198612454120905e+00 1.20310235387394541817e+01 +3255 16270.00 8.14319562929268130347e+01 5.98791196611146148143e+00 1.25281764042579872864e+01 7.02729081034834823782e+00 1.01991628743798372625e+01 6.20456532174834052284e+00 9.84862606270903029326e+00 8.04363116585774839962e+00 1.20352245819898850954e+01 +3256 16275.00 8.14582388859005561699e+01 5.98939678299333877476e+00 1.25328647134481467873e+01 7.02998943812061494185e+00 1.02024431836031617138e+01 6.20633452687359632449e+00 9.85162372057761004385e+00 8.04713963967129153332e+00 1.20394252162728800926e+01 +3257 16280.00 8.14845214788743277268e+01 5.99088131317308381085e+00 1.25375534129503591885e+01 7.03268783931290109024e+00 1.02057234928575795152e+01 6.20810347303105380945e+00 9.85462111978931787348e+00 8.05064740534725409304e+00 1.20436254416920842658e+01 +3258 16285.00 8.15108040718480850728e+01 5.99236555672324389121e+00 1.25422425031791870964e+01 7.03538601309607880552e+00 1.02090038021223588061e+01 6.20987216019998466976e+00 9.85761826032342192150e+00 8.05415446071953766705e+00 1.20478252581438507463e+01 +3259 16290.00 8.15370866648218566297e+01 5.99384951373709817801e+00 1.25469319844455551305e+01 7.03808395860992508375e+00 1.02122841114078699576e+01 6.21164058839075572394e+00 9.86061514210737399821e+00 8.05766080359095226981e+00 1.20520246656281830866e+01 +3260 16295.00 8.15633692577956139758e+01 5.99533318428719219639e+00 1.25516218569567463703e+01 7.04078167500458551586e+00 1.02155644206519209405e+01 6.21340875757227184550e+00 9.86361176509971748771e+00 8.06116643178503977651e+00 1.20562236642487210503e+01 +3261 16300.00 8.15896518507693713218e+01 5.99681656847717103886e+00 1.25563121211273234223e+01 7.04347916143020391644e+00 1.02188447299685254421e+01 6.21517666775489718844e+00 9.86660812927972585840e+00 8.06467134313569999904e+00 1.20604222537981815577e+01 +3262 16305.00 8.16159344436394889044e+01 5.99829966638994527273e+00 1.25610027773718506694e+01 7.04617641705765240800e+00 1.02221250391503932775e+01 6.21694431890754017900e+00 9.86960423459557745218e+00 8.06817553547683630200e+00 1.20646204345874927810e+01 +3263 16310.00 8.16422170366132604613e+01 5.99978247810842724164e+00 1.25656938257939678749e+01 7.04887344102670976298e+00 1.02254053484359008763e+01 6.21871171104056585932e+00 9.87260008102654396112e+00 8.07167900662162374203e+00 1.20688182063057247717e+01 +3264 16315.00 8.16684996295870035965e+01 6.00126500373625848539e+00 1.25703852669118809615e+01 7.05157023251861136970e+00 1.02286856576695903698e+01 6.22047884413324503328e+00 9.87559566852080372712e+00 8.07518175441432894957e+00 1.20730155690565226223e+01 +3265 16320.00 8.16947822225607751534e+01 6.00274724335635134764e+00 1.25750771009328712324e+01 7.05426679068350104274e+00 1.02319659669550979686e+01 6.22224571819594096667e+00 9.87859099707836030291e+00 8.07868377670958359715e+00 1.20772125229435296490e+01 +3266 16325.00 8.17210648155345467103e+01 6.00422919705161994841e+00 1.25797693281678650834e+01 7.05696311469225268098e+00 1.02352462762095157700e+01 6.22401233320792712789e+00 9.88158606665775351985e+00 8.08218507135165431521e+00 1.20814090677594574430e+01 +3267 16330.00 8.17473474085083040563e+01 6.00571086493606909329e+00 1.25844619489277818047e+01 7.05965920371573663061e+00 1.02385265854742968372e+01 6.22577868916920262876e+00 9.88458087725898515430e+00 8.08568563617444446834e+00 1.20856052037115908604e+01 +3268 16335.00 8.17736300014820614024e+01 6.00719224709260934958e+00 1.25891549636271857793e+01 7.06235505692482590234e+00 1.02418068947287146386e+01 6.22754478607976746929e+00 9.88757542884059859034e+00 8.08918546905331226071e+00 1.20898009305926503743e+01 +3269 16340.00 8.17999125944558187484e+01 6.00867334362488580979e+00 1.25938483724733618629e+01 7.06505067349038995417e+00 1.02450872039934939295e+01 6.22931062392925838367e+00 9.89056972141295709378e+00 8.09268456784288758854e+00 1.20939962485062721953e+01 +3270 16345.00 8.18261951874295760945e+01 6.01015415462617141884e+00 1.25985421758808691095e+01 7.06774605259366772714e+00 1.02483675132582749967e+01 6.23107620272803774952e+00 9.89356375495533590936e+00 8.09618293038744063495e+00 1.20981911574524598763e+01 +3271 16350.00 8.18524777804033476514e+01 6.01163468018974622709e+00 1.26032363739533561642e+01 7.07044119340552867925e+00 1.02516478225334211061e+01 6.23284152246574407741e+00 9.89655752947809297382e+00 8.09968055458305791205e+00 1.21023856573275736537e+01 +3272 16355.00 8.18787603733771049974e+01 6.01311492041924822161e+00 1.26079309672090182914e+01 7.07313609511757590553e+00 1.02549281318396570128e+01 6.23460658314237381461e+00 9.89955104495014381882e+00 8.10317743828436753972e+00 1.21065797481316117512e+01 +3273 16360.00 8.19050429663508623435e+01 6.01459487541832071855e+00 1.26126259559587889925e+01 7.07583075691104212979e+00 1.02582084410318898904e+01 6.23637138475793051384e+00 9.90254430140257291271e+00 8.10667357937709631699e+00 1.21107734299682121559e+01 +3274 16365.00 8.19313255593246339004e+01 6.01607454528024021556e+00 1.26173213403063009252e+01 7.07852517796716362852e+00 1.02614887502966727340e+01 6.23813592732277566455e+00 9.90553729882502231874e+00 8.11016897573660244802e+00 1.21149667028373801969e+01 +3275 16370.00 8.19576081522983912464e+01 6.01755393011901063005e+00 1.26220171206661202490e+01 7.08121935748790765075e+00 1.02647690595614538012e+01 6.23990021082654777729e+00 9.90853003723821501580e+00 8.11366362524860917915e+00 1.21191595665318292419e+01 +3276 16375.00 8.19838907452721628033e+01 6.01903303002791023602e+00 1.26267132973491733594e+01 7.08391329464414187811e+00 1.02680493688158698262e+01 6.24166423528997071912e+00 9.91152251664215455662e+00 8.11715752579883798035e+00 1.21233520211552026069e+01 +3277 16380.00 8.20101733382459059385e+01 6.02051184512094295087e+00 1.26314098706663795468e+01 7.08660698864820037812e+00 1.02713296781117424672e+01 6.24342800069232062299e+00 9.91451473705756924915e+00 8.12065067529374395860e+00 1.21275440668111400555e+01 +3278 16385.00 8.20364559312196774954e+01 6.02199037550175209077e+00 1.26361068408250236672e+01 7.08930043868131232188e+00 1.02746099873661602686e+01 6.24519150705432579684e+00 9.91750669850518562498e+00 8.12414307162941184970e+00 1.21317357031887222973e+01 +3279 16390.00 8.20627385241934348414e+01 6.02346862127397564279e+00 1.26408042082396683270e+01 7.09199364396617504269e+00 1.02778902965998497621e+01 6.24695475438634595378e+00 9.92049840100573199209e+00 8.12763471270192994211e+00 1.21359269305988668464e+01 +3280 16395.00 8.20890211171671921875e+01 6.02494658255162018889e+00 1.26455019731175930531e+01 7.09468660367365888675e+00 1.02811706058335374792e+01 6.24871774267802049252e+00 9.92348984459030170058e+00 8.13112559641775156649e+00 1.21401177487306561886e+01 +3281 16400.00 8.21153037101409637444e+01 6.02642425943832726887e+00 1.26502001357697242412e+01 7.09737931703682001228e+00 1.02844509151190468543e+01 6.25048047196044187501e+00 9.92648102928998632422e+00 8.13461572069368976656e+00 1.21443081577913680746e+01 +3282 16405.00 8.21415863031147210904e+01 6.02790165205846584229e+00 1.26548986965069847344e+01 7.10007178323689469579e+00 1.02877312244667411534e+01 6.25224294221288090512e+00 9.92947195513587743676e+00 8.13810508343619609661e+00 1.21484981576773627410e+01 +3283 16410.00 8.21678688960884784365e+01 6.02937876050531240679e+00 1.26595976555366576122e+01 7.10276400150693998370e+00 1.02910115336589740309e+01 6.25400515346642915659e+00 9.93246262216943520684e+00 8.14159368258281723740e+00 1.21526877483886419640e+01 +3284 16415.00 8.21941514890622357825e+01 6.03085558490323503378e+00 1.26642970132733037048e+01 7.10545597103855453014e+00 1.02942918429133900560e+01 6.25576710573145078342e+00 9.93545303043210914495e+00 8.14508151606072949846e+00 1.21568769298215606511e+01 +3285 16420.00 8.22204340820360073394e+01 6.03233212537660534736e+00 1.26689967699242060917e+01 7.10814769106479715788e+00 1.02975721521367145073e+01 6.25752879900794756196e+00 9.93844317996536297244e+00 8.14856858177638443408e+00 1.21610657020797621186e+01 +3286 16425.00 8.22467166750097504746e+01 6.03380838201869895698e+00 1.26736969256966496289e+01 7.11083916078762978685e+00 1.03008524614222221061e+01 6.25929023330628275801e+00 9.94143307082101301830e+00 8.15205487767769554353e+00 1.21652540650596066030e+01 +3287 16430.00 8.22729992679835220315e+01 6.03528435497461313020e+00 1.26783974810051933702e+01 7.11353037944010946347e+00 1.03041327707284615656e+01 6.26105140864718379135e+00 9.94442270305087916427e+00 8.15554040171256389158e+00 1.21694420186574561171e+01 +3288 16435.00 8.22992818609572793775e+01 6.03676004433762525281e+00 1.26830984360571239478e+01 7.11622134622420166039e+00 1.03074130799310577089e+01 6.26281232505137896993e+00 9.94741207671714988692e+00 8.15902515180817289320e+00 1.21736295630805830825e+01 +3289 16440.00 8.23255644539310509344e+01 6.03823545023210428440e+00 1.26877997910597173359e+01 7.11891206038332580164e+00 1.03106933892062020419e+01 6.26457298250850591614e+00 9.95040119187164151526e+00 8.16250912592279398439e+00 1.21778166981217133014e+01 +3290 16445.00 8.23518470468011685170e+01 6.03971057279278245034e+00 1.26925015464275450228e+01 7.12160252114017566782e+00 1.03139736984709831091e+01 6.26633338106001946954e+00 9.95339004858690756805e+00 8.16599232199397029319e+00 1.21820034237808449973e+01 +3291 16450.00 8.23781296397749258631e+01 6.04118541213366810894e+00 1.26972037023678865353e+01 7.12429272772780475265e+00 1.03172540077046726026e+01 6.26809352071628378411e+00 9.95637864692512586373e+00 8.16947473800070156358e+00 1.21861897400579763939e+01 +3292 16455.00 8.24044122327486832091e+01 6.04265996837912755524e+00 1.27019062591916611638e+01 7.12698267936890861307e+00 1.03205343170316368173e+01 6.26985340147729885985e+00 9.95936698695884992105e+00 8.17295637190126278426e+00 1.21903756469531092677e+01 +3293 16460.00 8.24306948257224547660e+01 6.04413424165352974882e+00 1.27066092171061555405e+01 7.12967237530690667313e+00 1.03238146262445997792e+01 6.27161302338452131266e+00 9.96235506876062970605e+00 8.17643722164356034909e+00 1.21945611444662418421e+01 +3294 16465.00 8.24569774186961979012e+01 6.04560823208124542560e+00 1.27113125763186491923e+01 7.13236181477485597924e+00 1.03270949354782874963e+01 6.27337238644831529655e+00 9.96534289242373816364e+00 8.17991728520659222568e+00 1.21987462323900945904e+01 +3295 16470.00 8.24832600116699694581e+01 6.04708193979700769916e+00 1.27160163372437065021e+01 7.13505099701617595542e+00 1.03303752447534318293e+01 6.27513149067904496547e+00 9.96833045801036199407e+00 8.18339656057972497649e+00 1.22029309109319505922e+01 +3296 16475.00 8.25095426046437410150e+01 6.04855536491482226324e+00 1.27207205000886123258e+01 7.13773992126392187174e+00 1.03336555540389412045e+01 6.27689033610780278138e+00 9.97131776562414096077e+00 8.18687504573159685606e+00 1.22071151798845214387e+01 +3297 16480.00 8.25358251976174983611e+01 6.05002850757978460905e+00 1.27254250650606444140e+01 7.14042858678224678926e+00 1.03369358633037222717e+01 6.27864892275531616406e+00 9.97430481535835511409e+00 8.19035273864120405563e+00 1.22112990392478124591e+01 +3298 16485.00 8.25621077905912557071e+01 6.05150136791626547250e+00 1.27301300323670876224e+01 7.14311699281456835564e+00 1.03402161725374117651e+01 6.28040725065267846361e+00 9.97729160729591235679e+00 8.19382963730827817983e+00 1.22154824890218254296e+01 +3299 16490.00 8.25883903835650272640e+01 6.05297394605899796716e+00 1.27348354024225045578e+01 7.14580513860430688311e+00 1.03434964818125578745e+01 6.28216531979988968004e+00 9.98027814153009451559e+00 8.19730573972218046208e+00 1.22196655291029134816e+01 +3300 16495.00 8.26146729765387703992e+01 6.05444624213235105259e+00 1.27395411754341782995e+01 7.14849302340524861421e+00 1.03467767910773389417e+01 6.28392313024876969507e+00 9.98326441818526433281e+00 8.20078104388264250701e+00 1.22238481595947217073e+01 +3301 16500.00 8.26409555695125419561e+01 6.05591825629178703849e+00 1.27442473515057486111e+01 7.15118064647117890331e+00 1.03500571004250296880e+01 6.28568068200968177450e+00 9.98625043735470718786e+00 8.20425554778938881384e+00 1.22280303803936067908e+01 +3302 16505.00 8.26672381624862993021e+01 6.05738998866167399626e+00 1.27489539311554214152e+01 7.15386800707660786003e+00 1.03533374096276276077e+01 6.28743797510335600265e+00 9.98923619915242255729e+00 8.20772924946287929515e+00 1.22322121913959289685e+01 +3303 16510.00 8.26935207554600708590e+01 6.05886143937674415128e+00 1.27536609143831949353e+01 7.15655510446495846111e+00 1.03566177188613171012e+01 6.28919500957124721907e+00 9.99222170369241702303e+00 8.21120214690284200287e+00 1.22363935927053315567e+01 +3304 16515.00 8.27198033484338282051e+01 6.06033260858209832378e+00 1.27583683014999973437e+01 7.15924193791074170434e+00 1.03598980281157331262e+01 6.29095178544444877389e+00 9.99520695108869539069e+00 8.21467423812973507324e+00 1.22405745841145279229e+01 +3305 16520.00 8.27460859414075855511e+01 6.06180349641246518644e+00 1.27630760928167461543e+01 7.16192850668847214024e+00 1.03631783373805141935e+01 6.29270830273332393290e+00 9.99819194146562928438e+00 8.21814552116401131343e+00 1.22447551656235198436e+01 +3306 16525.00 8.27723685343813428972e+01 6.06327410302331148984e+00 1.27677842885407226703e+01 7.16461481004157008101e+00 1.03664586466142019106e+01 6.29446456147933108838e+00 1.00011766749579482649e+01 8.22161599404685894399e+00 1.22489353373359506350e+01 +3307 16530.00 8.27986511273551002432e+01 6.06474442853900264083e+00 1.27724928888792153003e+01 7.16730084726527660877e+00 1.03697389558582564462e+01 6.29622056172392241535e+00 1.00041611516900204037e+01 8.22508565478837105900e+00 1.22531150990445336646e+01 +3308 16535.00 8.28249337203288718001e+01 6.06621447312536687946e+00 1.27772018941431433348e+01 7.16998661762373945550e+00 1.03730192652059489689e+01 6.29797630347746650870e+00 1.00071453717965859198e+01 8.22855450145045530519e+00 1.22572944507492724853e+01 +3309 16540.00 8.28512163133026149353e+01 6.06768423690677138893e+00 1.27819113044361465370e+01 7.17267212040183643751e+00 1.03762995744500017281e+01 6.29973178679178147377e+00 1.00101293354123725976e+01 8.23202253204320832936e+00 1.22614733924501670970e+01 +3310 16545.00 8.28774989062763864922e+01 6.06915372004904263292e+00 1.27866211200691495264e+01 7.17535735487408032895e+00 1.03795798836940544874e+01 6.30148701169796066068e+00 1.00131130426824785928e+01 8.23548974464927319161e+00 1.22656519240435741835e+01 +3311 16550.00 8.29037814992501580491e+01 6.07062292268691283681e+00 1.27913313413530733698e+01 7.17804232032534983432e+00 1.03828601929381072466e+01 6.30324197821673148923e+00 1.00160964937520002849e+01 8.23895613728910447549e+00 1.22698300454258557579e+01 +3312 16555.00 8.29300640922239153952e+01 6.07209184498621112880e+00 1.27960419683915631595e+01 7.18072701604051832902e+00 1.03861405021821617822e+01 6.30499668639991561747e+00 1.00190796887764026479e+01 8.24242170802461338042e+00 1.22740077567006498072e+01 +3313 16560.00 8.29563466851976727412e+01 6.07356048708166618155e+00 1.28007530014955399622e+01 7.18341144130446718208e+00 1.03894208115298560813e+01 6.30675113627860373100e+00 1.00220626279111453272e+01 8.24588645493844119017e+00 1.22781850577643183442e+01 +3314 16565.00 8.29826292781714442981e+01 6.07502884913910534692e+00 1.28054644408722833049e+01 7.18609559541243392289e+00 1.03927011206702655244e+01 6.30850532789425244573e+00 1.00250453113013264783e+01 8.24935037607177790164e+00 1.22823619485132180529e+01 +3315 16570.00 8.30089118711452016441e+01 6.07649693131399182278e+00 1.28101762866254382800e+01 7.18877947765966140992e+00 1.03959814300179598234e+01 6.31025926127795511178e+00 1.00280277391334990966e+01 8.25281346949689620374e+00 1.22865384289473489332e+01 +3316 16575.00 8.30351944641189589902e+01 6.07796473375142198847e+00 1.28148885390659259542e+01 7.19146308734139072527e+00 1.03992617392620143590e+01 6.31201293648153161087e+00 1.00310099115527595615e+01 8.25627573330680242236e+00 1.22907144989630712217e+01 +3317 16580.00 8.30614770570927163362e+01 6.07943225660685548917e+00 1.28196011985046656179e+01 7.19414642374249702073e+00 1.04025420485060653419e+01 6.31376635353607529311e+00 1.00339918287456644208e+01 8.25973716556340775696e+00 1.22948901585603831421e+01 +3318 16585.00 8.30877596499628481297e+01 6.08089950005648383069e+00 1.28243142650453059161e+01 7.19682948618931650486e+00 1.04058223577501198776e+01 6.31551951248304188624e+00 1.00369734908676715435e+01 8.26319776435972208617e+00 1.22990654077392864707e+01 +3319 16590.00 8.31140422429366054757e+01 6.08236646424540516875e+00 1.28290277388951245996e+01 7.19951227397708848343e+00 1.04091026669941726368e+01 6.31727241337425038381e+00 1.00399548981260657854e+01 8.26665752778874640683e+00 1.23032402461888601408e+01 +3320 16595.00 8.31403248359103628218e+01 6.08383314934980834465e+00 1.28337416202614029714e+01 7.20219478640105403855e+00 1.04123829763418651595e+01 6.31902505624079591229e+00 1.00429360506763085681e+01 8.27011645394348882121e+00 1.23074146741163819030e+01 +3321 16600.00 8.31666074288841201678e+01 6.08529955551478884956e+00 1.28384559094550656511e+01 7.20487702277718433663e+00 1.04156632855859196951e+01 6.32077744114485895466e+00 1.00459169487256829711e+01 8.27357454091695387888e+00 1.23115886914182119938e+01 +3322 16605.00 8.31928900218578917247e+01 6.08676568291654085385e+00 1.28431706065797541783e+01 7.20755898242144787957e+00 1.04189435948299706780e+01 6.32252956810717225977e+00 1.00488975924607384371e+01 8.27703178682287443735e+00 1.23157622978870691099e+01 +3323 16610.00 8.32191726148316490708e+01 6.08823153172088549212e+00 1.28478857118427463035e+01 7.21024066466017643506e+00 1.04222239040740234373e+01 6.32428143720028312913e+00 1.00518779820783947798e+01 8.28048818976462186470e+00 1.23199354936265930149e+01 +3324 16615.00 8.32454552078054064168e+01 6.08969710209365189257e+00 1.28526012255549701990e+01 7.21292206878861286157e+00 1.04255042133180761965e+01 6.32603304846564640229e+00 1.00548581177652085472e+01 8.28394374785592546573e+00 1.23241082785331474980e+01 +3325 16620.00 8.32717378007791637629e+01 6.09116239420066296617e+00 1.28573171477164258647e+01 7.21560319413308892678e+00 1.04287845225621289558e+01 6.32778440194471958335e+00 1.00578379997491875741e+01 8.28739845923125351135e+00 1.23282806523994459269e+01 +3326 16625.00 8.32980203937529353198e+01 6.09262740821811110692e+00 1.28620334787416723543e+01 7.21828404003030499325e+00 1.04320648318061817150e+01 6.32953549768932344222e+00 1.00608176282168884086e+01 8.29085232199396848785e+00 1.23324526154327678285e+01 +3327 16630.00 8.33243029867266926658e+01 6.09409214431181744942e+00 1.28667502186307149969e+01 7.22096460579622689835e+00 1.04353451416720819367e+01 6.33128633575127786060e+00 1.00637970033963153327e+01 8.29430533428890193193e+00 1.23366241672185541489e+01 +3328 16635.00 8.33505855797004500118e+01 6.09555660265797616404e+00 1.28714673677981146227e+01 7.22364489075719085065e+00 1.04386254502942890099e+01 6.33303691618240449657e+00 1.00667761255051182445e+01 8.29775749425051500907e+00 1.23407953080677277313e+01 +3329 16640.00 8.33768681726742215687e+01 6.09702078343277698025e+00 1.28761849261402314681e+01 7.22632489426025692580e+00 1.04419057596419833089e+01 6.33478723904488472130e+00 1.00697549947505820001e+01 8.30120880001326710840e+00 1.23449660375657206401e+01 +3330 16645.00 8.34031507656479647039e+01 6.09848468681240696299e+00 1.28809028940716281397e+01 7.22900461561103124808e+00 1.04451860688860342918e+01 6.33653730436981632579e+00 1.00727336113710776999e+01 8.30465924972198266119e+00 1.23491363558161761915e+01 +3331 16650.00 8.34294333586217362608e+01 6.09994831298342088388e+00 1.28856212717995912698e+01 7.23168405417730131290e+00 1.04484663782337285909e+01 6.33828711224010721281e+00 1.00757119755842499131e+01 8.30810884152149142778e+00 1.23533062628190961618e+01 +3332 16655.00 8.34557159515954936069e+01 6.10141166210127927627e+00 1.28903400593241155292e+01 7.23436320928540510522e+00 1.04517466873741415867e+01 6.34003666268685073248e+00 1.00786900876388383352e+01 8.31155757358770941323e+00 1.23574757583671956951e+01 +3333 16660.00 8.34819985445692651638e+01 6.10287473437326699610e+00 1.28950592569561255374e+01 7.23704208027203765852e+00 1.04550269966181925696e+01 6.34178595578259773902e+00 1.00816679477628561301e+01 8.31500544405509955936e+00 1.23616448423568368042e+01 +3334 16665.00 8.35082811375430225098e+01 6.10433752996520695433e+00 1.28997788647992628341e+01 7.23972066648425816027e+00 1.04583073059658868686e+01 6.34353499157916722595e+00 1.00846455562050376642e+01 8.31845245109957787122e+00 1.23658135148916592527e+01 +3335 16670.00 8.35345637305167798559e+01 6.10580004906365481077e+00 1.29044988831644502625e+01 7.24239896727949528099e+00 1.04615876152099396279e+01 6.34528377013874411716e+00 1.00876229132141244094e+01 8.32189859289706745926e+00 1.23699817756607366448e+01 +3336 16675.00 8.35608463234905372019e+01 6.10726229186552682648e+00 1.29092193120516878224e+01 7.24507698200481087270e+00 1.04648679244539923872e+01 6.34703229152351244835e+00 1.00906000190284910190e+01 8.32534386761311573366e+00 1.23741496247677158493e+01 +3337 16680.00 8.35871289164642945479e+01 6.10872425854701361914e+00 1.29139401516682568172e+01 7.24775471001762916501e+00 1.04681482336980451464e+01 6.34878055578529298941e+00 1.00935768739175983910e+01 8.32878827344437411284e+00 1.23783170621089499974e+01 +3338 16685.00 8.36134115094380661048e+01 6.11018594929467084853e+00 1.29186614023250818661e+01 7.25043215065464785596e+00 1.04714285429420979057e+01 6.35052856298626977605e+00 1.00965534781301897738e+01 8.33223180855639533604e+00 1.23824840874771577859e+01 +3339 16690.00 8.36396941024118234509e+01 6.11164736430541299939e+00 1.29233830640221611930e+01 7.25310930329402214767e+00 1.04747088522897922047e+01 6.35227631319899277429e+00 1.00995298319460982128e+01 8.33567447114582371626e+00 1.23866507009759860836e+01 +3340 16695.00 8.36659766953855807969e+01 6.11310850377615988549e+00 1.29281051370704211934e+01 7.25578616730353953557e+00 1.04779891615338449640e+01 6.35402380648564779619e+00 1.01025059356244213404e+01 8.33911625941967216136e+00 1.23908169023981500345e+01 +3341 16700.00 8.36922592883593523538e+01 6.11456936788310123632e+00 1.29328276214698583146e+01 7.25846274201990127040e+00 1.04812694707778977232e+01 6.35577104290841443657e+00 1.01054817894346271601e+01 8.34255717156422171854e+00 1.23949826916400027699e+01 +3342 16705.00 8.37185418813331096999e+01 6.11602995683351835510e+00 1.29375505174277556364e+01 7.26113902684198553317e+00 1.04845497800219504825e+01 6.35751802253984621416e+00 1.01084573936565487173e+01 8.34599720579684856148e+00 1.23991480685979134080e+01 +3343 16710.00 8.37448244743068670459e+01 6.11749027082432927926e+00 1.29422738252550342253e+01 7.26381502111685595224e+00 1.04878300892660032417e+01 6.35926474543176301069e+00 1.01114327485803769946e+01 8.34943636032456204532e+00 1.24033130332718730671e+01 +3344 16715.00 8.37711070672806386028e+01 6.11895031004208789227e+00 1.29469975448480560942e+01 7.26649072422266506521e+00 1.04911103985100560010e+01 6.36101121166707628163e+00 1.01144078544755817717e+01 8.35287463336473656739e+00 1.24074775855582473127e+01 +3345 16720.00 8.37973896602543817380e+01 6.12041007470444231586e+00 1.29517216765177458626e+01 7.26916613553756985056e+00 1.04943907077541105366e+01 6.36275742131833332849e+00 1.01173827116530841153e+01 8.35631202313474652499e+00 1.24116417253533892762e+01 +3346 16725.00 8.38236722531245135315e+01 6.12186956499794199260e+00 1.29564462204713795046e+01 7.27184125445008522348e+00 1.04976710171018048356e+01 6.36450337443735847387e+00 1.01203573203927152946e+01 8.35974852787269462340e+00 1.24158054525536609702e+01 +3347 16730.00 8.38499548460982566667e+01 6.12332878112987355479e+00 1.29611711767089623493e+01 7.27451608032800223214e+00 1.05009513263458558185e+01 6.36624907110706139690e+00 1.01233316809950348869e+01 8.36318414579595703628e+00 1.24199687670554226315e+01 +3348 16735.00 8.38762374390720424344e+01 6.12478772330751564112e+00 1.29658965454377721471e+01 7.27719061254947519046e+00 1.05042316355899085778e+01 6.36799451139999206362e+00 1.01263057937813325537e+01 8.36661887516336300052e+00 1.24241316687550309439e+01 +3349 16740.00 8.39025200320457997805e+01 6.12624639172778806540e+00 1.29706223267614575434e+01 7.27986485052374998617e+00 1.05075119448339613371e+01 6.36973969538870044005e+00 1.01292796590314342353e+01 8.37005271419228868979e+00 1.24282941576524894600e+01 +3350 16745.00 8.39288026250195571265e+01 6.12770478660833628481e+00 1.29753485208872891832e+01 7.28253879361861500286e+00 1.05107922541816556361e+01 6.37148462315609620532e+00 1.01322532770769910826e+01 8.37348566115192838311e+00 1.24324562334368700078e+01 +3351 16750.00 8.39550852179933144726e+01 6.12916290815644337897e+00 1.29800751279189192644e+01 7.28521244123295463879e+00 1.05140725634257066190e+01 6.37322929475400190569e+00 1.01352266482392945335e+01 8.37691771428038300940e+00 1.24366178962118176798e+01 +3352 16755.00 8.39813678109670860295e+01 6.13062075657938887474e+00 1.29848021479599804451e+01 7.28788579276564885134e+00 1.05173528726697611546e+01 6.37497371028605908094e+00 1.01381997728189006125e+01 8.38034887185721544256e+00 1.24407791457700458437e+01 +3353 16760.00 8.40076504039408291646e+01 6.13207833209482178205e+00 1.29895295812177611339e+01 7.29055884761558292695e+00 1.05206331819138139139e+01 6.37671786981445087861e+00 1.01411726511681905549e+01 8.38377913212052661152e+00 1.24449399820079200651e+01 +3354 16765.00 8.40339329969146007215e+01 6.13353563489965925015e+00 1.29942574276922577781e+01 7.29323160518163504662e+00 1.05239134911578666731e+01 6.37846177342209141869e+00 1.01441452835980836511e+01 8.38720849336023732690e+00 1.24491004049254350150e+01 +3355 16770.00 8.40602155898883580676e+01 6.13499266523227504422e+00 1.29989856875907499045e+01 7.29590406486269138497e+00 1.05271938004019194324e+01 6.38020542119189215668e+00 1.01471176704505996469e+01 8.39063695383518393101e+00 1.24532604143153111664e+01 +3356 16775.00 8.40864981828621296245e+01 6.13644942329994957930e+00 1.30037143611205241456e+01 7.29857622606799516518e+00 1.05304741096459721916e+01 6.38194881319640305861e+00 1.01500898120677494063e+01 8.39406451184564872392e+00 1.24574200100739052033e+01 +3357 16780.00 8.41127807758358869705e+01 6.13790590932033186533e+00 1.30084434482815787248e+01 7.30124808820679227495e+00 1.05337544189936664907e+01 6.38369194952889884576e+00 1.01530617087811911858e+01 8.39749116566083131374e+00 1.24615791920975791385e+01 +3358 16785.00 8.41390633688096443166e+01 6.13936212352143062532e+00 1.30131729491775551821e+01 7.30391965068833126651e+00 1.05370347282377192499e+01 6.38543483026193214869e+00 1.01560333609536623811e+01 8.40091691357065073475e+00 1.24657379602826914322e+01 +3359 16790.00 8.41653459617834158735e+01 6.14081806611052805067e+00 1.30179028640157365970e+01 7.30659091293222129337e+00 1.05403150373781322457e+01 6.38717745548877502415e+00 1.01590047689375442275e+01 8.40434175387539639246e+00 1.24698963145255987683e+01 +3360 16795.00 8.41916285547571590087e+01 6.14227373731563552894e+00 1.30226331927961194168e+01 7.30926187434771001961e+00 1.05435953467258247684e+01 6.38891982529234514487e+00 1.01619759330852179602e+01 8.40776568488571918181e+00 1.24740542547226613834e+01 +3361 16800.00 8.42179111477309305656e+01 6.14372913737512593713e+00 1.30273639357259884974e+01 7.31193253436476897633e+00 1.05468756559698775277e+01 6.39066193974518892418e+00 1.01649468537594227513e+01 8.41118870490190850830e+00 1.24782117806665979742e+01 +3362 16805.00 8.42441937407046879116e+01 6.14518426650664473243e+00 1.30320950929089836023e+01 7.31460289240300998159e+00 1.05501559652139302870e+01 6.39240379896130939130e+00 1.01679175313229048783e+01 8.41461081222425022474e+00 1.24823688923574085408e+01 +3363 16810.00 8.42704763336784594685e+01 6.14663912493820419058e+00 1.30368266644487462713e+01 7.31727294788204396525e+00 1.05534362744579830462e+01 6.39414540300289413466e+00 1.01708879661487721080e+01 8.41803200519448679984e+00 1.24865255896914497669e+01 +3364 16815.00 8.42967589266522168145e+01 6.14809371289781214642e+00 1.30415586504489198205e+01 7.31994270023184512297e+00 1.05567165838056755689e+01 6.39588675197358291769e+00 1.01738581586204972496e+01 8.42145228211290763909e+00 1.24906818723578005859e+01 +3365 16820.00 8.43230415196259883714e+01 6.14954803062384591783e+00 1.30462910509095006972e+01 7.32261214889275091622e+00 1.05599968930497283282e+01 6.39762784596665490255e+00 1.01768281091215477829e+01 8.42487164133162202972e+00 1.24948377404601025376e+01 +3366 16825.00 8.43493241125997315066e+01 6.15100207834431422782e+00 1.30510238659341322176e+01 7.32528129328437227485e+00 1.05632772022937828638e+01 6.39936868506501888021e+00 1.01797978180146735383e+01 8.42829008116127553762e+00 1.24989931936874327789e+01 +3367 16830.00 8.43756067055735030635e+01 6.15245585629758995339e+00 1.30557570958337354483e+01 7.32795013285741347886e+00 1.05665575115378338467e+01 6.40110926936195490100e+00 1.01827672857040685273e+01 8.43170759995398277908e+00 1.25031482321434310734e+01 +3368 16835.00 8.44018892985472604096e+01 6.15390936472205041241e+00 1.30604907404010255334e+01 7.33061866704184605936e+00 1.05698378207818883823e+01 6.40284959895073857439e+00 1.01857365125939374195e+01 8.43512419605148622281e+00 1.25073028554135312618e+01 +3369 16840.00 8.44281718915210177556e+01 6.15536260385606670553e+00 1.30652248000505757375e+01 7.33328689528837429634e+00 1.05731181300259411415e+01 6.40458967393501055199e+00 1.01887054990573844293e+01 8.43853986780588805061e+00 1.25114570636013802130e+01 +3370 16845.00 8.44544544844947751017e+01 6.15681557393801615063e+00 1.30699592745750958755e+01 7.33595481702697416182e+00 1.05763984392699939008e+01 6.40632949440804910779e+00 1.01916742455193389816e+01 8.44195461357966614457e+00 1.25156108563960479785e+01 +3371 16850.00 8.44807370774685466586e+01 6.15826827520627073653e+00 1.30746941641818725799e+01 7.33862243172907380284e+00 1.05796787487213297396e+01 6.40806906045276658546e+00 1.01946427523736389276e+01 8.44536843172492801557e+00 1.25197642337975398874e+01 +3372 16855.00 8.45070196704423040046e+01 6.15972070790957193509e+00 1.30794294688709022978e+01 7.34128973882464919143e+00 1.05829590578617409591e+01 6.40980837219353016820e+00 1.01976110200452083632e+01 8.44878132061450770607e+00 1.25239171957022143999e+01 +3373 16860.00 8.45333022634160613507e+01 6.16117287229665322457e+00 1.30841651888494698852e+01 7.34395673777476520883e+00 1.05862393671057937183e+01 6.41154742970289248660e+00 1.02005790489382484054e+01 8.45219327861087954545e+00 1.25280697417991451204e+01 +3374 16865.00 8.45595848562861789333e+01 6.16262476860589369920e+00 1.30889013242212151056e+01 7.34662342803012613501e+00 1.05895196763498464776e+01 6.41328623310521894751e+00 1.02035468394776884793e+01 8.45560430410760233144e+00 1.25322218720883338250e+01 +3375 16870.00 8.45858674492599504902e+01 6.16407639708602861361e+00 1.30936378748824946427e+01 7.34928980906216189339e+00 1.05927999855938974605e+01 6.41502478248342544731e+00 1.02065143920988230519e+01 8.45901439548788403044e+00 1.25363735863625009870e+01 +3376 16875.00 8.46121500422337078362e+01 6.16552775799616181729e+00 1.30983748410405969054e+01 7.35195588033194180611e+00 1.05960802948379519961e+01 6.41676307794114997307e+00 1.02094817072265762192e+01 8.46242355112455690858e+00 1.25405248845180015138e+01 +3377 16880.00 8.46384326352074651822e+01 6.16697885158503300573e+00 1.31031122225918732482e+01 7.35462164129016393588e+00 1.05993606040820029790e+01 6.41850111959240088311e+00 1.02124487852858756298e+01 8.46583176942154835842e+00 1.25446757664511956420e+01 +3378 16885.00 8.46647152281812367391e+01 6.16842967810138009810e+00 1.31078500198472518434e+01 7.35728709140826353519e+00 1.06026409134296972780e+01 6.42023890754081616450e+00 1.02154156267327476115e+01 8.46923904878278754893e+00 1.25488262319548038448e+01 +3379 16890.00 8.46909978211549940852e+01 6.16988023780430161480e+00 1.31125882327030929275e+01 7.35995223016803290506e+00 1.06059212226737500373e+01 6.42197644189003824522e+00 1.02183822320024777497e+01 8.47264538761220364904e+00 1.25529762809251828060e+01 +3380 16895.00 8.47172804141287514312e+01 6.17133053096327000020e+00 1.31173268612630291585e+01 7.36261705703053959127e+00 1.06092015319178027966e+01 6.42371372273334451108e+00 1.02213486015510923721e+01 8.47605078432408909350e+00 1.25571259131550494459e+01 +3381 16900.00 8.47435630071025087773e+01 6.17278055781665724311e+00 1.31220659056307127344e+01 7.36528157147757767120e+00 1.06124818412654970956e+01 6.42545075020546718747e+00 1.02243147358242403300e+01 8.47945523733273454070e+00 1.25612751284371242377e+01 +3382 16905.00 8.47698456000762803342e+01 6.17423031862356275212e+00 1.31268053657024932335e+01 7.36794577298057973280e+00 1.06157621505095498549e+01 6.42718752438932128257e+00 1.02272806352779479511e+01 8.48285874506280102025e+00 1.25654239268750469449e+01 +3383 16910.00 8.47961281930500234694e+01 6.17567981367418727956e+00 1.31315452416856572881e+01 7.37060966103170489561e+00 1.06190424597536043905e+01 6.42892404540927309142e+00 1.02302463003889645421e+01 8.48626130593894067999e+00 1.25695723080542531847e+01 +3384 16915.00 8.48224107860237950263e+01 6.17712904320690192606e+00 1.31362855335802048984e+01 7.37327323511274634882e+00 1.06223227689976553734e+01 6.43066031337932830780e+00 1.02332117316133057727e+01 8.48966291839617603898e+00 1.25737202718711014171e+01 +3385 16920.00 8.48486933789975523723e+01 6.17857800749117203054e+00 1.31410262413861360642e+01 7.37593649469513490402e+00 1.06256030782417099090e+01 6.43239632840312935969e+00 1.02361769294277262787e+01 8.49306358087989110572e+00 1.25778678183255969714e+01 +3386 16925.00 8.48749759719713239292e+01 6.18002670680683063864e+00 1.31457673652070905490e+01 7.37859943929175710053e+00 1.06288833874857626682e+01 6.43413209059468105266e+00 1.02391418943089682614e+01 8.49646329183547344144e+00 1.25820149471068081226e+01 +3387 16930.00 8.49012585649450812753e+01 6.18147514141297893531e+00 1.31505089050430665765e+01 7.38126206838441234481e+00 1.06321636967298154275e+01 6.43586760007835234632e+00 1.02421066267441478459e+01 8.49986204970830172556e+00 1.25861616581111004365e+01 +3388 16935.00 8.49275411579188386213e+01 6.18292331157908403583e+00 1.31552508609977110154e+01 7.38392438146525531550e+00 1.06354440059738681867e+01 6.43760285695778389226e+00 1.02450711272100143390e+01 8.50325985295413033782e+00 1.25903079511311890570e+01 +3389 16940.00 8.49538237508925959673e+01 6.18437121758497720947e+00 1.31599932330710185369e+01 7.38658637802644602033e+00 1.06387243152179191696e+01 6.43933786136770791586e+00 1.02480353961936803131e+01 8.50665670004943663685e+00 1.25944538259597926810e+01 +3390 16945.00 8.49801063438663675242e+01 6.18581885971048883732e+00 1.31647360211593476009e+01 7.38924805758087277496e+00 1.06420046244619737053e+01 6.44107261340140357930e+00 1.02509994342133481382e+01 8.51005258944996612058e+00 1.25985992825969113085e+01 +3391 16950.00 8.50063889368401248703e+01 6.18726623821472099252e+00 1.31694792254699866163e+01 7.39190941964142300691e+00 1.06452849338096662279e+01 6.44280711319360488432e+00 1.02539632417457688973e+01 8.51344751963219792401e+00 1.26027443208352636361e+01 +3392 16955.00 8.50326715298138822163e+01 6.18871335337750494432e+00 1.31742228460029267012e+01 7.39457046368988812901e+00 1.06485652430537189872e+01 6.44454136085831308378e+00 1.02569268192987852473e+01 8.51684148908297444791e+00 1.26068889403639232683e+01 +3393 16960.00 8.50589541227876537732e+01 6.19016020549939938178e+00 1.31789668826545369740e+01 7.39723118923916000966e+00 1.06518455522977735228e+01 6.44627535651989980181e+00 1.02598901674009628238e+01 8.52023449627876772183e+00 1.26110331410792557705e+01 +3394 16965.00 8.50852367157614111193e+01 6.19160679483950637803e+00 1.31837113356320916324e+01 7.39989159582285260797e+00 1.06551258615418245057e+01 6.44800910030273488616e+00 1.02628532865497792415e+01 8.52362653970642725199e+00 1.26151769228776124976e+01 +3395 16970.00 8.51115193087351826762e+01 6.19305312168802135631e+00 1.31884562047283093733e+01 7.40255168293312326711e+00 1.06584061707858790413e+01 6.44974259233118640822e+00 1.02658161772634404230e+01 8.52701761788387813112e+00 1.26193202855517174754e+01 +3396 16975.00 8.51378019017089258114e+01 6.19449918633513885169e+00 1.31932014901504750526e+01 7.40521145010358861072e+00 1.06616864801335715640e+01 6.45147583271925917359e+00 1.02687788400705173331e+01 8.53040772929796631274e+00 1.26234632288942840717e+01 +3397 16980.00 8.51640844946826973683e+01 6.19594498907105517560e+00 1.31979471917949489068e+01 7.40787089683677191232e+00 1.06649667893776260996e+01 6.45320882160168807218e+00 1.02717412755099388733e+01 8.53379687245626072922e+00 1.26276057528016760756e+01 +3398 16985.00 8.51903670876564547143e+01 6.19739053016523389061e+00 1.32026933097653653704e+01 7.41053002266628979555e+00 1.06682470986216770825e+01 6.45494155911320621755e+00 1.02747034840895494767e+01 8.53718504588705684455e+00 1.26317478569629653151e+01 +3399 16990.00 8.52166496806302120604e+01 6.19883580991823723849e+00 1.32074398440617315487e+01 7.41318882712575444316e+00 1.06715274078657316181e+01 6.45667404535745337313e+00 1.02776654663690099056e+01 8.54057224809792714382e+00 1.26358895412745155795e+01 +3400 16995.00 8.52429322736039694064e+01 6.20028082863062213193e+00 1.32121867944767625858e+01 7.41584730971769179320e+00 1.06748077172134241408e+01 6.45840628048988918408e+00 1.02806272228872508379e+01 8.54395847761716886737e+00 1.26400308055290402365e+01 +3401 17000.00 8.52692148665777409633e+01 6.20172558659258488234e+00 1.32169341613213795483e+01 7.41850547000680826670e+00 1.06780880264574769001e+01 6.46013826462452378507e+00 1.02835887541832100567e+01 8.54734373298343896863e+00 1.26441716496229012989e+01 +3402 17005.00 8.52954974594478585459e+01 6.20317008408395320629e+00 1.32216819443883046858e+01 7.42116330749562802538e+00 1.06813683357015296593e+01 6.46186999789608673694e+00 1.02865500608061815058e+01 8.55072801273540861189e+00 1.26483120732451759238e+01 +3403 17010.00 8.53217800524216301028e+01 6.20461432141565261134e+00 1.32264301436775344456e+01 7.42382082174885837844e+00 1.06846486449455824186e+01 6.46360148043931381778e+00 1.02895111433261909895e+01 8.55411131540136437934e+00 1.26524520763958623348e+01 +3404 17015.00 8.53480626453953732380e+01 6.20605829888824267471e+00 1.32311787591890723803e+01 7.42647801227938764157e+00 1.06879289541896334015e+01 6.46533271238893547661e+00 1.02924720023029028226e+01 8.55749363955106900903e+00 1.26565916586603979255e+01 +3405 17020.00 8.53743452383691447949e+01 6.20750201680228030909e+00 1.32359277910265529243e+01 7.42913487865192045945e+00 1.06912092634336879371e+01 6.46706369387968660334e+00 1.02954326382856109490e+01 8.56087498372317945439e+00 1.26607308199351411560e+01 +3406 17025.00 8.54006278313429021409e+01 6.20894547544796182592e+00 1.32406772390863416433e+01 7.43179142038971107809e+00 1.06944895727813822361e+01 6.46879442503593793390e+00 1.02983930518650712571e+01 8.56425534648744957167e+00 1.26648695600128089467e+01 +3407 17030.00 8.54269104243166594870e+01 6.21038867514657333402e+00 1.32454271033684367609e+01 7.43444763706782918433e+00 1.06977698819217934556e+01 6.47052490600278318311e+00 1.03013532436009445092e+01 8.56763472641363676985e+00 1.26690078787897633106e+01 +3408 17035.00 8.54531930172904310439e+01 6.21183161618831114481e+00 1.32501773837691949609e+01 7.43710352820952902420e+00 1.07010501912694877547e+01 6.47225513692532317123e+00 1.03043132140839848176e+01 8.57101312207149135247e+00 1.26731457759550778519e+01 +3409 17040.00 8.54794756102641883899e+01 6.21327429889446136713e+00 1.32549280803922613359e+01 7.43975909337951524236e+00 1.07043305006171820537e+01 6.47398511792792508146e+00 1.03072729638945794761e+01 8.57439053204113754703e+00 1.26772832513014712674e+01 +3410 17045.00 8.55057582032379457360e+01 6.21471672356558180184e+00 1.32596791931339907933e+01 7.44241433213213454678e+00 1.07076108096539517334e+01 6.47571484916605211168e+00 1.03102324936234861497e+01 8.57776695491305041230e+00 1.26814203047253055701e+01 +3411 17050.00 8.55320407962117030820e+01 6.21615889051259795650e+00 1.32644307219943833331e+01 7.44506924403209069396e+00 1.07108911190016460324e+01 6.47744433077443648727e+00 1.03131918038614571742e+01 8.58114238926735062307e+00 1.26855569360192923511e+01 +3412 17055.00 8.55583233891854746389e+01 6.21760080005679505177e+00 1.32691826668698009684e+01 7.44772382862336712606e+00 1.07141714283493403315e+01 6.47917356288781043361e+00 1.03161508951992431093e+01 8.58451683369452034356e+00 1.26896931448725158731e+01 +3413 17060.00 8.55846059821592177741e+01 6.21904245250909681886e+00 1.32739350278638852387e+01 7.45037808549139768388e+00 1.07174517374897533273e+01 6.48090254566163892491e+00 1.03191097682586949702e+01 8.58789028682650190660e+00 1.26938289311813310434e+01 +3414 17065.00 8.56108885751329893310e+01 6.22048384819079025476e+00 1.32786878048729928281e+01 7.45303201419052641086e+00 1.07207320467338043102e+01 6.48263127923065152203e+00 1.03220684236409283585e+01 8.59126274724340888156e+00 1.26979642946348132426e+01 +3415 17070.00 8.56371711681067466770e+01 6.22192498740243404853e+00 1.32834409976898406569e+01 7.45568561429582654654e+00 1.07240123560814986092e+01 6.48435976373994726885e+00 1.03250268619574256945e+01 8.59463421357718004856e+00 1.27020992351293280365e+01 +3416 17075.00 8.56634537610805182339e+01 6.22336587048604439332e+00 1.32881946065217118047e+01 7.45833888537200362379e+00 1.07272926653255513685e+01 6.48608799935535262904e+00 1.03279850838196676222e+01 8.59800468443902765614e+00 1.27062337523539454764e+01 +3417 17080.00 8.56897363540542755800e+01 6.22480649775254413214e+00 1.32929486312649682844e+01 7.46099182699412999398e+00 1.07305729745696041277e+01 6.48781598620123567400e+00 1.03309430898495016038e+01 8.60137415846088870808e+00 1.27103678462050275755e+01 +3418 17085.00 8.57160189470280471369e+01 6.22624686952321937383e+00 1.32977030717123252401e+01 7.46364443874764305065e+00 1.07338532838136568870e+01 6.48954372443305782525e+00 1.03339008806895034098e+01 8.60474263427470376087e+00 1.27145015162680099507e+01 +3419 17090.00 8.57423015400017902721e+01 6.22768698612972393391e+00 1.33024579279674242116e+01 7.46629672020761336881e+00 1.07371335930577096462e+01 6.49127121420628139248e+00 1.03368584569511501314e+01 8.60811011052277486044e+00 1.27186347625428926023e+01 +3420 17095.00 8.57685841329755618290e+01 6.22912684789334036850e+00 1.33072131999266218827e+01 7.46894867095947656566e+00 1.07404139023017606291e+01 6.49299845567636690902e+00 1.03398158192873843575e+01 8.61147658583704078694e+00 1.27227675848223960031e+01 +3421 17100.00 8.57948667259493191750e+01 6.23056645514572426947e+00 1.33119688875899200298e+01 7.47160029057830588073e+00 1.07436942120640210874e+01 6.49472544898841164240e+00 1.03427729683304150399e+01 8.61484205889089516006e+00 1.27268999826919504414e+01 +3422 17105.00 8.58211493189230765211e+01 6.23200580822888916543e+00 1.33167249907500391259e+01 7.47425157867026435099e+00 1.07469745208935094638e+01 6.49645219428751463653e+00 1.03457299047228179489e+01 8.61820652831627853629e+00 1.27310319559442763904e+01 +3423 17110.00 8.58474319118968480780e+01 6.23344490745375789942e+00 1.33214815094069738421e+01 7.47690253481042521599e+00 1.07502548301375622231e+01 6.49817869174986384451e+00 1.03486866291278918339e+01 8.62156999279694957750e+00 1.27351635045793774026e+01 +3424 17115.00 8.58737145048706054240e+01 6.23488375317271081855e+00 1.33262384435607312838e+01 7.47955315859458647054e+00 1.07535351393816149823e+01 6.49990494151019415625e+00 1.03516431421778491995e+01 8.62493245099593686120e+00 1.27392946280790440028e+01 +3425 17120.00 8.58999970978443627700e+01 6.23632234571739729745e+00 1.33309957931076645821e+01 7.48220344962891292795e+00 1.07568154486256677416e+01 6.50163094373433025908e+00 1.03545994445567206554e+01 8.62829390157627607039e+00 1.27434253264432797437e+01 +3426 17125.00 8.59262796908181201161e+01 6.23776068541947115165e+00 1.33357535579441357498e+01 7.48485340749884198175e+00 1.07600957578697222772e+01 6.50335669857773446267e+00 1.03575555369070819722e+01 8.63165434323208557998e+00 1.27475555993611564531e+01 +3427 17130.00 8.59525622837918916730e+01 6.23919877262094590975e+00 1.33405117379665014710e+01 7.48750303182089993470e+00 1.07633760672174147999e+01 6.50508220620623056618e+00 1.03605114199129619834e+01 8.63501377464712760457e+00 1.27516854465217548409e+01 +3428 17135.00 8.59788448767656490190e+01 6.24063660766383776490e+00 1.33452703330711202057e+01 7.49015232218052329216e+00 1.07666563764614675591e+01 6.50680746677528176747e+00 1.03634670942480280331e+01 8.63837219451552407179e+00 1.27558148678214333671e+01 +3429 17140.00 8.60051274697394063651e+01 6.24207419090052528787e+00 1.33500293433616370464e+01 7.49280127820460517540e+00 1.07699366857055185420e+01 6.50853248044034948805e+00 1.03664225605755806470e+01 8.64172960154176372782e+00 1.27599438628456276490e+01 +3430 17145.00 8.60314100626095381585e+01 6.24351152266266229418e+00 1.33547887685271273739e+01 7.49544989948894535559e+00 1.07732169949495730776e+01 6.51025724736725930342e+00 1.03693778195796522112e+01 8.64508599443033176613e+00 1.27640724315943412392e+01 +3431 17150.00 8.60576926555832955046e+01 6.24494860330262380188e+00 1.33595486085675858590e+01 7.49809818565007191182e+00 1.07764973041936240605e+01 6.51198176773219916669e+00 1.03723328720271883441e+01 8.64844137187535366706e+00 1.27682005736530044260e+01 +3432 17155.00 8.60839752485570528506e+01 6.24638543317279371081e+00 1.33643088634830213834e+01 7.50074613630451292323e+00 1.07797776134376785961e+01 6.51370604168026900993e+00 1.03752877184363878627e+01 8.65179573262276946366e+00 1.27723282888143341296e+01 +3433 17160.00 8.61102578415308101967e+01 6.24782201261518288504e+00 1.33690695330661455387e+01 7.50339375105843409131e+00 1.07830579227853728952e+01 6.51543006937729352046e+00 1.03782423596363866380e+01 8.65514907537707145480e+00 1.27764555767674163889e+01 +3434 17165.00 8.61365404345045675427e+01 6.24925834198217611259e+00 1.33738306172133221139e+01 7.50604102954908825041e+00 1.07863382320294256544e+01 6.51715385100982658173e+00 1.03811967963526647907e+01 8.65850139887383640769e+00 1.27805824374086025585e+01 +3435 17170.00 8.61628230274783390996e+01 6.25069442163651256550e+00 1.33785921158209042403e+01 7.50868797138264287838e+00 1.07896185412734784137e+01 6.51887738673332783890e+00 1.03841510292070733357e+01 8.66185270184864641863e+00 1.27847088704269697956e+01 +3436 17175.00 8.61891056204520964457e+01 6.25213025193057259088e+00 1.33833540288888936942e+01 7.51133457619635347413e+00 1.07928988505175311730e+01 6.52060067671362553199e+00 1.03871050589250977225e+01 8.66520298305780301007e+00 1.27888348756152367969e+01 +3437 17180.00 8.62153882134258537917e+01 6.25356583321673742404e+00 1.33881163562100127251e+01 7.51398084360674811677e+00 1.07961791597615821559e+01 6.52232372111654523650e+00 1.03900588862322234007e+01 8.66855224122652856522e+00 1.27929604525588445085e+01 +3438 17185.00 8.62416708063996253486e+01 6.25500116585774801337e+00 1.33928790977842577803e+01 7.51662677326144823553e+00 1.07994594691092764549e+01 6.52404652012863905952e+00 1.03930125118539393725e+01 8.67190047513185646721e+00 1.27970856011541460617e+01 +3439 17190.00 8.62679533993733826946e+01 6.25643625020598559416e+00 1.33976422533007060167e+01 7.51927236477698013317e+00 1.08027397782496894507e+01 6.52576907391573346473e+00 1.03959659365157328637e+01 8.67524768351973030178e+00 1.28012103210902186134e+01 +3440 17195.00 8.62942359923471400407e+01 6.25787108663455793334e+00 1.34024058227593574344e+01 7.52191761779060108495e+00 1.08060200875973837498e+01 6.52749138264365402762e+00 1.03989191609430911001e+01 8.67859386515682373897e+00 1.28053346121597861895e+01 +3441 17200.00 8.63205185853209115976e+01 6.25930567551657279779e+00 1.34071698061602120333e+01 7.52456253194993340827e+00 1.08093003968414365090e+01 6.52921344649895463164e+00 1.04018721858615013076e+01 8.68193901883053520407e+00 1.28094584740519170651e+01 +3442 17205.00 8.63468011782946689436e+01 6.26074001719404371613e+00 1.34119342030887089834e+01 7.52720710688186578352e+00 1.08125807060854892683e+01 6.53093526563709669830e+00 1.04048250119964471594e+01 8.68528314331789985658e+00 1.28135819065593370425e+01 +3443 17210.00 8.63730837712684262897e+01 6.26217411205044260925e+00 1.34166990137521260351e+01 7.52985134224438734662e+00 1.08158610153295420275e+01 6.53265684025499737686e+00 1.04077776401770609738e+01 8.68862623739595640870e+00 1.28177049092674728570e+01 +3444 17215.00 8.63993663642421836357e+01 6.26360796044851575459e+00 1.34214642377358970293e+01 7.53249523767475182012e+00 1.08191413245735930104e+01 6.53437817052884817315e+00 1.04107300710251848841e+01 8.69196829986246832789e+00 1.28218274820726971797e+01 +3445 17220.00 8.64256489572159409818e+01 6.26504156277173329670e+00 1.34262298751436706112e+01 7.53513879282057974507e+00 1.08224216338176457697e+01 6.53609925662447466266e+00 1.04136823053699494324e+01 8.69530932951519730523e+00 1.28259496246640711803e+01 +3446 17225.00 8.64519315501897125387e+01 6.26647491937247380633e+00 1.34309959256645203851e+01 7.53778200733985581650e+00 1.08257019431653400687e+01 6.53782009872842806431e+00 1.04166343439368453971e+01 8.69864932516227540304e+00 1.28300713367306844503e+01 +3447 17230.00 8.64782141431634698847e+01 6.26790803065493840052e+00 1.34357623892984427982e+01 7.54042488088020235182e+00 1.08289822524093946043e+01 6.53954069701690077210e+00 1.04195861875549926623e+01 8.70198828561182935459e+00 1.28341926180652485812e+01 +3448 17235.00 8.65044967361372414416e+01 6.26934089696114060786e+00 1.34405292657345185603e+01 7.54306741309960138153e+00 1.08322625616534455872e+01 6.54126105168680904711e+00 1.04225378368462440193e+01 8.70532620968235093528e+00 1.28383134682532009663e+01 +3449 17240.00 8.65307793291109845768e+01 6.27077351869528420991e+00 1.34452965549727476713e+01 7.54570960365604026521e+00 1.08355428708975001229e+01 6.54298116290397935302e+00 1.04254892927433662209e+01 8.70866309620269518632e+00 1.28424338871909018422e+01 +3450 17245.00 8.65570619220847561337e+01 6.27220589623047164451e+00 1.34500642568058452753e+01 7.54835145220750103334e+00 1.08388231801415528821e+01 6.54470103085496557327e+00 1.04284405558682049531e+01 8.71199894400172425435e+00 1.28465538745674283660e+01 +3451 17250.00 8.65833445150585134797e+01 6.27363802993981511946e+00 1.34548323711301751615e+01 7.55099295842233519949e+00 1.08421034893856056414e+01 6.54642065573668485712e+00 1.04313916271535287450e+01 8.71533375190828962786e+00 1.28506734300718523656e+01 +3452 17255.00 8.66096271080322708258e+01 6.27506992022751308724e+00 1.34596008978420886848e+01 7.55363412195852390596e+00 1.08453837987332981641e+01 6.54814003772532871039e+00 1.04343425072211868354e+01 8.71866751877197820875e+00 1.28547925532896165635e+01 +3453 17260.00 8.66359097010060423827e+01 6.27650156745630738442e+00 1.34643698366306701075e+01 7.55627494249478370847e+00 1.08486641079773526997e+01 6.54985917700744835201e+00 1.04372931970039442007e+01 8.72200024343200830401e+00 1.28589112442207174070e+01 +3454 17265.00 8.66621922939797997287e+01 6.27793297202003497404e+00 1.34691391873922761135e+01 7.55891541969946079149e+00 1.08519444173250452224e+01 6.55157807376959944179e+00 1.04402436972272916194e+01 8.72533192475869689986e+00 1.28630295023469471971e+01 +3455 17270.00 8.66884748869535570748e+01 6.27936413431253281914e+00 1.34739089500232651631e+01 7.56155555324090578040e+00 1.08552247264654582182e+01 6.55329672820870001715e+00 1.04431940087203525280e+01 8.72866256161199061125e+00 1.28671473274610317361e+01 +3456 17275.00 8.67147574799273286317e+01 6.28079505471727195243e+00 1.34786791244199992690e+01 7.56419534280819405581e+00 1.08585050357095092011e+01 6.55501514051130307337e+00 1.04461441322086194816e+01 8.73199215285183782953e+00 1.28712647192520410755e+01 +3457 17280.00 8.67410400729010859777e+01 6.28222573363845260275e+00 1.34834497101679069431e+01 7.56683478805931208910e+00 1.08617853449535637367e+01 6.55673331087432487152e+00 1.04490940686248592328e+01 8.73532069735891525397e+00 1.28753816774090559250e+01 +3458 17285.00 8.67673226658748433238e+01 6.28365617145954580280e+00 1.34882207073706368305e+01 7.56947388868333348455e+00 1.08650656541976147196e+01 6.55845123947395958197e+00 1.04520438186945572312e+01 8.73864819401390136022e+00 1.28794982017247932049e+01 +3459 17290.00 8.67936052587449609064e+01 6.28508636857438585110e+00 1.34929921157172607593e+01 7.57211264437970221763e+00 1.08683459635453090186e+01 6.56016892651748584342e+00 1.04549933831432024789e+01 8.74197464170783788973e+00 1.28836142918883282960e+01 +3460 17295.00 8.68198878517187324633e+01 6.28651632538717564103e+00 1.34977639350005009788e+01 7.57475105480640298339e+00 1.08716262727893600015e+01 6.56188637220182169330e+00 1.04579427629035635050e+01 8.74530003932139798906e+00 1.28877299474850985916e+01 +3461 17300.00 8.68461704446924898093e+01 6.28794604229175124743e+00 1.35025361651167141730e+01 7.57738911967324035857e+00 1.08749065820334163135e+01 6.56360357671352279141e+00 1.04608919589084106150e+01 8.74862438577672030249e+00 1.28918451684114625522e+01 +3462 17305.00 8.68724530376662471554e+01 6.28937551969230934645e+00 1.35073088058586172622e+01 7.58002683865892556980e+00 1.08781868913811106125e+01 6.56532054025986955281e+00 1.04638409716759461787e+01 8.75194767995447975295e+00 1.28959599541492160313e+01 +3463 17310.00 8.68987356306400045014e+01 6.29080475799305371964e+00 1.35120818570189307195e+01 7.58266421147326763474e+00 1.08814672005215200556e+01 6.56703726302741497278e+00 1.04667898023462235813e+01 8.75526992078717292145e+00 1.29000743045947157128e+01 +3464 17315.00 8.69250182236137618474e+01 6.29223375758781688916e+00 1.35168553184940112288e+01 7.58530123778461184969e+00 1.08847475097655745913e+01 6.56875374521307975328e+00 1.04697384516447318248e+01 8.75859110718656985739e+00 1.29041882192297574505e+01 +3465 17320.00 8.69513008165875334043e+01 6.29366251890152827997e+00 1.35216291900765792633e+01 7.58793791731312605719e+00 1.08880278190096273505e+01 6.57046998703450935153e+00 1.04726869202969528061e+01 8.76191123808516891813e+00 1.29083016979507050337e+01 +3466 17325.00 8.69775834095612907504e+01 6.29509104231766158932e+00 1.35264034714557084271e+01 7.59057424974789185512e+00 1.08913081283573216496e+01 6.57218598866789083246e+00 1.04756352093393001468e+01 8.76523031241546846104e+00 1.29124147403429887504e+01 +3467 17330.00 8.70038660025350623073e+01 6.29651932826114180131e+00 1.35311781625277625096e+01 7.59321023479871382023e+00 1.08945884376013726325e+01 6.57390175033087320600e+00 1.04785833194972575200e+01 8.76854832909959824860e+00 1.29165273461993290738e+01 +3468 17335.00 8.70301485955088196533e+01 6.29794737714653418692e+00 1.35359532629818151150e+01 7.59584587217539297654e+00 1.08978687468454271681e+01 6.57561727223073777537e+00 1.04815312517035987838e+01 8.77186528710115176466e+00 1.29206395150015183049e+01 +3469 17340.00 8.70564311884825769994e+01 6.29937518936767659739e+00 1.35407287728178626907e+01 7.59848116156701092194e+00 1.09011490560894781510e+01 6.57733255455403753587e+00 1.04844790066838093878e+01 8.77518118537335034546e+00 1.29247512466459166802e+01 +3470 17345.00 8.70827137814563343454e+01 6.30080276535985639441e+00 1.35455046917249912752e+01 7.60111610269373283444e+00 1.09044293654371724500e+01 6.57904759751841883286e+00 1.04874265854742976245e+01 8.77849602286942598539e+00 1.29288625407179615934e+01 +3471 17350.00 8.71089963744301059023e+01 6.30223010552727824773e+00 1.35502810194959089074e+01 7.60375069527573099748e+00 1.09077096746812234329e+01 6.58076240133116385778e+00 1.04903739888005507197e+01 8.78180979854260002071e+00 1.29329733969067284249e+01 +3472 17355.00 8.71352789674038632484e+01 6.30365721028450476382e+00 1.35550577558197016259e+01 7.60638493901244583384e+00 1.09109899839252797449e+01 6.58247696618919242439e+00 1.04933212175953407552e+01 8.78512251138755573265e+00 1.29370838149012961082e+01 +3473 17360.00 8.71615615603776205944e+01 6.30508408005646270311e+00 1.35598349006963641017e+01 7.60901883362404607425e+00 1.09142702931693307278e+01 6.58419129231014732540e+00 1.04962682727914344838e+01 8.78843416035751978654e+00 1.29411937943907418003e+01 +3474 17365.00 8.71878441533513637296e+01 6.30651071526808326695e+00 1.35646124537113319519e+01 7.61165237884106460342e+00 1.09175506024133834870e+01 6.58590537990131252855e+00 1.04992151551143191313e+01 8.79174474445753695306e+00 1.29453033350641373289e+01 +3475 17370.00 8.72141267463251494974e+01 6.30793711632356313146e+00 1.35693904147609671895e+01 7.61428557437330777447e+00 1.09208309116574380226e+01 6.58761922915960518310e+00 1.05021618656004083192e+01 8.79505426267192724765e+00 1.29494124366105669566e+01 +3476 17375.00 8.72404093392989068434e+01 6.30936328367892418356e+00 1.35741687836379867349e+01 7.61691841995130936027e+00 1.09241112209014907819e+01 6.58933284031303756478e+00 1.05051084050788254842e+01 8.79836271399537217519e+00 1.29535210986154591950e+01 +3477 17380.00 8.72666919322726641894e+01 6.31078921772800249812e+00 1.35789475600314641923e+01 7.61955091529523720340e+00 1.09273915302491833046e+01 6.59104621356888831230e+00 1.05080547744823391554e+01 8.80167009744327799581e+00 1.29576293207678965302e+01 +3478 17385.00 8.72929745252464357463e+01 6.31221491891645403172e+00 1.35837267436304802715e+01 7.62218306013562418855e+00 1.09306718393895963004e+01 6.59275934913444139340e+00 1.05110009746400816510e+01 8.80497641201033509617e+00 1.29617371027569525666e+01 +3479 17390.00 8.73192571182201930924e+01 6.31364038765884316717e+00 1.35885063344350349723e+01 7.62481485421336824260e+00 1.09339521487372888231e+01 6.59447224722734315350e+00 1.05139470063811764078e+01 8.80828165671194618369e+00 1.29658444443753513298e+01 +3480 17395.00 8.73455397111939362276e+01 6.31506562440082497289e+00 1.35932863321342054519e+01 7.62744629723827838319e+00 1.09372324579813433587e+01 6.59618490805487578399e+00 1.05168928708456785870e+01 8.81158583059461797404e+00 1.29699513451048762391e+01 +3481 17400.00 8.73718223041677077845e+01 6.31649062957769391602e+00 1.35980667363134273273e+01 7.63007738896161047393e+00 1.09405127672253943416e+01 6.59789733184504800789e+00 1.05198385687590736381e+01 8.81488893267376028007e+00 1.29740578046346186625e+01 +3482 17405.00 8.73981048971414651305e+01 6.31791540360401260301e+00 1.36028475469726988223e+01 7.63270812912426421804e+00 1.09437930764694488772e+01 6.59960951881550705878e+00 1.05227841010541318667e+01 8.81819096198551299892e+00 1.29781638227572848621e+01 +3483 17410.00 8.74243874901152366874e+01 6.31933994692543699045e+00 1.36076287638010970937e+01 7.63533851745677250022e+00 1.09470733858171431763e+01 6.60132146917353601623e+00 1.05257294686636218017e+01 8.82149191757637574085e+00 1.29822693989546742444e+01 +3484 17415.00 8.74506700830890082443e+01 6.32076425997726065731e+00 1.36124103863840577588e+01 7.63796855370003591190e+00 1.09503536950611941592e+01 6.60303318314714182691e+00 1.05286746725203101960e+01 8.82479179849285166881e+00 1.29863745331231470459e+01 +3485 17420.00 8.74769526760627655904e+01 6.32218834320513867198e+00 1.36171924147215825940e+01 7.64059823760531209302e+00 1.09536340043052451421e+01 6.60474466094361023494e+00 1.05316197135569691312e+01 8.82809060380217225372e+00 1.29904792246408575807e+01 +3486 17425.00 8.75032352690365229364e+01 6.32361219704436550160e+00 1.36219748483991072163e+01 7.64322756891349985864e+00 1.09569143135492996777e+01 6.60645590280131145278e+00 1.05345645927063671365e+01 8.83138833256120747706e+00 1.29945834734041625325e+01 +3487 17430.00 8.75295178619066405190e+01 6.32503582193023028424e+00 1.36267576873129936388e+01 7.64585654737586040142e+00 1.09601946228969922004e+01 6.60816690892753300091e+00 1.05375093109012727410e+01 8.83468498384754852282e+00 1.29986872788948542023e+01 +3488 17435.00 8.75558004548803836542e+01 6.32645921831875490682e+00 1.36315409309450288333e+01 7.64848517273329342459e+00 1.09634749320374051962e+01 6.60987767953991589565e+00 1.05404538690744544738e+01 8.83798055671806181977e+00 1.30027906408020150764e+01 +3489 17440.00 8.75820830478541410002e+01 6.32788238663486968250e+00 1.36363245792952181290e+01 7.65111344475778487606e+00 1.09667552412814561791e+01 6.61158821488720249704e+00 1.05433982681586826402e+01 8.84127505028143545474e+00 1.30068935589183602985e+01 +3490 17445.00 8.76083656408279267680e+01 6.32930532735531947708e+00 1.36411086320526404592e+01 7.65374136317987208145e+00 1.09700355505255124910e+01 6.61329851516630728980e+00 1.05463425091903655328e+01 8.84456846360490267500e+00 1.30109960327256874990e+01 +3491 17450.00 8.76346482338016841140e+01 6.33072804089466956157e+00 1.36458930888027278883e+01 7.65636892778190603082e+00 1.09733158598732067901e+01 6.61500858062596996945e+00 1.05492865928949939303e+01 8.84786079580751305684e+00 1.30150980618094269659e+01 +3492 17455.00 8.76609308267754556709e+01 6.33215052772967013084e+00 1.36506779494418406529e+01 7.65899613830478553922e+00 1.09765961691172577730e+01 6.61671841147347450374e+00 1.05522305204126158884e+01 8.85115204597722637914e+00 1.30191996460659424883e+01 +3493 17460.00 8.76872134197492130170e+01 6.33357278829561387568e+00 1.36554632135554143701e+01 7.66162299452049833093e+00 1.09798764783613087559e+01 6.61842800794719199331e+00 1.05551742926759999364e+01 8.85444221323309044180e+00 1.30233007849770281439e+01 +3494 17465.00 8.77134960127229703630e+01 6.33499482305888150790e+00 1.36602488810398075003e+01 7.66424949618030915133e+00 1.09831567877090030549e+01 6.62013737026477144809e+00 1.05581179106179163796e+01 8.85773129668379866075e+00 1.30274014781281159969e+01 +3495 17470.00 8.77397786056967134982e+01 6.33641663245476749466e+00 1.36650349514804592133e+01 7.66687564305620838923e+00 1.09864370968494160508e+01 6.62184649866458574508e+00 1.05610613751711372998e+01 8.86101929545876210170e+00 1.30315017253119318497e+01 +3496 17475.00 8.77660611986704850551e+01 6.33783821694965787685e+00 1.36698214246700846530e+01 7.66950143492018021618e+00 1.09897174061971085735e+01 6.62355539338500864943e+00 1.05640046873720674370e+01 8.86430620868739538309e+00 1.30356015260102644504e+01 +3497 17480.00 8.77923437916442424012e+01 6.33925957699957187685e+00 1.36746083002977609766e+01 7.67212687154421946190e+00 1.09929977154411631091e+01 6.62526405463332324075e+00 1.05669478481534788727e+01 8.86759203549912022879e+00 1.30397008800158342723e+01 +3498 17485.00 8.78186263846180139581e+01 6.34068071307089375921e+00 1.36793955780525635646e+01 7.67475195267958554268e+00 1.09962780246852158683e+01 6.62697248266863159216e+00 1.05698908585517816761e+01 8.87087677505443750192e+00 1.30437997868104353927e+01 +3499 17490.00 8.78449089775917855150e+01 6.34210162560927859232e+00 1.36841832577272146665e+01 7.67737667811899804349e+00 1.09995583339292686276e+01 6.62868067769821589508e+00 1.05728337194997461523e+01 8.87416042649313041579e+00 1.30478982461867865084e+01 +3500 17495.00 8.78711915705655428610e+01 6.34352231508111419345e+00 1.36889713389071481231e+01 7.68000104763444468858e+00 1.10028386431733196105e+01 6.63038863997081318047e+00 1.05757764319301372780e+01 8.87744298896534012044e+00 1.30519962576266799203e+01 +3501 17500.00 8.78974741635392859962e+01 6.34494278196314631657e+00 1.36937598213850790785e+01 7.68262506100828179711e+00 1.10061189524173759224e+01 6.63209636972480165440e+00 1.05787189968793686745e+01 8.88072446165230644510e+00 1.30560938208191998910e+01 +3502 17505.00 8.79237567565130433422e+01 6.34636302670103358281e+00 1.36985487049537280058e+01 7.68524871801249620518e+00 1.10093992616614269053e+01 6.63380386717782410955e+00 1.05816614153838486345e+01 8.88400484371453380561e+00 1.30601909353497713795e+01 +3503 17510.00 8.79500393494868148991e+01 6.34778304976115848035e+00 1.37033379890948925350e+01 7.68787201841908096611e+00 1.10126795710091212044e+01 6.63551113257861935324e+00 1.05846036883763492398e+01 8.88728413433326203119e+00 1.30642876010111219642e+01 +3504 17515.00 8.79763219424605722452e+01 6.34920285163063535805e+00 1.37081276737049257974e+01 7.69049496203111537795e+00 1.10159598803568155034e+01 6.63721816616556203883e+00 1.05875458168932770064e+01 8.89056233268972206929e+00 1.30683838171813988538e+01 +3505 17520.00 8.80026045354343438021e+01 6.35062243275512017249e+00 1.37129177583692687392e+01 7.69311754863095398349e+00 1.10192401894972284992e+01 6.63892496817702681966e+00 1.05904878018674022400e+01 8.89383943797551701493e+00 1.30724795836533242976e+01 +3506 17525.00 8.80288871284081153590e+01 6.35204179362172460799e+00 1.37177082428806382808e+01 7.69573977799058805971e+00 1.10225204987412794821e+01 6.64063153884102330693e+00 1.05934296444387783254e+01 8.89711544939261145259e+00 1.30765749000123321366e+01 +3507 17530.00 8.80551697213818584942e+01 6.35346093469683381727e+00 1.37224991268244700393e+01 7.69836164991309690464e+00 1.10258008079853322414e+01 6.64233787841665446194e+00 1.05963713455401702390e+01 8.90039036613260314823e+00 1.30806697658438615406e+01 +3508 17535.00 8.80814523143556158402e+01 6.35487985644683206488e+00 1.37272904098898393954e+01 7.70098316419120099141e+00 1.10290811173330265405e+01 6.64404398712156663009e+00 1.05993129061043518391e+01 8.90366418742855181279e+00 1.30847641807333445740e+01 +3509 17540.00 8.81077349073293873971e+01 6.35629855935883458784e+00 1.37320820918694668222e+01 7.70360432060725308645e+00 1.10323614265770792997e+01 6.64574986521486366087e+00 1.06022543272713694051e+01 8.90693691248241847802e+00 1.30888581443698566176e+01 +3510 17545.00 8.81340175003031447432e+01 6.35771704389922209799e+00 1.37368741723487861606e+01 7.70622511897470019449e+00 1.10356417358211302826e+01 6.64745551292455161274e+00 1.06051956100776365588e+01 8.91020854051689781272e+00 1.30929516563388386174e+01 +3511 17550.00 8.81603000932769020892e+01 6.35913531054474656656e+00 1.37416666510168727910e+01 7.70884555906553092797e+00 1.10389220450651830419e+01 6.64916093050973699974e+00 1.06081367554559218291e+01 8.91347907077541101728e+00 1.30970447163293641779e+01 +3512 17555.00 8.81865826862506736461e+01 6.36055335978251967788e+00 1.37464595276664471868e+01 7.71146564070355644560e+00 1.10422023543092375775e+01 6.65086611820879269885e+00 1.06110777645462750485e+01 8.91674850250137573937e+00 1.31011373238232309291e+01 +3513 17560.00 8.82128652792244309921e+01 6.36197119208928896228e+00 1.37512528018829485177e+01 7.71408536367112951382e+00 1.10454826635532903367e+01 6.65257107626009336343e+00 1.06140186381778232061e+01 8.92001683491748487143e+00 1.31052294784058780408e+01 +3514 17565.00 8.82391478721981883382e+01 6.36338880795216788044e+00 1.37560464732518088482e+01 7.71670472778169802552e+00 1.10487629727973413196e+01 6.65427580491237602445e+00 1.06169593775942630032e+01 8.92328406729825474031e+00 1.31093211798700135517e+01 +3515 17570.00 8.82654304650683059208e+01 6.36480620783753980874e+00 1.37608405415657450988e+01 7.71932373283834305511e+00 1.10520432821450356187e+01 6.65598030442474541957e+00 1.06198999837283611924e+01 8.92655019889746625950e+00 1.31134124276974386447e+01 +3516 17575.00 8.82917130580420632668e+01 6.36622339224288413817e+00 1.37656350065138362027e+01 7.72194237864414745331e+00 1.10553235913890919306e+01 6.65768457502520938363e+00 1.06228404577201676062e+01 8.92981522896890567154e+00 1.31175032214735871605e+01 +3517 17580.00 8.83179956510158348237e+01 6.36764036164494839909e+00 1.37704298676815195535e+01 7.72456066500219229454e+00 1.10586039006331429135e+01 6.65938861696250938849e+00 1.06257808005024507736e+01 8.93307915680781405854e+00 1.31215935608875380325e+01 +3518 17585.00 8.83442782439895921698e+01 6.36905711654120842979e+00 1.37752251246542272156e+01 7.72717859173628784930e+00 1.10618842099808372126e+01 6.66109243050610988490e+00 1.06287210131116243161e+01 8.93634198166797766305e+00 1.31256834454210871144e+01 +3519 17590.00 8.83705608369633495158e+01 6.37047365740841442516e+00 1.37800207773283212020e+01 7.72979615864951608017e+00 1.10651645191212484320e+01 6.66279601588402137224e+00 1.06316610967913760533e+01 8.93960370286536232243e+00 1.31297728748669495502e+01 +3520 17595.00 8.83968434299371352836e+01 6.37188998474404222350e+00 1.37848168251855938138e+01 7.73241336555532399188e+00 1.10684448284689427311e+01 6.66449937335534681182e+00 1.06346010523708383033e+01 8.94286431966412109773e+00 1.31338618486032832067e+01 +3521 17600.00 8.84231260229108784188e+01 6.37330609904556943945e+00 1.37896132679151257605e+01 7.73503021226715681280e+00 1.10717251377129937140e+01 6.66620250316882323460e+00 1.06375408809900626750e+01 8.94612383139058131576e+00 1.31379503663191563589e+01 +3522 17605.00 8.84494086158846357648e+01 6.37472200077938033758e+00 1.37944101052059924228e+01 7.73764669860882570163e+00 1.10750054469570482496e+01 6.66790540558355626644e+00 1.06404805837890936715e+01 8.94938223732962789825e+00 1.31420384276000170587e+01 +3523 17610.00 8.84756912088583931109e+01 6.37613769047404410628e+00 1.37992073367472674050e+01 7.74026282438341350911e+00 1.10782857562010992325e+01 6.66960808084828116193e+00 1.06434201617007051510e+01 8.95263953681795143780e+00 1.31461260321349335811e+01 +3524 17615.00 8.85019738018321646678e+01 6.37755316859594412193e+00 1.38040049620207501135e+01 7.74287858943545614920e+00 1.10815660654451537681e+01 6.67131052922210177059e+00 1.06463596158649504986e+01 8.95589572916115983503e+00 1.31502131794057000036e+01 +3525 17620.00 8.85282563948059220138e+01 6.37896843564255799919e+00 1.38088029808191574688e+01 7.74549399356803824901e+00 1.10848463746892047510e+01 6.67301275094339274574e+00 1.06492989474218777701e+01 8.95915081368558752217e+00 1.31542998689977590487e+01 +3526 17625.00 8.85545389877796793598e+01 6.38038349213209254884e+00 1.38136013927279233116e+01 7.74810903660496919088e+00 1.10881266839332575103e+01 6.67471474628162031451e+00 1.06522381573042554948e+01 8.96240478973829546305e+00 1.31583861006001860972e+01 +3527 17630.00 8.85808215807534224950e+01 6.38179833854129352488e+00 1.38184001974361283516e+01 7.75072371838042251113e+00 1.10914069932809500330e+01 6.67641651548552061968e+00 1.06551772466521352811e+01 8.96565765665598135570e+00 1.31624718736947698972e+01 +3528 17635.00 8.86071041737272082628e+01 6.38321297538836862628e+00 1.38231993945292046533e+01 7.75333803871820848030e+00 1.10946873025250063449e+01 6.67811805881420106346e+00 1.06581162166055687379e+01 8.96890941379606942974e+00 1.31665571878669549477e+01 +3529 17640.00 8.86333867667009656088e+01 6.38462740315006449521e+00 1.38279989836962329264e+01 7.75595199744213914528e+00 1.10979676117690573278e+01 6.67981937651639778863e+00 1.06610550682009677104e+01 8.97216006049525738320e+00 1.31706420428058095240e+01 +3530 17645.00 8.86596693596747229549e+01 6.38604162235495209643e+00 1.38327989645226452353e+01 7.75856559438638804238e+00 1.11012479210131100871e+01 6.68152046887193939995e+00 1.06639938025783820308e+01 8.97540959613170308273e+00 1.31747264380967763486e+01 +3531 17650.00 8.86859519526484945118e+01 6.38745563347977807211e+00 1.38375993366975205134e+01 7.76117882938512870794e+00 1.11045282302571646227e+01 6.68322133611920321528e+00 1.06669324206705784519e+01 8.97865802007319224742e+00 1.31788103731180097355e+01 +3532 17655.00 8.87122345456222518578e+01 6.38886943704274834488e+00 1.38424000997026528381e+01 7.76379170226217141249e+00 1.11078085395012173819e+01 6.68492197852765457355e+00 1.06698709237212501222e+01 8.98190533169787741485e+00 1.31828938477658628159e+01 +3533 17660.00 8.87385171385960234147e+01 6.39028303355170468336e+00 1.38472012534344024459e+01 7.76640421286205562268e+00 1.11110888487452683648e+01 6.68662239634603228211e+00 1.06728093127668106632e+01 8.98515153038391645168e+00 1.31869768613148501402e+01 +3534 17665.00 8.87647997315697665499e+01 6.39169642351448707984e+00 1.38520027972709236508e+01 7.76901636101895665121e+00 1.11143691580929626639e+01 6.68832258984380256805e+00 1.06757475889473081310e+01 8.98839661551982693766e+00 1.31910594135576939578e+01 +3535 17670.00 8.87910823245435381068e+01 6.39310960742857314898e+00 1.38568047309012900570e+01 7.77162814655668299224e+00 1.11176494673370154231e+01 6.69002255928006839270e+00 1.06786857534027923577e+01 8.99164058651485120777e+00 1.31951415038725468065e+01 +3536 17675.00 8.88173649175172954529e+01 6.39452258581216792521e+00 1.38616070540145841505e+01 7.77423956934050064405e+00 1.11209297765810681824e+01 6.69172230492429509496e+00 1.06816238070660372017e+01 8.99488344276787721299e+00 1.31992231320521220539e+01 +3537 17680.00 8.88436475104910670098e+01 6.39593535916274724684e+00 1.38664097661962397723e+01 7.77685062918385661135e+00 1.11242100858251209416e+01 6.69342182703558563617e+00 1.06845617511807304822e+01 8.99812518368814728831e+00 1.32033042975782208828e+01 +3538 17685.00 8.88699301034648243558e+01 6.39734792799851526013e+00 1.38712128669280474469e+01 7.77946132595202044513e+00 1.11274903951728134643e+01 6.69512112586268148817e+00 1.06874995868869238080e+01 9.00136580869527236359e+00 1.32073849999326320415e+01 +3539 17690.00 8.88962126964385817018e+01 6.39876029283767966405e+00 1.38760163561063709636e+01 7.78207165946879708684e+00 1.11307707043132264602e+01 6.69682020168541036753e+00 1.06904373152210308007e+01 9.00460531721922841086e+00 1.32114652389080777795e+01 +3540 17695.00 8.89224952894123248370e+01 6.40017245418808133905e+00 1.38808202331093628601e+01 7.78468162959945786383e+00 1.11340510136609207592e+01 6.69851905477323850135e+00 1.06933749373230959634e+01 9.00784370868998784943e+00 1.32155450137790726473e+01 +3541 17700.00 8.89487778823860963939e+01 6.40158441255755938926e+00 1.38856244976261020696e+01 7.78729123616781215844e+00 1.11373313229049735185e+01 6.70021768537490558515e+00 1.06963124542295364705e+01 9.01108098254788814074e+00 1.32196243244419697760e+01 +3542 17705.00 8.89750604753598537400e+01 6.40299616846431973727e+00 1.38904291492420206566e+01 7.78990047902875826225e+00 1.11406116321490280541e+01 6.70191609375987695785e+00 1.06992498672876834576e+01 9.01431713824363711751e+00 1.32237031701712872689e+01 +3543 17710.00 8.90013430682299855334e+01 6.40440772243693245969e+00 1.38952341876461975545e+01 7.79250935804756839076e+00 1.11438919413930790370e+01 6.70361428020798655325e+00 1.07021871774303036773e+01 9.01755217522793017793e+00 1.32277815507597402700e+01 +3544 17715.00 8.90276256612037428795e+01 6.40581907497287073028e+00 1.39000396123204268406e+01 7.79511787305841519213e+00 1.11471722506371317962e+01 6.70531224496796962598e+00 1.07051243857974487383e+01 9.02078609296184197319e+00 1.32318594655854830933e+01 +3545 17720.00 8.90539082541775144364e+01 6.40723022660070906653e+00 1.39048454229537892246e+01 7.79772602390583546850e+00 1.11504525598811863318e+01 6.70700998831965833347e+00 1.07080614935291738021e+01 9.02401889091679798582e+00 1.32359369143375928957e+01 +3546 17725.00 8.90801908471512717824e+01 6.40864117783864895017e+00 1.39096516191317149946e+01 7.80033381046546203663e+00 1.11537328692288788545e+01 6.70870751053251712648e+00 1.07109985018691649117e+01 9.02725056856423080376e+00 1.32400138966015070707e+01 +3547 17730.00 8.91064734401250291285e+01 6.41005192921526134597e+00 1.39144582004396433206e+01 7.80294123257146754469e+00 1.11570131784729333901e+01 6.71040481186565163085e+00 1.07139354118538356886e+01 9.03048112537556946222e+00 1.32440904118590179195e+01 +3548 17735.00 8.91327560330987722637e+01 6.41146248122802209224e+00 1.39192651664630115960e+01 7.80554829008912154364e+00 1.11602934877169843730e+01 6.71210189258852718552e+00 1.07168722246232395179e+01 9.03371056086370316507e+00 1.32481664596955628355e+01 +3549 17740.00 8.91590386260725438206e+01 6.41287283442622779717e+00 1.39240725167872518853e+01 7.80815498287332232508e+00 1.11635737971683184355e+01 6.71379875299133832556e+00 1.07198089413174209028e+01 9.03693887451042421333e+00 1.32522420395929376724e+01 +3550 17745.00 8.91853212190463153775e+01 6.41428298931772022939e+00 1.39288802509978015820e+01 7.81076131078934032814e+00 1.11668540934572444456e+01 6.71549539331245970430e+00 1.07227455630764385575e+01 9.04016606582862536357e+00 1.32563171512402178109e+01 +3551 17750.00 8.92116038120200727235e+01 6.41569294642070531154e+00 1.39336883686801016324e+01 7.81336727367134820099e+00 1.11701344155527841906e+01 6.71719181385245001081e+00 1.07256820910403387614e+01 9.04339213432082367206e+00 1.32603917942228424209e+01 +3552 17755.00 8.92378864049938442804e+01 6.41710270627411460964e+00 1.39384968695232203117e+01 7.81597287141570440383e+00 1.11734147246931971864e+01 6.71888801487041220639e+00 1.07286185263491713471e+01 9.04661707949991011901e+00 1.32644659679189587109e+01 +3553 17760.00 8.92641689979676016264e+01 6.41851226939615582268e+00 1.39433057530089570264e+01 7.81857810384622187172e+00 1.11766950340408914855e+01 6.72058399663581162997e+00 1.07315548702466330155e+01 9.04984090089949866353e+00 1.32685396721212924831e+01 +3554 17765.00 8.92904515909413447616e+01 6.41992163631539547453e+00 1.39481150188263889333e+01 7.82118297085925551215e+00 1.11799753432849424684e+01 6.72227975941811717320e+00 1.07344911237691338357e+01 9.05306359805320859380e+00 1.32726129061043494062e+01 +3555 17770.00 8.93167341839151021077e+01 6.42133080755004037599e+00 1.39529246663536703466e+01 7.82378747229934745633e+00 1.11832556525289952276e+01 6.72397530350752159478e+00 1.07374272881603616270e+01 9.05628517049464676347e+00 1.32766856696608552824e+01 +3556 17775.00 8.93430167768888736646e+01 6.42273978363902298128e+00 1.39577346953835181864e+01 7.82639160803176281433e+00 1.11865359617730497632e+01 6.72567062916312874421e+00 1.07403633645603697744e+01 9.05950561776779927925e+00 1.32807579622725988600e+01 +3557 17780.00 8.93692993698626310106e+01 6.42414856511091070246e+00 1.39625451053977265303e+01 7.82899537792176936080e+00 1.11898162710171025225e+01 6.72736573665440484859e+00 1.07432993540055683468e+01 9.06272493943737345035e+00 1.32848297834213759927e+01 +3558 17785.00 8.93955819628364167784e+01 6.42555715249427628066e+00 1.39673558960853760880e+01 7.83159878184499547160e+00 1.11930965802611535054e+01 6.72906062627154444300e+00 1.07462352577396504927e+01 9.06594313504734827802e+00 1.32889011326926240741e+01 +3559 17790.00 8.94218645558101741244e+01 6.42696554630732208580e+00 1.39721670668246158442e+01 7.83420181966671069773e+00 1.11963768896088478044e+01 6.73075529828401641907e+00 1.07491710770063075842e+01 9.06916020418315760310e+00 1.32929720096717787214e+01 +3560 17795.00 8.94481471487839172596e+01 6.42837374709934739059e+00 1.39769786173045247324e+01 7.83680449125217926110e+00 1.11996571988528987873e+01 6.73244975296128167486e+00 1.07521068128419496901e+01 9.07237614640951228751e+00 1.32970424138406340120e+01 +3561 17800.00 8.94744297417576746057e+01 6.42978175538855545312e+00 1.39817905470069003826e+01 7.83940679646666982450e+00 1.12029375080969533229e+01 6.73414399058317680868e+00 1.07550424664902699590e+01 9.07559096131184617207e+00 1.33011123448882688791e+01 +3562 17805.00 8.95007123347314461626e+01 6.43118957171387961580e+00 1.39866028557244561625e+01 7.84200873519617669416e+00 1.12062178173410060822e+01 6.73583801142953042529e+00 1.07579780389876766833e+01 9.07880464847559665031e+00 1.33051818021928358604e+01 +3563 17810.00 8.95269949277052035086e+01 6.43259719661425499737e+00 1.39914155428353481625e+01 7.84461030729560082619e+00 1.12094981265850588414e+01 6.73753181576980875178e+00 1.07609135316815027750e+01 9.08201720749656082887e+00 1.33092507854434121128e+01 +3564 17815.00 8.95532775206789608546e+01 6.43400463060788574410e+00 1.39962286079250137760e+01 7.84721151265094007954e+00 1.12127784359327531405e+01 6.73922540388384305743e+00 1.07638489457117998427e+01 9.08522863798090618559e+00 1.33133192941217917138e+01 +3565 17820.00 8.95795601136527466224e+01 6.43541187424406846418e+00 1.40010420505788868439e+01 7.84981235112745867610e+00 1.12160587451768058997e+01 6.74091877606182698912e+00 1.07667842822186212715e+01 9.08843893954515991140e+00 1.33173873277097722934e+01 +3566 17825.00 8.96058427066265039684e+01 6.43681892805137234603e+00 1.40058558703824029834e+01 7.85241282261115269847e+00 1.12193390544208586590e+01 6.74261193256286617270e+00 1.07697195422383753538e+01 9.09164811179548593145e+00 1.33214548858964256794e+01 +3567 17830.00 8.96321252996002471036e+01 6.43822579255836835443e+00 1.40106700668173598245e+01 7.85501292695692310275e+00 1.12226193636649096419e+01 6.74430487367715159053e+00 1.07726547272220383178e+01 9.09485615435877647883e+00 1.33255219681635530549e+01 +3568 17835.00 8.96584078925740044497e+01 6.43963246832471458703e+00 1.40154846396764725114e+01 7.85761266406113101368e+00 1.12258996730126039409e+01 6.74599759967415302242e+00 1.07755898381023751398e+01 9.09806306687228882879e+00 1.33295885739929431679e+01 +3569 17840.00 8.96846904855477760066e+01 6.44103895585825547698e+00 1.40202995882342573708e+01 7.86021203378904242953e+00 1.12291799821530169368e+01 6.74769011084406233891e+00 1.07785248762267205080e+01 9.10126884897328025659e+00 1.33336547028663989778e+01 +3570 17845.00 8.97109730785215333526e+01 6.44244525571865267466e+00 1.40251149121797880071e+01 7.86281103602665165653e+00 1.12324602915007112358e+01 6.74938240745634843165e+00 1.07814598426314862678e+01 9.10447350030936597420e+00 1.33377203545766302994e+01 +3571 17850.00 8.97372556713916509352e+01 6.44385136843447092758e+00 1.40299306110985000373e+01 7.86540967064959151145e+00 1.12357406007447622187e+01 6.75107448979084168172e+00 1.07843947386640053310e+01 9.10767702053854044664e+00 1.33417855285017949996e+01 +3572 17855.00 8.97635382643654224921e+01 6.44525729455501217302e+00 1.40347466844721910917e+01 7.86800793752312443985e+00 1.12390209099888185307e+01 6.75276635814809989000e+00 1.07873295653606859901e+01 9.11087940930841355680e+00 1.33458502241236871555e+01 +3573 17860.00 8.97898208573391940490e+01 6.44666303460884293486e+00 1.40395631318862967873e+01 7.87060583655397749681e+00 1.12423012192328695136e+01 6.75445801277686275199e+00 1.07902643239652231699e+01 9.11408066629770274858e+00 1.33499144411313857006e+01 +3574 17865.00 8.98161034503129513951e+01 6.44806858913489744367e+00 1.40443799529262527415e+01 7.87320336760741490423e+00 1.12455815284769222728e+01 6.75614945398805399890e+00 1.07931990157213046899e+01 9.11728079118512546586e+00 1.33539781789030396197e+01 +3575 17870.00 8.98423860432866945303e+01 6.44947395867210993003e+00 1.40491971470738494787e+01 7.87580053055906947890e+00 1.12488618377209750321e+01 6.75784068204077392750e+00 1.07961336416653441717e+01 9.12047978364938671803e+00 1.33580414371277331753e+01 +3576 17875.00 8.98686686362604518763e+01 6.45087914376977522579e+00 1.40540147140181712615e+01 7.87839732529493552704e+00 1.12521421469650277913e+01 6.75953169722521973739e+00 1.07990682031446763034e+01 9.12367764336920217261e+00 1.33621042152872568920e+01 +3577 17880.00 8.98949512292342234332e+01 6.45228414496682844970e+00 1.40588326531373670747e+01 7.88099375171137239704e+00 1.12554224563127203140e+01 6.76122249982121825695e+00 1.08020027012993473647e+01 9.12687437005438084725e+00 1.33661665128634030708e+01 +3578 17885.00 8.99212338222079807792e+01 6.45368896281256798630e+00 1.40636509640168743118e+01 7.88358980968400935296e+00 1.12587027654531333098e+01 6.76291309010860430817e+00 1.08049371372694107407e+01 9.13006996341472287781e+00 1.33702283294416126580e+01 +3579 17890.00 8.99475164151817381253e+01 6.45509359783556124768e+00 1.40684696462421303664e+01 7.88618549907811328126e+00 1.12619830748008276089e+01 6.76460346837757153793e+00 1.08078715124022011196e+01 9.13326442313930542127e+00 1.33742896646073194944e+01 +3580 17895.00 8.99737990081555238930e+01 6.45649805057474068803e+00 1.40732886993985708557e+01 7.88878081981077095008e+00 1.12652633840448803682e+01 6.76629363490795121550e+00 1.08108058276304852541e+01 9.13645774897939411119e+00 1.33783505178423158810e+01 +3581 17900.00 9.00000816011292670282e+01 6.45790232158977062227e+00 1.40781081229679880806e+01 7.89137577173688775645e+00 1.12685436932889313510e+01 6.76798358996920779163e+00 1.08137400844052411486e+01 9.13964994062406432818e+00 1.33824108886284030007e+01 +3582 17905.00 9.00263641941030243743e+01 6.45930641140921757426e+00 1.40829279165358194348e+01 7.89397035476318453817e+00 1.12718240025329876630e+01 6.76967333386190173172e+00 1.08166742837628717666e+01 9.14284099783493964253e+00 1.33864707766546544576e+01 +3583 17910.00 9.00526467870767959312e+01 6.46071032059274230619e+00 1.40877480795838607719e+01 7.89656456876529411204e+00 1.12751043118806801857e+01 6.77136286686586519323e+00 1.08196084270507189018e+01 9.14603092034255382714e+00 1.33905301812992227894e+01 +3584 17915.00 9.00789293800505532772e+01 6.46211404966891844737e+00 1.40925686116975459328e+01 7.89915841362920634339e+00 1.12783846211247329450e+01 6.77305218926092589271e+00 1.08225425153051855176e+01 9.14921970789817073921e+00 1.33945891021475436133e+01 +3585 17920.00 9.01052119730243106233e+01 6.46351759918703994146e+00 1.40973895124623123110e+01 7.90175188925128590967e+00 1.12816649303687839279e+01 6.77474130132691598760e+00 1.08254765497699683152e+01 9.15240736025304890688e+00 1.33986475387850560992e+01 +3586 17925.00 9.01314945659980821802e+01 6.46492096968604013085e+00 1.41022107813599575366e+01 7.90434499550716118677e+00 1.12849452396128384635e+01 6.77643020334366585899e+00 1.08284105316887586667e+01 9.15559387716881545316e+00 1.34027054905899127846e+01 +3587 17930.00 9.01577771589718253153e+01 6.46632416172558066592e+00 1.41070324178722685815e+01 7.90693773229319152307e+00 1.12882255488568912227e+01 6.77811889561173597230e+00 1.08313444623052461679e+01 9.15877925841746431956e+00 1.34067629573548305899e+01 +3588 17935.00 9.01840597519455968722e+01 6.46772717584459666540e+00 1.41118544215846917211e+01 7.90953009948500795900e+00 1.12915058581009439820e+01 6.77980737840059077826e+00 1.08342783426558408877e+01 9.16196350378134205528e+00 1.34108199383543258421e+01 +3589 17940.00 9.02103423449193542183e+01 6.46913001257165465319e+00 1.41166767920826554672e+01 7.91212209698933222057e+00 1.12947861673449967412e+01 6.78149565200042658830e+00 1.08372121740878810670e+01 9.16514661303244260182e+00 1.34148764332774703689e+01 +3590 17945.00 9.02366249378931257752e+01 6.47053267247678220997e+00 1.41214995288479574498e+01 7.91471372467143208240e+00 1.12980664765890495005e+01 6.78318371670143704932e+00 1.08401459578450545251e+01 9.16832858597384614541e+00 1.34189324417097033404e+01 +3591 17950.00 9.02629075308668831212e+01 6.47193515608854585963e+00 1.41263226314660332861e+01 7.91730498244839342448e+00 1.13013467858331022597e+01 6.78487157277309016479e+00 1.08430796949637713311e+01 9.17150942239827315916e+00 1.34229879629255357543e+01 +3592 17955.00 9.02891901238406404673e+01 6.47333746395624665126e+00 1.41311460993150337373e+01 7.91989587018548668595e+00 1.13046270951807947824e+01 6.78655922050558224612e+00 1.08460133866877264097e+01 9.17468912211916709509e+00 1.34270429967176880837e+01 +3593 17960.00 9.03154727168143836025e+01 6.47473959662917941671e+00 1.41359699321876828293e+01 7.92248638777906588615e+00 1.13079074044248493180e+01 6.78824666018910249932e+00 1.08489470343642491201e+01 9.17786768493961169213e+00 1.34310975425679526296e+01 +3594 17965.00 9.03417553097881551594e+01 6.47614155465664165234e+00 1.41407941293584933362e+01 7.92507653511512977218e+00 1.13111877136689020773e+01 6.78993389210348663454e+00 1.08518806390297548603e+01 9.18104511068341899716e+00 1.34351515998544854824e+01 +3595 17970.00 9.03680379027619267163e+01 6.47754333856720432294e+00 1.41456186905165353096e+01 7.92766631210039829369e+00 1.13144680230165963764e+01 6.79162091652856414470e+00 1.08548142020315694367e+01 9.18422139918475899378e+00 1.34392051682663655754e+01 +3596 17975.00 9.03943204957356840623e+01 6.47894494893089056831e+00 1.41504436152472514721e+01 7.93025571860014011349e+00 1.13177483322606473592e+01 6.79330773375452956486e+00 1.08577477244061100237e+01 9.18739655027780877106e+00 1.34432582472853816569e+01 +3597 17980.00 9.04206030887094556192e+01 6.48034638627627135321e+00 1.41552689028251492687e+01 7.93284475452107962212e+00 1.13210286415047036712e+01 6.79499434407157743010e+00 1.08606812076043475201e+01 9.19057056379674186530e+00 1.34473108363933313569e+01 +3598 17985.00 9.04468856816832129653e+01 6.48174765115264328585e+00 1.41600945530429509489e+01 7.93543341974920934945e+00 1.13243089507487546541e+01 6.79668074775953989786e+00 1.08636146525590504552e+01 9.19374343960682693933e+00 1.34513629351756556218e+01 +3599 17990.00 9.04731682745533305479e+01 6.48314874410930386261e+00 1.41649205652788072740e+01 7.93802171417052448987e+00 1.13275892599928074134e+01 6.79836694508788230706e+00 1.08665480606175552936e+01 9.19691517755259901890e+00 1.34554145432177829633e+01 +3600 17995.00 9.04994508675270878939e+01 6.48454966568518553771e+00 1.41697469392218007300e+01 7.94060963768138350360e+00 1.13308695692368583963e+01 6.80005293636752661257e+00 1.08694814330235516309e+01 9.20008577750969180897e+00 1.34594656600015110115e+01 +3601 18000.00 9.05257334605008310291e+01 6.48595041642958758388e+00 1.41745736741464369857e+01 7.94319719016778336140e+00 1.13341498784809111555e+01 6.80173872186794348238e+00 1.08724147709170875231e+01 9.20325523934337041965e+00 1.34635162850086373965e+01 +3602 18005.00 9.05520160534746167968e+01 6.48735099689180572113e+00 1.41794007697417985270e+01 7.94578437151571748132e+00 1.13374301877249656911e+01 6.80342430187932212249e+00 1.08753480754382199081e+01 9.20642356292926677952e+00 1.34675664178245959590e+01 +3603 18010.00 9.05782986464483741429e+01 6.48875140762113744586e+00 1.41842282255933191948e+01 7.94837118163191114206e+00 1.13407104970726582138e+01 6.80510967667113320090e+00 1.08782813479342781449e+01 9.20959074816374112515e+00 1.34716160579311807766e+01 +3604 18015.00 9.06045812394221314889e+01 6.49015164915651787680e+00 1.41890560410791497503e+01 7.95095762038162590102e+00 1.13439908063167109731e+01 6.80679484655429867246e+00 1.08812145895453156186e+01 9.21275679493278154553e+00 1.34756652050174672297e+01 +3605 18020.00 9.06308638323959030458e+01 6.49155172203687680366e+00 1.41938842158883726796e+01 7.95354368767159058962e+00 1.13472711155607655087e+01 6.80847981178792061030e+00 1.08841478015150237013e+01 9.21592170314312042478e+00 1.34797138584616149615e+01 +3606 18025.00 9.06571464253696603919e+01 6.49295162681151527551e+00 1.41987127492954989805e+01 7.95612938337743269557e+00 1.13505514248048164916e+01 6.81016457267255947983e+00 1.08870809849834540017e+01 9.21908547270147593622e+00 1.34837620177454127202e+01 +3607 18030.00 9.06834290183434035271e+01 6.49435136402972812419e+00 1.42035416410932473497e+01 7.95871470740587572124e+00 1.13538317340488692508e+01 6.81184912947768061997e+00 1.08900141411942943392e+01 9.22224810353529989015e+00 1.34878096825579412155e+01 +3608 18035.00 9.07097116113171750840e+01 6.49575093423045046848e+00 1.42083708907634083118e+01 7.96129965963255070704e+00 1.13571120433965617735e+01 6.81353348250384183160e+00 1.08929472713912449677e+01 9.22540959555131223624e+00 1.34918568523809945248e+01 +3609 18040.00 9.07359942042909324300e+01 6.49715033796297714019e+00 1.42132004976841415100e+01 7.96388423995381611320e+00 1.13603923526406180855e+01 6.81521763202051200636e+00 1.08958803766107106270e+01 9.22856994868733515602e+00 1.34959035266963685018e+01 +3610 18045.00 9.07622767972647039869e+01 6.49854957577660741208e+00 1.42180304614408772323e+01 7.96646844825566979864e+00 1.13636726618846690684e+01 6.81690157832824894513e+00 1.08988134583036639924e+01 9.23172916289154343872e+00 1.34999497050894969874e+01 +3611 18050.00 9.07885593902384755438e+01 6.49994864819991047256e+00 1.42228607816190582014e+01 7.96905228442410251688e+00 1.13669529711287218277e+01 6.81858532168615560920e+00 1.09017465175065204619e+01 9.23488723809138889465e+00 1.35039953871458191514e+01 +3612 18055.00 9.08148419832122328899e+01 6.50134755578218292982e+00 1.42276914577004731655e+01 7.97163574835547539266e+00 1.13702332804764161267e+01 6.82026886239479157581e+00 1.09046795553593298678e+01 9.23804417425577995004e+00 1.35080405722434857552e+01 +3613 18060.00 9.08411245761859902359e+01 6.50274629907272316842e+00 1.42325224892705648472e+01 7.97421883992541946640e+00 1.13735135896168291225e+01 6.82195220074434960367e+00 1.09076125733130595563e+01 9.24119997133289494684e+00 1.35120852600715757319e+01 +3614 18065.00 9.08674071691597333711e+01 6.50414487860010037679e+00 1.42373538757074786787e+01 7.97680155901992815615e+00 1.13767938989645234216e+01 6.82363533699393443044e+00 1.09105455723004887147e+01 9.24435462931237239559e+00 1.35161294501118796063e+01 +3615 18070.00 9.08936897621335049280e+01 6.50554329492397354073e+00 1.42421856167002971461e+01 7.97938390554572674063e+00 1.13800742082085744045e+01 6.82531827144410296881e+00 1.09134785537725864657e+01 9.24750814814238886186e+00 1.35201731418461967849e+01 +3616 18075.00 9.09199723551072622740e+01 6.50694154857291540139e+00 1.42470177117308143266e+01 7.98196587936807944175e+00 1.13833545174526271637e+01 6.82700100436432233408e+00 1.09164115186621177855e+01 9.25066052782294789836e+00 1.35242163348599646611e+01 +3617 18080.00 9.09462549480810196201e+01 6.50833964008585574845e+00 1.42518501602808242978e+01 7.98454748038334649607e+00 1.13866348266966799230e+01 6.82868353605515299165e+00 1.09193444684200642314e+01 9.25381176834368091022e+00 1.35282590287386152994e+01 +3618 18085.00 9.09725375410548053878e+01 6.50973757002245800862e+00 1.42566829618321229134e+01 7.98712870846715894402e+00 1.13899151359407326822e+01 6.83036586678606116863e+00 1.09222774040828340958e+01 9.25696186969422640800e+00 1.35323012229639463300e+01 +3619 18090.00 9.09988201340285627339e+01 6.51113533890092810452e+00 1.42615161160737873303e+01 7.98970956351587613398e+00 1.13931954452884252049e+01 6.83204799682651131576e+00 1.09252103268941169745e+01 9.26011083189531447601e+00 1.35363429170177500538e+01 +3620 18095.00 9.10251027270023058691e+01 6.51253294727056175617e+00 1.42663496223839700860e+01 7.99229004541549148399e+00 1.13964757544288382007e+01 6.83372992648742894062e+00 1.09281432379939644761e+01 9.26325865493657651939e+00 1.35403841105891036278e+01 +3621 18100.00 9.10513853199760632151e+01 6.51393039567029230597e+00 1.42711834803481067979e+01 7.99487015403127188051e+00 1.13997560637765324998e+01 6.83541165601755285053e+00 1.09310761387297130653e+01 9.26640533885947093040e+00 1.35444248030561666951e+01 +3622 18105.00 9.10776679129498347720e+01 6.51532768462868983050e+00 1.42760176894479968723e+01 7.99744988926994171408e+00 1.14030363730205852590e+01 6.83709318572780322398e+00 1.09340090300341277185e+01 9.26955088367436275121e+00 1.35484649941080075308e+01 +3623 18110.00 9.11039505059235921181e+01 6.51672481470541509196e+00 1.42808522492690723737e+01 8.00002925098640282897e+00 1.14063166822646397947e+01 6.83877451587728391047e+00 1.09369419133581864401e+01 9.27269528943307363988e+00 1.35525046832264273178e+01 +3624 18115.00 9.11302330988973636750e+01 6.51812178640830985898e+00 1.42856871592931273796e+01 8.00260823908737783938e+00 1.14095969915086907776e+01 6.84045564674582706743e+00 1.09398747898419372859e+01 9.27583855616669161748e+00 1.35565438699968581204e+01 +3625 18120.00 9.11565156918711352318e+01 6.51951860029703489374e+00 1.42905224191055992833e+01 8.00518685343813451993e+00 1.14128773008563850766e+01 6.84213657862362545359e+00 1.09428076605217903250e+01 9.27898068392704011842e+00 1.35605825537974578054e+01 +3626 18125.00 9.11827982848448783670e+01 6.52091525690015938466e+00 1.42953580282919237021e+01 8.00776509393503133083e+00 1.14161576099967962961e+01 6.84381731178014796058e+00 1.09457405267450802455e+01 9.28212167277630406659e+00 1.35646207343173017534e+01 +3627 18130.00 9.12090808777150101605e+01 6.52231175674625252014e+00 1.43001939862302531736e+01 8.01034296043297011636e+00 1.14194379193444905951e+01 6.84549784650558734711e+00 1.09486733896518586562e+01 9.28526152276630334370e+00 1.35686584111418238052e+01 +3628 18135.00 9.12353634706887532957e+01 6.52370810037424675443e+00 1.43050302925060286441e+01 8.01292045282831111308e+00 1.14227182285885433544e+01 6.84717818305904657450e+00 1.09516062502785338495e+01 9.28840023397994940524e+00 1.35726955836491782748e+01 +3629 18140.00 9.12616460636625106417e+01 6.52510428832307720626e+00 1.43098669466010406381e+01 8.01549757099668447324e+00 1.14259985378325961136e+01 6.84885832174108610815e+00 1.09545391100760820535e+01 9.29153780650015725939e+00 1.35767322515284440954e+01 +3630 18145.00 9.12879286566362821986e+01 6.52650032111094802190e+00 1.43147039482043663128e+01 8.01807431480335530694e+00 1.14292788470766506492e+01 6.85053826281080535665e+00 1.09574719699772700210e+01 9.29467424040983658529e+00 1.35807684143650586606e+01 +3631 18150.00 9.13142112496100395447e+01 6.52789619927679254374e+00 1.43195412966941617583e+01 8.02065068414468740343e+00 1.14325591564243449483e+01 6.85221800654803914199e+00 1.09604048313294342165e+01 9.29780953579190416747e+00 1.35848040715371709553e+01 +3632 18155.00 9.13404938425838111016e+01 6.52929192334917907203e+00 1.43243789916558590392e+01 8.02322667887557727795e+00 1.14358394655647526150e+01 6.85389755323261429254e+00 1.09633376952726226961e+01 9.30094369277072807733e+00 1.35888392227338634655e+01 +3633 18160.00 9.13667764355575826585e+01 6.53068749385667768337e+00 1.43292170326749008780e+01 8.02580229887165863545e+00 1.14391197749124469141e+01 6.85557690314436474210e+00 1.09662705629468870683e+01 9.30407671143958481252e+00 1.35928738674369249395e+01 +3634 18165.00 9.13930590285313257937e+01 6.53208291132785845434e+00 1.43340554192330760230e+01 8.02837754401892844669e+00 1.14424000838455768303e+01 6.85725605655275494144e+00 1.09692034354922771655e+01 9.30720859191247740227e+00 1.35969080052317981000e+01 +3635 18170.00 9.14193416215050831397e+01 6.53347817630165295100e+00 1.43388941508121821045e+01 8.03095241417228677960e+00 1.14456803934005542089e+01 6.85893501372725200582e+00 1.09721363141524914653e+01 9.31033933432414073650e+00 1.36009416356002716952e+01 +3636 18175.00 9.14456242144788546966e+01 6.53487328928590294197e+00 1.43437332271012945029e+01 8.03352690920736378644e+00 1.14489607026446069682e+01 6.86061377493732216237e+00 1.09750691999639329310e+01 9.31346893880930970511e+00 1.36049747582314264349e+01 +3637 18180.00 9.14719068074526120427e+01 6.53626825080917761568e+00 1.43485726474785675322e+01 8.03610102899979139579e+00 1.14522410118886579511e+01 6.86229234047316261069e+00 1.09780020942739380274e+01 9.31659740549235237950e+00 1.36090073726070563964e+01 +3638 18185.00 9.14981894004263693887e+01 6.53766306141040853817e+00 1.43534124116330819021e+01 8.03867477341483649411e+00 1.14555213211327142631e+01 6.86397071060423780153e+00 1.09809349981189132706e+01 9.31972473453909167063e+00 1.36130394783125989733e+01 +3639 18190.00 9.15244719934001409456e+01 6.53905772159743925442e+00 1.43582525189429830448e+01 8.04124814231776596785e+00 1.14588016304804085621e+01 6.86564888558964980803e+00 1.09838679127425589144e+01 9.32285092608426602112e+00 1.36170710748298482429e+01 +3640 18195.00 9.15507545863738982916e+01 6.54045223189883806469e+00 1.43630929690973569990e+01 8.04382113557384492708e+00 1.14620819397244595450e+01 6.86732686570923167579e+00 1.09868008391812761460e+01 9.32597598030406160774e+00 1.36211021618478778095e+01 +3641 18200.00 9.15770371793476556377e+01 6.54184659282244496126e+00 1.43679337614743545259e+01 8.04639375304834025826e+00 1.14653622489685105279e+01 6.86900465123244696741e+00 1.09897337787824032063e+01 9.32909989735394162835e+00 1.36251327388484853032e+01 +3642 18205.00 9.16033197723214129837e+01 6.54324080490719328651e+00 1.43727748958666925461e+01 8.04896599460652062419e+00 1.14686425582125650635e+01 6.87068224242876368635e+00 1.09926667324787104008e+01 9.33222267742045730188e+00 1.36291628054171063411e+01 +3643 18210.00 9.16296023652951845406e+01 6.54463486866092747363e+00 1.43776163715488838335e+01 8.05153786010328786915e+00 1.14719228674566178228e+01 6.87235963955728657027e+00 1.09955997015138837725e+01 9.33534432069016517630e+00 1.36331923610355385534e+01 +3644 18215.00 9.16558849582689418867e+01 6.54602878460184722798e+00 1.43824581882100073216e+01 8.05410934939354383744e+00 1.14752031768043103455e+01 6.87403684290820837788e+00 1.09985326870279802591e+01 9.33846482734961824690e+00 1.36372214053928573207e+01 +3645 18220.00 9.16821675512426992327e+01 6.54742255323779698273e+00 1.43873003454354950748e+01 8.05668046235292045765e+00 1.14784834859447233413e+01 6.87571385273026702833e+00 1.10014656902646894565e+01 9.34158419760609781690e+00 1.36412499379708531677e+01 +3646 18225.00 9.17084501442164423679e+01 6.54881617509734414995e+00 1.43921428427071447231e+01 8.05925119882595453191e+00 1.14817637951887761005e+01 6.87739066930329379090e+00 1.10043987122604214335e+01 9.34470243164616043430e+00 1.36452779584586103567e+01 +3647 18230.00 9.17347327371902281357e+01 6.55020965068833138645e+00 1.43969856796103901075e+01 8.06182155867791294668e+00 1.14850441045364703996e+01 6.87906729287602747291e+00 1.10073317540515862589e+01 9.34781952969781393392e+00 1.36493054663379176361e+01 +3648 18235.00 9.17610153301639854817e+01 6.55160298050823453053e+00 1.44018288556270324108e+01 8.06439154175333605679e+00 1.14883244137805213825e+01 6.88074372372829934363e+00 1.10102648169855186211e+01 9.35093549198906792697e+00 1.36533324610905726360e+01 +3649 18240.00 9.17872979231377570386e+01 6.55299616507525861664e+00 1.44066723704461416844e+01 8.06696114790712393017e+00 1.14916047230245759181e+01 6.88241996211920969984e+00 1.10131979020986250362e+01 9.35405031873756875882e+00 1.36573589425092940530e+01 +3650 18245.00 9.18135805161115143846e+01 6.55438920490760956739e+00 1.44115162234458740187e+01 8.06953037698381869802e+00 1.14948850323722702171e+01 6.88409600830786327919e+00 1.10161310105309624419e+01 9.35716401019205612499e+00 1.36613849099722344249e+01 +3651 18250.00 9.18398631090852717307e+01 6.55578210050276233289e+00 1.44163604144189516632e+01 8.07209922884868191773e+00 1.14981653415126796602e+01 6.88577186257408957459e+00 1.10190641433189373544e+01 9.36027656658053963667e+00 1.36654103631684709086e+01 +3652 18255.00 9.18661457020590432876e+01 6.55717485235819452782e+00 1.44212049426398802865e+01 8.07466770333589245467e+00 1.15014456507567359722e+01 6.88744752515626412759e+00 1.10219973017062393694e+01 9.36338798816212403153e+00 1.36694353016834391212e+01 +3653 18260.00 9.18924282950327864228e+01 6.55856746099211385115e+00 1.44260498079013821382e+01 8.07723580030035037680e+00 1.15047259601044284949e+01 6.88912299632385316528e+00 1.10249304867292874377e+01 9.36649827519590694180e+00 1.36734597251025764564e+01 +3654 18265.00 9.19187108880065437688e+01 6.55995992689163021083e+00 1.44308950096852512957e+01 8.07980351956586773099e+00 1.15080062693484812542e+01 6.89079827634632202660e+00 1.10278636995281207334e+01 9.36960742795135992367e+00 1.36774836329076787678e+01 +3655 18270.00 9.19449934808766755623e+01 6.56135225057494775314e+00 1.44357405475769251524e+01 8.08237086100807466948e+00 1.15112865785925340134e+01 6.89247336547241129523e+00 1.10307969412428015232e+01 9.37271544669794565152e+00 1.36815070248914611994e+01 +3656 18275.00 9.19712760738504329083e+01 6.56274443251881933747e+00 1.44405864210581924567e+01 8.08493782443005137850e+00 1.15145668878365867727e+01 6.89414826395085711397e+00 1.10337302129097309944e+01 9.37582233171549717099e+00 1.36855299004320780654e+01 +3657 18280.00 9.19975586668241902544e+01 6.56413647323108140341e+00 1.44454326299217825635e+01 8.08750440969706829719e+00 1.15178471970806377556e+01 6.89582297206149164026e+00 1.10366635156689660846e+01 9.37892808330457228294e+00 1.36895522591149649827e+01 +3658 18285.00 9.20238412597979618113e+01 6.56552837320921334197e+00 1.44502791734421975889e+01 8.09007061664329540918e+00 1.15211275063246922912e+01 6.89749749004268863928e+00 1.10395968506605548498e+01 9.38203270175536729880e+00 1.36935741007328459773e+01 +3659 18290.00 9.20501238527717191573e+01 6.56692013294032594928e+00 1.44551260514121597822e+01 8.09263644508218149554e+00 1.15244078155687450504e+01 6.89917181815355196051e+00 1.10425302189209091352e+01 9.38513618736844001944e+00 1.36975954247675062447e+01 +3660 18295.00 9.20764064457454907142e+01 6.56831175292189861636e+00 1.44599732633134649973e+01 8.09520189486862840056e+00 1.15276881248127978097e+01 6.90084595665318278890e+00 1.10454636214864390098e+01 9.38823854045471506424e+00 1.37016162308043885076e+01 +3661 18300.00 9.21026890387192338494e+01 6.56970323363067798539e+00 1.44648208087315470749e+01 8.09776696581608312897e+00 1.15309684341604921087e+01 6.90251990577995577780e+00 1.10483970596008358456e+01 9.39133976134584003148e+00 1.37056365184289248305e+01 +3662 18305.00 9.21289716316930054063e+01 6.57109457556414344737e+00 1.44696686873554867248e+01 8.10033165776908603561e+00 1.15342487435081864078e+01 6.90419366580333715433e+00 1.10513305341968699480e+01 9.39443985035274309325e+00 1.37096562873301959229e+01 +3663 18310.00 9.21552542246667627523e+01 6.57248577919904075628e+00 1.44745168986670726952e+01 8.10289597054107879615e+00 1.15375290526485994036e+01 6.90586723695133652967e+00 1.10542640464145911494e+01 9.39753880781743333728e+00 1.37136755369899940860e+01 +3664 18315.00 9.21815368176405343092e+01 6.57387684502248514917e+00 1.44793654422517441560e+01 8.10545990395587345745e+00 1.15408093619962937026e+01 6.90754061949342279547e+00 1.10571975972904095187e+01 9.40063663408193050941e+00 1.37176942672010397928e+01 +3665 18320.00 9.22078194106142916553e+01 6.57526777352158653400e+00 1.44842143176949385008e+01 8.10802345783728029005e+00 1.15440896712403446855e+01 6.90921381366796882872e+00 1.10601311879643766645e+01 9.40373332949861406860e+00 1.37217124773414838046e+01 +3666 18325.00 9.22341020035880490013e+01 6.57665856516273183985e+00 1.44890635245820913468e+01 8.11058663200911134084e+00 1.15473699804843956684e+01 6.91088681973407759074e+00 1.10630648194729026557e+01 9.40682889441986347379e+00 1.37257301672040430418e+01 +3667 18330.00 9.22603845965617921365e+01 6.57804922044339690501e+00 1.44939130626022798509e+01 8.11314942628481006182e+00 1.15506502897284502041e+01 6.91255963790939453872e+00 1.10659984927487542450e+01 9.40992332920842144972e+00 1.37297473363741602270e+01 +3668 18335.00 9.22866671895355636934e+01 6.57943973980923768607e+00 1.44987629313409360776e+01 8.11571184047782701043e+00 1.15539305989725029633e+01 6.91423226847375094195e+00 1.10689322090356299100e+01 9.41301663423739221059e+00 1.37337639844372638720e+01 +3669 18340.00 9.23129497825093210395e+01 6.58083012374736764372e+00 1.45036131302798629861e+01 8.11827387440160208598e+00 1.15572109082165557226e+01 6.91590471163442899183e+00 1.10718659692662928506e+01 9.41610880987989062874e+00 1.37377801109787949230e+01 +3670 18345.00 9.23392323754830925964e+01 6.58222037273453697281e+00 1.45084636591081252988e+01 8.12083552785922258010e+00 1.15604912174606084818e+01 6.91757696766089402729e+00 1.10747997745807964520e+01 9.41919985654011071574e+00 1.37417957156878269842e+01 +3671 18350.00 9.23655149684568641533e+01 6.58361048722676223122e+00 1.45133145174111710674e+01 8.12339680066413016846e+00 1.15637715268083027809e+01 6.91924903678115832406e+00 1.10777336258082694798e+01 9.42228977460152528067e+00 1.37458107981497992256e+01 +3672 18355.00 9.23917975614306214993e+01 6.58500046770079539016e+00 1.45181657048780685670e+01 8.12595769262977540848e+00 1.15670518360523555401e+01 6.92092091923359564731e+00 1.10806675241924033060e+01 9.42537856446833544055e+00 1.37498253580537870278e+01 +3673 18360.00 9.24180801544043646345e+01 6.58639031460229240622e+00 1.45230172209906207570e+01 8.12851820353851017842e+00 1.15703321452964065230e+01 6.92259261525657887404e+00 1.10836014706659646833e+01 9.42846622654474231240e+00 1.37538393948815826917e+01 +3674 18365.00 9.24443627473781219805e+01 6.58778002840800169793e+00 1.45278690654378994651e+01 8.13107833320378148301e+00 1.15736124545404575059e+01 6.92426412508848354577e+00 1.10865354662653672335e+01 9.43155276125567176848e+00 1.37578529085295517831e+01 +3675 18370.00 9.24706453403518935374e+01 6.58916960956357833368e+00 1.45327212379089800720e+01 8.13363808141830624265e+00 1.15768927637845138179e+01 6.92593544895732016187e+00 1.10894695120270210253e+01 9.43463816901568996798e+00 1.37618658983758415104e+01 +3676 18375.00 9.24969279333256508835e+01 6.59055905853540657802e+00 1.45375737378856584314e+01 8.13619744797480315412e+00 1.15801730730285648008e+01 6.92760658711182397695e+00 1.10924036089873325750e+01 9.43772245027045109111e+00 1.37658783642131705705e+01 +3677 18380.00 9.25232105262994366512e+01 6.59194837576914505206e+00 1.45424265650570152530e+01 8.13875643266598913783e+00 1.15834533822726175600e+01 6.92927753976964666549e+00 1.10953377580790739643e+01 9.44080560544488456287e+00 1.37698903056269816858e+01 +3678 18385.00 9.25494931192731939973e+01 6.59333756171045060057e+00 1.45472797190084861541e+01 8.14131503528458289054e+00 1.15867336916203118591e+01 6.93094830716916021629e+00 1.10982719602350154986e+01 9.44388763500537287143e+00 1.37739017223063431317e+01 +3679 18390.00 9.25757757122469371325e+01 6.59472661682570393538e+00 1.45521331994291447387e+01 8.14387325560257302470e+00 1.15900140008643663947e+01 6.93261888952800831021e+00 1.11012062165952052339e+01 9.44696853938721226029e+00 1.37779126139403356177e+01 +3680 18395.00 9.26020583052206944785e+01 6.59611554153983625781e+00 1.45569870060080699403e+01 8.14643109342304505560e+00 1.15932943101084191539e+01 6.93428928709493153093e+00 1.11041405281960567919e+01 9.45004831906714670708e+00 1.37819229800107585504e+01 +3681 18400.00 9.26283408981944660354e+01 6.59750433629850263628e+00 1.45618411383306938234e+01 8.14898854850762077717e+00 1.15965746193524701368e+01 6.93595950006684791589e+00 1.11070748957630502929e+01 9.45312697450120076326e+00 1.37859328204139615082e+01 +3682 18405.00 9.26546234911682233815e+01 6.59889300155772406953e+00 1.45666955959824591105e+01 8.15154562063865562038e+00 1.15998549287001644359e+01 6.93762952869249538423e+00 1.11100093204362462274e+01 9.45620450617648522496e+00 1.37899421346317492265e+01 +3683 18410.00 9.26809060840383409641e+01 6.60028153773206494037e+00 1.45715503786524394059e+01 8.15410230958813997404e+00 1.16031352379442171951e+01 6.93929937318952028136e+00 1.11129438032520457824e+01 9.45928091458011266468e+00 1.37939509223531882043e+01 +3684 18415.00 9.27071886770121125210e+01 6.60166994526718120539e+00 1.45764054861333498536e+01 8.15665861513842749275e+00 1.16064155471882699544e+01 6.94096903376520479867e+00 1.11158783450395866055e+01 9.46235620019919743129e+00 1.37979591833710060200e+01 +3685 18420.00 9.27334712699858840779e+01 6.60305822458800051322e+00 1.45812609178033483204e+01 8.15921453704077848101e+00 1.16096958564323227137e+01 6.94263851064755943554e+00 1.11188129468352698836e+01 9.46543036353121358673e+00 1.38019669171669914221e+01 +3686 18425.00 9.27597538629596414239e+01 6.60444637612981644281e+00 1.45861166735587932664e+01 8.16177007507755014615e+00 1.16129761656763772493e+01 6.94430780406459202680e+00 1.11217476094682279353e+01 9.46850340508400556416e+00 1.38059741235338684362e+01 +3687 18430.00 9.27860364559333845591e+01 6.60583440031755575461e+00 1.45909727529851185324e+01 8.16432522898963419777e+00 1.16162564842481206284e+01 6.94597691421322416261e+00 1.11246823339748708293e+01 9.47157532538614077566e+00 1.38099808021607053377e+01 +3688 18435.00 9.28123190489071419051e+01 6.60722229755541867746e+00 1.45958291556677632883e+01 8.16687999854902457741e+00 1.16195367841644809914e+01 6.94764584132146278961e+00 1.11276171212879670946e+01 9.47464612494545832533e+00 1.38139869527365881652e+01 +3689 18440.00 9.28386016418809134620e+01 6.60861006828906294430e+00 1.46006858813994426782e+01 8.16943438350698336592e+00 1.16228170934085355270e+01 6.94931458559659276375e+00 1.11305519723402852605e+01 9.47771580429053095429e+00 1.38179925748469472069e+01 +3690 18445.00 9.28648842348546708081e+01 6.60999771291232285364e+00 1.46055429298692356355e+01 8.17198838360440582562e+00 1.16260974027562298261e+01 6.95098314724589450009e+00 1.11334868880645974087e+01 9.48078436397065260621e+00 1.38219976682845011595e+01 +3691 18450.00 9.28911668278284281541e+01 6.61138523185012694228e+00 1.46104003006625760008e+01 8.17454199861328234533e+00 1.16293777120002808090e+01 6.95265152648701612037e+00 1.11364218692900269758e+01 9.48385180453512255383e+00 1.38260022327383307328e+01 +3692 18455.00 9.29174494208022139219e+01 6.61277262551703781668e+00 1.46152579934685427077e+01 8.17709522825378343214e+00 1.16326580212443335682e+01 6.95431972351687122114e+00 1.11393569170529875834e+01 9.48691812651250998556e+00 1.38300062677938662148e+01 +3693 18460.00 9.29437320137759712679e+01 6.61415989429653095044e+00 1.46201160079762111366e+01 8.17964807227716939053e+00 1.16359383304883863275e+01 6.95598773855310881231e+00 1.11422920320789646809e+01 9.48998333049356901370e+00 1.38340097733474696184e+01 +3694 18465.00 9.29700146067497144031e+01 6.61554703860316628550e+00 1.46249743440819415241e+01 8.18220053042433725921e+00 1.16392186397324408631e+01 6.95765557178228277735e+00 1.11452272154043718899e+01 9.49304741701723031611e+00 1.38380127488809350211e+01 +3695 18470.00 9.29962971997234717492e+01 6.61693405884114849158e+00 1.46298330011638881842e+01 8.18475260242582081105e+00 1.16424989489764918460e+01 6.95932322342203946164e+00 1.11481624679619706342e+01 9.49611038667425155779e+00 1.38420151942906226594e+01 +3696 18475.00 9.30225797926972433061e+01 6.61832095540430742631e+00 1.46346919792220493406e+01 8.18730428800179055315e+00 1.16457792582205463816e+01 6.96099069365893097228e+00 1.11510977903736154815e+01 9.49917224005538507470e+00 1.38460171092656096903e+01 +3697 18480.00 9.30488623856710006521e+01 6.61970772868648449361e+00 1.46395512777382190706e+01 8.18985558689314174785e+00 1.16490595676718786677e+01 6.96265798270024216521e+00 1.11540331837793527114e+01 9.50223297773065489480e+00 1.38500184933913299545e+01 +3698 18485.00 9.30751449786447579982e+01 6.62109437907114894983e+00 1.46444108965051214000e+01 8.19240649882004667859e+00 1.16523398765013705969e+01 6.96432509074288841333e+00 1.11569686488010280101e+01 9.50529260032190848051e+00 1.38540193465641436887e+01 +3699 18490.00 9.31014275716185295551e+01 6.62248090694177093951e+00 1.46492708353154661438e+01 8.19495702349230903394e+00 1.16556201860563426465e+01 6.96599201796305944612e+00 1.11599041864750549991e+01 9.50835110840953490197e+00 1.38580196683694882864e+01 +3700 18495.00 9.31277101645922869011e+01 6.62386731268182504806e+00 1.46541310937546960247e+01 8.19750716064045903408e+00 1.16589004953003989584e+01 6.96765876457840338531e+00 1.11628397976305588912e+01 9.51140850262574488738e+00 1.38620194587037186551e+01 +3701 18500.00 9.31539927575660442471e+01 6.62525359668514557399e+00 1.46589916717191641737e+01 8.20005690995357916506e+00 1.16621808045444499413e+01 6.96932533075474491824e+00 1.11657754829930286888e+01 9.51446478358201908065e+00 1.38660187170486359776e+01 +3702 18505.00 9.31802753505398158040e+01 6.62663975930411197623e+00 1.46638525687943115372e+01 8.20260627116219964705e+00 1.16654611138921442404e+01 6.97099171667863615198e+00 1.11687112434952311446e+01 9.51751995191056998635e+00 1.38700174434042331484e+01 +3703 18510.00 9.32065579435135731501e+01 6.62802580091183202171e+00 1.46687137848764947989e+01 8.20515524395539586067e+00 1.16687414231361969996e+01 6.97265792255736194249e+00 1.11716470798626534844e+01 9.52057400825396982214e+00 1.38740156373559528902e+01 +3704 18515.00 9.32328405364873304961e+01 6.62941172189178029583e+00 1.46735753195511513525e+01 8.20770382804297682355e+00 1.16720217323802515352e+01 6.97432394855674608891e+00 1.11745829930280695663e+01 9.52362695323406605041e+00 1.38780132988001483341e+01 +3705 18520.00 9.32591231294611020530e+01 6.63079752258596766268e+00 1.46784371726109963419e+01 8.21025202310365465053e+00 1.16753020416243042945e+01 6.97598979486334336286e+00 1.11775189837169595108e+01 9.52667878752452246260e+00 1.38820104273222568736e+01 +3706 18525.00 9.32854057224348451882e+01 6.63218320336750277733e+00 1.46832993438487484639e+01 8.21279982883686798800e+00 1.16785823508683552774e+01 6.97765546165334349382e+00 1.11804550526548158729e+01 9.52972951176791838179e+00 1.38860070228186422980e+01 +3707 18530.00 9.33116883154086167451e+01 6.63356876458876865144e+00 1.46881618329534884282e+01 8.21534724494205903511e+00 1.16818626602160495764e+01 6.97932094910293443490e+00 1.11833912007744054051e+01 9.53277912664828086520e+00 1.38900030849783728826e+01 +3708 18535.00 9.33379709083823740912e+01 6.63495420660213941488e+00 1.46930246398215693659e+01 8.21789427107721337507e+00 1.16851429693564625723e+01 6.98098625737794353796e+00 1.11863274288012135571e+01 9.53582763281854717263e+00 1.38939986135941762058e+01 +3709 18540.00 9.33642535013561456481e+01 6.63633952975999807933e+00 1.46978877641420755396e+01 8.22044090694177143064e+00 1.16884232786005135551e+01 6.98265138666492468644e+00 1.11892637373570913439e+01 9.53887503096275146675e+00 1.38979936083551223192e+01 +3710 18545.00 9.33905360943299029941e+01 6.63772473438363075360e+00 1.47027512057077167640e+01 8.22298715219371700869e+00 1.16917035879482078542e+01 6.98431633712970345584e+00 1.11922001273748019656e+01 9.54192132178565088907e+00 1.39019880692612147755e+01 +3711 18550.00 9.34168186873036603401e+01 6.63910982083578193880e+00 1.47076149643112170651e+01 8.22553300652212726618e+00 1.16949838971922606135e+01 6.98598110892774126768e+00 1.11951365995798379771e+01 9.54496650597127782589e+00 1.39059819958978874155e+01 +3712 18555.00 9.34431012801737779228e+01 6.64049478943773774375e+00 1.47124790397452915869e+01 8.22807846956426125473e+00 1.16982642064363133727e+01 6.98764570224558934086e+00 1.11980731546976848279e+01 9.54801058422438586604e+00 1.39099753880578607124e+01 +3713 18560.00 9.34693838731475494797e+01 6.64187964052114843128e+00 1.47173434318026590262e+01 8.23062354100919435496e+00 1.17015445156803661320e+01 6.98931011721798522984e+00 1.12010097933501846512e+01 9.55105355726010429862e+00 1.39139682457411311134e+01 +3714 18565.00 9.34956664661213068257e+01 6.64326437442803019451e+00 1.47222081402760363034e+01 8.23316822049418028939e+00 1.17048248250280586547e+01 6.99097435402111511138e+00 1.12039465163664697656e+01 9.55409542578318848882e+00 1.39179605685331377884e+01 +3715 18570.00 9.35219490590950641717e+01 6.64464899144858023305e+00 1.47270731649581438916e+01 8.23571250767720819397e+00 1.17081051342721114139e+01 6.99263841281044395970e+00 1.12068833244720238440e+01 9.55713619053985574681e+00 1.39219523563302374214e+01 +3716 18575.00 9.35482316520688215178e+01 6.64603349193517356497e+00 1.47319385057453384746e+01 8.23825640220589328067e+00 1.17113854435161659495e+01 6.99430229374142964360e+00 1.12098202182886996781e+01 9.56017585225558974571e+00 1.39259436089251487090e+01 +3717 18580.00 9.35745142450425930747e+01 6.64741787616764590041e+00 1.47368041623266989859e+01 8.24079990371749993017e+00 1.17146657527602187088e+01 6.99596599695917209516e+00 1.12127571985419756118e+01 9.56321441166624808261e+00 1.39299343261105903480e+01 +3718 18585.00 9.36007968380163504207e+01 6.64880214447764306129e+00 1.47416701347022218727e+01 8.24334301184927653594e+00 1.17179460620042696917e+01 6.99762952261913273588e+00 1.12156942658537062130e+01 9.56625186951803740953e+00 1.39339245076792792588e+01 +3719 18590.00 9.36270794309901077668e+01 6.65018629716572906574e+00 1.47465364224573498575e+01 8.24588572623848392595e+00 1.17212263712483260036e+01 6.99929287086640705695e+00 1.12186314209493716021e+01 9.56928822658827193948e+00 1.39379141536312154415e+01 +3720 18595.00 9.36533620239638509020e+01 6.65157033452209578428e+00 1.47514030256957155984e+01 8.24842804651201433330e+00 1.17245066804923769865e+01 7.00095604184609499043e+00 1.12215686645544607813e+01 9.57232348361279861138e+00 1.39419032636554778293e+01 +3721 18600.00 9.36796446169376224589e+01 6.65295425684730190596e+00 1.47562699442100413449e+01 8.25096997228639317257e+00 1.17277869898400712856e+01 7.00261903569292787353e+00 1.12245059971871814497e+01 9.57535764138965994619e+00 1.39458918376484266588e+01 +3722 18605.00 9.37059272099113940158e+01 6.65433806443154463039e+00 1.47611371776894060304e+01 8.25351150318851622956e+00 1.17310672990841222685e+01 7.00428185256236801592e+00 1.12274434195730172803e+01 9.57839070067542941445e+00 1.39498798754027752977e+01 +3723 18610.00 9.37322098028851513618e+01 6.65572175755465167413e+00 1.47660047262374458654e+01 8.25605263881418061089e+00 1.17343476083281768041e+01 7.00594449256842111140e+00 1.12303809322301777485e+01 9.58142266226814243169e+00 1.39538673768148839827e+01 +3724 18615.00 9.37584923958589229187e+01 6.65710533649645697096e+00 1.47708725895432433362e+01 8.25859337879028210239e+00 1.17376279175722277870e+01 7.00760695586654769329e+00 1.12333185359877862908e+01 9.58445352696583618979e+00 1.39578543416774696340e+01 +3725 18620.00 9.37847749888326802647e+01 6.65848880154715327961e+00 1.47757407675031515737e+01 8.26113372271261603430e+00 1.17409082268162823226e+01 7.00926924257075256719e+00 1.12362562311567693030e+01 9.58748329555618461484e+00 1.39618407699905358044e+01 +3726 18625.00 9.38110575818064233999e+01 6.65987215295547851923e+00 1.47806092601171741308e+01 8.26367367016662335288e+00 1.17441885360603350819e+01 7.01093135281576973483e+00 1.12391940185662502216e+01 9.59051196885794787761e+00 1.39658266614431578745e+01 +3727 18630.00 9.38373401747801949568e+01 6.66125539100126573544e+00 1.47854780671780314805e+01 8.26621322075846620692e+00 1.17474688454080293809e+01 7.01259328672596904397e+00 1.12421318986307952059e+01 9.59353954767952998850e+00 1.39698120161389756078e+01 +3728 18635.00 9.38636227677539523029e+01 6.66263851593325018285e+00 1.47903471885820767540e+01 8.26875237406321517142e+00 1.17507491546520821402e+01 7.01425504442571945418e+00 1.12450698720758968108e+01 9.59656603286041942624e+00 1.39737968337670697139e+01 +3729 18640.00 9.38899053607277096489e+01 6.66402152802090252948e+00 1.47952166242256719642e+01 8.27129112966630763992e+00 1.17540294638961331231e+01 7.01591662602902577106e+00 1.12480079394197538534e+01 9.59959142521938169068e+00 1.39777811142237951003e+01 +3730 18645.00 9.39161879537014954167e+01 6.66540442749222972196e+00 1.48000863741088135583e+01 8.27382948715317745325e+00 1.17573097731401894350e+01 7.01757803166025606600e+00 1.12509461010769342693e+01 9.60261572559590881326e+00 1.39817648575091535434e+01 +3731 18650.00 9.39424705466752527627e+01 6.66678721461669887560e+00 1.48049564381278688785e+01 8.27636744607817043118e+00 1.17605900823842404179e+01 7.01923926141268861301e+00 1.12538843577729199552e+01 9.60563893482949460179e+00 1.39857480635195017271e+01 +3732 18655.00 9.39687531396490101088e+01 6.66816988962232137794e+00 1.48098268161791910558e+01 8.27890500600599565928e+00 1.17638703917319347170e+01 7.02090031542105652562e+00 1.12568227098186355306e+01 9.60866105380108415090e+00 1.39897307320475619008e+01 +3733 18660.00 9.39950357326227532440e+01 6.66955245273710595200e+00 1.48146975081591367740e+01 8.28144216651172193622e+00 1.17671507009759856999e+01 7.02256119377863718967e+00 1.12597611579395735504e+01 9.61168208333980977898e+00 1.39937128630933305118e+01 +3734 18665.00 9.40213183255965248009e+01 6.67093490419942902747e+00 1.48195685141713529021e+01 8.28397892712896855016e+00 1.17704310102200402355e+01 7.02422189658906948040e+00 1.12626997024466533048e+01 9.61470202433698162281e+00 1.39976944565531660203e+01 +3735 18670.00 9.40476009185702821469e+01 6.67231724421657101942e+00 1.48244398340085528076e+01 8.28651528741207243911e+00 1.17737113194640929947e+01 7.02588242395599849033e+00 1.12656383439617187037e+01 9.61772087766318506397e+00 1.40016755124270737554e+01 +3736 18675.00 9.40738835115440394929e+01 6.67369947302690746938e+00 1.48293114676707382671e+01 8.28905124690502148610e+00 1.17769916287081457540e+01 7.02754277598306131836e+00 1.12685770828993359061e+01 9.62073864418900370765e+00 1.40056560306114086245e+01 +3737 18680.00 9.41001661045178252607e+01 6.67508159082735552659e+00 1.48341834151579110568e+01 8.29158680514142432116e+00 1.17802719379521985132e+01 7.02920295275317119632e+00 1.12715159196740675185e+01 9.62375532482647777499e+00 1.40096360110025290879e+01 +3738 18685.00 9.41264486974915826067e+01 6.67646359782519649428e+00 1.48390556764700694004e+01 8.29412196165489667976e+00 1.17835522471962512725e+01 7.03086295435960728639e+00 1.12744548549077645561e+01 9.62677092046692273186e+00 1.40136154534967953822e+01 +3739 18690.00 9.41527312904653257419e+01 6.67784549423807760604e+00 1.48439282516072132978e+01 8.29665671595833131846e+00 1.17868325564403022554e+01 7.03252278089564430985e+00 1.12773938888077029929e+01 9.62978543201201375723e+00 1.40175943583014905869e+01 +3740 18695.00 9.41790138833354575354e+01 6.67922728023182266099e+00 1.48488011404656994330e+01 8.29919106758534219637e+00 1.17901128657879965544e+01 7.03418243245456054069e+00 1.12803330219957320679e+01 9.63279886037379107222e+00 1.40215727251056865299e+01 +3741 18700.00 9.42052964763092006706e+01 6.68060895601371829144e+00 1.48536743430455313586e+01 8.30172501602808132759e+00 1.17933931750320510901e+01 7.03584190909854001461e+00 1.12832722546791313079e+01 9.63581120648502498227e+00 1.40255505540130300801e+01 +3742 18705.00 9.42315790692829722275e+01 6.68199052175994800962e+00 1.48585478595539903779e+01 8.30425856080980828722e+00 1.17966734842761038493e+01 7.03750121091049685162e+00 1.12862115873761101881e+01 9.63882247126812075066e+00 1.40295278449198796977e+01 +3743 18710.00 9.42578616622567295735e+01 6.68337197765706925168e+00 1.48634216897837934113e+01 8.30679170141231537627e+00 1.17999537935201548322e+01 7.03916033797334073085e+00 1.12891510205012277623e+01 9.64183265565584335377e+00 1.40335045979298733698e+01 +3744 18715.00 9.42841442552305011304e+01 6.68475332386054343914e+00 1.48682958339422235383e+01 8.30932443733812320374e+00 1.18032341027642111442e+01 7.04081929035962428287e+00 1.12920905543654122027e+01 9.64484176060169673406e+00 1.40374808129393713330e+01 +3745 18720.00 9.43104268482042726873e+01 6.68613456054656118965e+00 1.48731702919256392192e+01 8.31185676807939621824e+00 1.18065144120082621271e+01 7.04247806812116383668e+00 1.12950301892795810232e+01 9.64784978704881091005e+00 1.40414564900520169033e+01 +3746 18725.00 9.43367094411780300334e+01 6.68751568787058126020e+00 1.48780450638376802175e+01 8.31438869309719841283e+00 1.18097947213559564261e+01 7.04413667134087617683e+00 1.12979699257619436992e+01 9.65085673595068271879e+00 1.40454316291641667647e+01 +3747 18730.00 9.43629920341517731686e+01 6.68889670597770269467e+00 1.48829201497819916256e+01 8.31692021188368535434e+00 1.18130750306000074090e+01 7.04579510006021525470e+00 1.13009097639161364413e+01 9.65386260829190234745e+00 1.40494062302758191407e+01 +3748 18735.00 9.43892746271255305146e+01 6.69027761503375018037e+00 1.48877955498622078778e+01 8.31945132389992814126e+00 1.18163553398440619446e+01 7.04745335435173014815e+00 1.13038497041567271850e+01 9.65686740502596663305e+00 1.40533802935942606638e+01 +3749 18740.00 9.44155572200993020715e+01 6.69165841515273029927e+00 1.48926712639746945399e+01 8.32198202859662750086e+00 1.18196356490881129275e+01 7.04911143426724251526e+00 1.13067897466910025628e+01 9.65987112714782902856e+00 1.40573538189122029252e+01 +3750 18745.00 9.44418398130730594175e+01 6.69303910647973943071e+00 1.48975472924303709021e+01 8.32451232544521602108e+00 1.18229159583321674631e+01 7.05076933984820630741e+00 1.13097298919335145229e+01 9.66287377564208149749e+00 1.40613268064369343335e+01 +3751 18750.00 9.44681224060468309744e+01 6.69441968914951246461e+00 1.49024236351255972011e+01 8.32704221387566612123e+00 1.18261962675762184460e+01 7.05242707113608169323e+00 1.13126701401951983428e+01 9.66587535149331067430e+00 1.40652992561684531125e+01 +3752 18755.00 9.44944049990206025313e+01 6.69580016326568561169e+00 1.49073002923712962797e+01 8.32957169333868030492e+00 1.18294765769239127451e+01 7.05408462819304915570e+00 1.13156104915796866806e+01 9.66887585572756513841e+00 1.40692711682103990256e+01 +3753 18760.00 9.45206875919943456665e+01 6.69718052895263493696e+00 1.49121772640638265983e+01 8.33210076325387127838e+00 1.18327568861679672807e+01 7.05574201105020470948e+00 1.13185509462942643921e+01 9.67187528933979656642e+00 1.40732425425627738491e+01 +3754 18765.00 9.45469701849681030126e+01 6.69856078631399753931e+00 1.49170545505141092235e+01 8.33462942306157472672e+00 1.18360371954120182636e+01 7.05739921972827310981e+00 1.13214915047534940840e+01 9.67487365335605176142e+00 1.40772133792255722540e+01 +3755 18770.00 9.45732527779418745695e+01 6.69994093545341318219e+00 1.49219321518257892478e+01 8.33715767218140513251e+00 1.18393175046560692465e+01 7.05905625427907867930e+00 1.13244321670610208486e+01 9.67787094879201070796e+00 1.40811836785097241886e+01 +3756 18775.00 9.45995353709156319155e+01 6.70132097646416280412e+00 1.49268100679988666712e+01 8.33968551001223978858e+00 1.18425978140037635455e+01 7.06071311471298201923e+00 1.13273729333204826730e+01 9.68086717669445206980e+00 1.40851534402079447972e+01 +3757 18780.00 9.46258179638893892616e+01 6.70270090942915519605e+00 1.49316882993442607841e+01 8.34221293597369140116e+00 1.18458781231441765414e+01 7.06236980106107559152e+00 1.13303138038428006240e+01 9.68386233808941909729e+00 1.40891226647347984624e+01 +3758 18785.00 9.46521005568631608185e+01 6.70408073442094121219e+00 1.49365668460692582187e+01 8.34473994945427932635e+00 1.18491584323882293006e+01 7.06402631333372621469e+00 1.13332547788352613338e+01 9.68685643404441343307e+00 1.40930913519866418682e+01 +3759 18790.00 9.46783831498369039537e+01 6.70546045153279823836e+00 1.49414457081738571986e+01 8.34726654984251581482e+00 1.18524387417359235997e+01 7.06568265156202546251e+00 1.13361958582978630261e+01 9.68984946558548365658e+00 1.40970595020671183306e+01 +3760 18795.00 9.47046657428106755106e+01 6.70684006080618200230e+00 1.49463248859689752379e+01 8.34979273652692555174e+00 1.18557190509799781353e+01 7.06733881574597155861e+00 1.13391370423342436879e+01 9.69284143381122120786e+00 1.41010271151835109293e+01 +3761 18800.00 9.47309483357844328566e+01 6.70821956231364069367e+00 1.49512043796619025215e+01 8.35231850888566107471e+00 1.18589993602240308945e+01 7.06899480589592954516e+00 1.13420783312553297151e+01 9.69583233975803970850e+00 1.41049941914394576514e+01 +3762 18805.00 9.47572309287582044135e+01 6.70959895609663092841e+00 1.49560841894599168000e+01 8.35484386627614661336e+00 1.18622796694680818774e+01 7.07065062201189942215e+00 1.13450197249574813441e+01 9.69882218453489386434e+00 1.41089607310422433528e+01 +3763 18810.00 9.47835135217319617595e+01 6.71097824220697258824e+00 1.49609643154666578369e+01 8.35736880807653648162e+00 1.18655599787121346367e+01 7.07230626410424623174e+00 1.13479612236479745491e+01 9.70181096919892738129e+00 1.41129267340955060206e+01 +3764 18815.00 9.48097961147057191056e+01 6.71235742068612406541e+00 1.49658447580966953439e+01 8.35989333362352837753e+00 1.18688402879561873959e+01 7.07396173214187573564e+00 1.13509028274304579753e+01 9.70479869485909496518e+00 1.41168922007028943000e+01 +3765 18820.00 9.48360787076794906625e+01 6.71373649154444773757e+00 1.49707255174536655318e+01 8.36241744226418326491e+00 1.18721205973038816950e+01 7.07561702614551801815e+00 1.13538445362012865303e+01 9.70778536261399160878e+00 1.41208571310716806124e+01 +3766 18825.00 9.48623613006532337977e+01 6.71511545482340110880e+00 1.49756065939521327834e+01 8.36494113334556210759e+00 1.18754009065479326779e+01 7.07727214608408061736e+00 1.13567863500641017538e+01 9.71077097357257912336e+00 1.41248215254091462612e+01 +3767 18830.00 9.48886438936270053546e+01 6.71649431052298240274e+00 1.49804879876957386386e+01 8.36746440619400111416e+00 1.18786812157919889898e+01 7.07892709193683167257e+00 1.13597282690189036458e+01 9.71375552883344717259e+00 1.41287853839225849839e+01 +3768 18835.00 9.49149264864971229372e+01 6.71787305865355754975e+00 1.49853696989954077168e+01 8.36998726012546789832e+00 1.18819615250360399727e+01 7.08058186369341324706e+00 1.13626702930656886537e+01 9.71673902953665091786e+00 1.41327487067156276623e+01 +3769 18840.00 9.49412090794708802832e+01 6.71925169921512654980e+00 1.49902517281620628609e+01 8.37250969446629511594e+00 1.18852418342800927320e+01 7.08223646132272843801e+00 1.13656124222044656591e+01 9.71972147681187692569e+00 1.41367114940991971395e+01 +3770 18845.00 9.49674916724446518401e+01 6.72063023219732347258e+00 1.49951340756102613483e+01 8.37503170851172384914e+00 1.18885221435241472676e+01 7.08389088478332151766e+00 1.13685546564352240040e+01 9.72270287178881353896e+00 1.41406737462805818240e+01 +3771 18850.00 9.49937742654184091862e+01 6.72200865758978682862e+00 1.50000167415472969168e+01 8.37755330155699873274e+00 1.18918024527682000269e+01 7.08554513405446684260e+00 1.13714969955506912669e+01 9.72568321560750703725e+00 1.41446354633634197029e+01 +3772 18855.00 9.50200568583921665322e+01 6.72338697535105733749e+00 1.50048997261804455405e+01 8.38007447290772056192e+00 1.18950827620122510098e+01 7.08719920908434275475e+00 1.13744394396545018822e+01 9.72866250942874088992e+00 1.41485966457622751591e+01 +3773 18860.00 9.50463394513659380891e+01 6.72476518546040935576e+00 1.50097830301315493529e+01 8.38259522182804062140e+00 1.18983630713599453088e+01 7.08885310983148997366e+00 1.13773819885393763229e+01 9.73164075441329323723e+00 1.41525572935807861796e+01 +3774 18865.00 9.50726220443396954352e+01 6.72614328787638449114e+00 1.50146666535042587753e+01 8.38511554760283495114e+00 1.19016433806039980681e+01 7.09050683625445454794e+00 1.13803246422053145892e+01 9.73461795171157895368e+00 1.41565174071298791603e+01 +3775 18870.00 9.50989046373134527812e+01 6.72752128253679959613e+00 1.50195505968167708488e+01 8.38763544949625305946e+00 1.19049236898480526037e+01 7.09216038829105244190e+00 1.13832674003413920616e+01 9.73759410251546952964e+00 1.41604769867204751677e+01 +3776 18875.00 9.51251872302872101272e+01 6.72889916941056132060e+00 1.50244348603800101927e+01 8.39015492675171437043e+00 1.19082039990921035866e+01 7.09381376587909784348e+00 1.13862102630512520562e+01 9.74056920799610992390e+00 1.41644360324562192943e+01 +3777 18880.00 9.51514698232609816841e+01 6.73027694840439494328e+00 1.50293194446085411897e+01 8.39267397863336661601e+00 1.19114843083361581222e+01 7.09546696896677175914e+00 1.13891532299203319667e+01 9.74354326935573666901e+00 1.41683945448553121338e+01 +3778 18885.00 9.51777524162347390302e+01 6.73165461945611198757e+00 1.50342043499169317755e+01 8.39519260437427128352e+00 1.19147646176838524212e+01 7.09711999747115918069e+00 1.13920963008449849241e+01 9.74651628776548939470e+00 1.41723525241250367657e+01 +3779 18890.00 9.52040350092085105871e+01 6.73303218248280366254e+00 1.50390895766160994640e+01 8.39771080320748097847e+00 1.19180449269279034041e+01 7.09877285134044111459e+00 1.13950394757215729413e+01 9.74948826444833471783e+00 1.41763099705763142566e+01 +3780 18895.00 9.52303176021822537223e+01 6.73440963739118991782e+00 1.50439751253278934939e+01 8.40022857434532532750e+00 1.19213252361719543870e+01 7.10042553047097602104e+00 1.13979827542391767281e+01 9.75245920060650739458e+00 1.41802668845200745551e+01 +3781 18900.00 9.52566001951560110683e+01 6.73578698407763010181e+00 1.50488609963632367084e+01 8.40274591702085871248e+00 1.19246055455196486861e+01 7.10207803480057897616e+00 1.14009261361905078758e+01 9.75542909746297048912e+00 1.41842232662672333987e+01 +3782 18905.00 9.52828827881297826252e+01 6.73716422244885038140e+00 1.50537471901366899374e+01 8.40526283041532096263e+00 1.19278858546600616819e+01 7.10373036422560932834e+00 1.14038696212646488704e+01 9.75839795624069061830e+00 1.41881791161287189595e+01 +3783 18910.00 9.53091653811035541821e+01 6.73854135237011320214e+00 1.50586337071664662091e+01 8.40777931374103459916e+00 1.19311661640077559809e+01 7.10538251867351888791e+00 1.14068132092543130796e+01 9.76136577816263084628e+00 1.41921344345190902914e+01 +3784 18915.00 9.53354479740773115282e+01 6.73991837372741819934e+00 1.50635205479707607878e+01 8.41029536616887796185e+00 1.19344464732518087402e+01 7.10703449801993780710e+00 1.14097568997449378969e+01 9.76433256448284581097e+00 1.41960892218529135533e+01 +3785 18920.00 9.53617305670510688742e+01 6.74129528637566277638e+00 1.50684077130677831491e+01 8.41281098689044881667e+00 1.19377267824958614995e+01 7.10868630219231700806e+00 1.14127006925292437955e+01 9.76729831644503043719e+00 1.42000434784411151412e+01 +3786 18925.00 9.53880131600248120094e+01 6.74267209018011737243e+00 1.50732952028720994520e+01 8.41532617506625157944e+00 1.19410070917399160351e+01 7.11033793105592604178e+00 1.14156445871926646163e+01 9.77026303530323758650e+00 1.42039972045946125689e+01 +3787 18930.00 9.54142957529985835663e+01 6.74404878498531967779e+00 1.50781830180055518298e+01 8.41784092986716281359e+00 1.19442874010876067814e+01 7.11198938451748396972e+00 1.14185885833206377526e+01 9.77322672231152544953e+00 1.42079504007279719957e+01 +3788 18935.00 9.54405783459723409123e+01 6.74542537062544234061e+00 1.50830711588827082181e+01 8.42035525042259536121e+00 1.19475677102280180009e+01 7.11364066244225856650e+00 1.14215326807058765723e+01 9.77618937874467874849e+00 1.42119030674630444366e+01 +3789 18940.00 9.54668609389460982584e+01 6.74680184693466156176e+00 1.50879596262290522901e+01 8.42286913589305896721e+00 1.19508480194720725365e+01 7.11529176472661006869e+00 1.14244768788301822582e+01 9.77915100588784547142e+00 1.42158552049034625497e+01 +3790 18945.00 9.54931435319198840261e+01 6.74817821372642256961e+00 1.50928484204591502049e+01 8.42538258538723816571e+00 1.19541283288197668355e+01 7.11694269122544032058e+00 1.14274211772789868746e+01 9.78211160500544529839e+00 1.42198068137747171136e+01 +3791 18950.00 9.55194261248936413722e+01 6.74955447080380910307e+00 1.50977375421948458722e+01 8.42789559804491617001e+00 1.19574086380638178184e+01 7.11859344180401620861e+00 1.14303655756377278152e+01 9.78507117740335630174e+00 1.42237578942840929841e+01 +3792 18955.00 9.55457087178673845074e+01 6.75093061799062787998e+00 1.51026269920579885309e+01 8.43040817297477573788e+00 1.19606889473078723540e+01 7.12024401633796877320e+00 1.14333100733882009337e+01 9.78802972437709151166e+00 1.42277084469497925312e+01 +3793 18960.00 9.55719913108411560643e+01 6.75230665505887284183e+00 1.51075167706704220905e+01 8.43292030926478020092e+00 1.19639692565519251133e+01 7.12189441467183570467e+00 1.14362546701158382945e+01 9.79098724722216218197e+00 1.42316584722900199012e+01 +3794 18965.00 9.55982739038149134103e+01 6.75368258179089586690e+00 1.51124068786539940135e+01 8.43543200602361586959e+00 1.19672495657959778725e+01 7.12354463666051973547e+00 1.14391993651987977643e+01 9.79394374726517114027e+00 1.42356079708229810166e+01 +3795 18970.00 9.56245564967886707564e+01 6.75505839795868645581e+00 1.51172973166305482096e+01 8.43794326231851066211e+00 1.19705298750400288554e+01 7.12519468213819617830e+00 1.14421441581188734204e+01 9.79689922582236505377e+00 1.42395569429632420366e+01 +3796 18975.00 9.56508390896587883390e+01 6.75643410333423499736e+00 1.51221880852219303648e+01 8.44045407723742791006e+00 1.19738101843877231545e+01 7.12684455094940272346e+00 1.14450890484614991038e+01 9.79985368422034497371e+00 1.42435053892290035549e+01 +3797 18980.00 9.56771216826325598959e+01 6.75780969765843853025e+00 1.51270791851536312578e+01 8.44296444983723048949e+00 1.19770904936317776901e+01 7.12849424292831379546e+00 1.14480340355011911413e+01 9.80280712378571550403e+00 1.42474533101384732703e+01 +3798 18985.00 9.57034042756063314528e+01 6.75918518068255913533e+00 1.51319706171511363380e+01 8.44547437916442511607e+00 1.19803708028758304494e+01 7.13014375790910470698e+00 1.14509791188233851500e+01 9.80575954586581133299e+00 1.42514007062098571055e+01 +3799 18990.00 9.57296868685800887988e+01 6.76056055212676554333e+00 1.51368623818362895150e+01 8.44798386425514813425e+00 1.19836511121198814322e+01 7.13179309570521979822e+00 1.14539242975989488116e+01 9.80871095181833041465e+00 1.42553475779613574304e+01 +3800 18995.00 9.57559694615538319340e+01 6.76193581172159152715e+00 1.51417544799345797912e+01 8.45049290416626597278e+00 1.19869314213639377442e+01 7.13344225613010607390e+00 1.14568695712060382164e+01 9.81166134298023884242e+00 1.42592939259111854966e+01 +3801 19000.00 9.57822520545275892800e+01 6.76331095917684077534e+00 1.51466469121714943924e+01 8.45300149789245836018e+00 1.19902117306079887271e+01 7.13509123899721053874e+00 1.14598149391264509944e+01 9.81461072072996287829e+00 1.42632397507848196483e+01 +3802 19005.00 9.58085346475013608369e+01 6.76468599419195637523e+00 1.51515396793761620842e+01 8.45550964444914221474e+00 1.19934920398520414864e+01 7.13674004410961426714e+00 1.14627604005310566038e+01 9.81755908643556729487e+00 1.42671850531004729135e+01 +3803 19010.00 9.58348172404751181830e+01 6.76606091646638052595e+00 1.51564327821704267762e+01 8.45801734285172202021e+00 1.19967723491997340091e+01 7.13838867128076426383e+00 1.14657059547980075820e+01 9.82050644146510975929e+00 1.42711298333763441093e+01 +3804 19015.00 9.58610998334489039507e+01 6.76743572566845763561e+00 1.51613262214870623268e+01 8.46052459207415630260e+00 1.20000526584437885447e+01 7.14003712027228409909e+00 1.14686516010981787161e+01 9.82345278721774661790e+00 1.42750740922342806982e+01 +3805 19020.00 9.58873824264226612968e+01 6.76881042146654010594e+00 1.51662199981551868433e+01 8.46303139110075974827e+00 1.20033329676878395276e+01 7.14168539089762344219e+00 1.14715973387060845567e+01 9.82639812508226562215e+00 1.42790178302961336954e+01 +3806 19025.00 9.59136650193964044320e+01 6.77018500353934005176e+00 1.51711141127966566700e+01 8.46553773890548910686e+00 1.20066132769318940632e+01 7.14333348292877090557e+00 1.14745431668962307725e+01 9.82934245644745452353e+00 1.42829610481837434577e+01 +3807 19030.00 9.59399476123701617780e+01 6.77155947151374970616e+00 1.51760085664478800993e+01 8.46804363444156749097e+00 1.20098935861759468224e+01 7.14498139614807747932e+00 1.14774890848394957032e+01 9.83228578273319975267e+00 1.42869037466225989874e+01 +3808 19035.00 9.59662302053439333349e+01 6.77293382503738872202e+00 1.51809033597306992647e+01 8.47054907666221801321e+00 1.20131738954199995817e+01 7.14662913030680790882e+00 1.14804350917067488069e+01 9.83522810533865055049e+00 1.42908459262345441942e+01 +3809 19040.00 9.59925127983176906810e+01 6.77430806373714933244e+00 1.51857984937851657747e+01 8.47305406448958287058e+00 1.20164542047676938807e+01 7.14827668517695080652e+00 1.14833811865652197781e+01 9.83816942570442165561e+00 1.42947875876414300933e+01 +3810 19045.00 9.60187953912914480270e+01 6.77568218722956228106e+00 1.51906939692331270919e+01 8.47555859684578827284e+00 1.20197345140117448636e+01 7.14992406050976825327e+00 1.14863273685857869566e+01 9.84110974524002557473e+00 1.42987287315687385814e+01 +3811 19050.00 9.60450779842652195839e+01 6.77705619512078794031e+00 1.51955897871109950614e+01 8.47806267266333435373e+00 1.20230148232558011756e+01 7.15157125605652144174e+00 1.14892736368356747079e+01 9.84404906539644208863e+00 1.43026693586383224499e+01 +3812 19055.00 9.60713605772389911408e+01 6.77843008699626636826e+00 1.52004859483515382124e+01 8.48056629083326285468e+00 1.20262951324998521585e+01 7.15321827156847245277e+00 1.14922199904857560426e+01 9.84698738759354874617e+00 1.43066094696793051355e+01 +3813 19060.00 9.60976431702127342760e+01 6.77980386244142962937e+00 1.52053824538875215211e+01 8.48306945025697700657e+00 1.20295754417439031414e+01 7.15486510677615328291e+00 1.14951664283959775759e+01 9.84992471330305008337e+00 1.43105490654171685350e+01 +3814 19065.00 9.61239257631864916220e+01 6.78117752104171600536e+00 1.52102793046517206221e+01 8.48557214979442697711e+00 1.20328557509879576770e+01 7.15651176141009770504e+00 1.14981129497372158710e+01 9.85286104397591699922e+00 1.43144881464737689925e+01 +3815 19070.00 9.61502083561602631789e+01 6.78255106233074123168e+00 1.52151765015768987155e+01 8.48807438832629124192e+00 1.20361360602320104363e+01 7.15815823520084038023e+00 1.15010595534730626355e+01 9.85579638107349076392e+00 1.43184267136782299445e+01 +3816 19075.00 9.61764909491340205250e+01 6.78392448588357588335e+00 1.52200740456994658700e+01 8.49057616470214959747e+00 1.20394163695797029590e+01 7.15980452784782084308e+00 1.15040062384634609316e+01 9.85873072606747768987e+00 1.43223647678596766042e+01 +3817 19080.00 9.62027735421077778710e+01 6.78529779121310738788e+00 1.52249719379521977203e+01 8.49307747777159249836e+00 1.20426966788237574946e+01 7.16145063908157464283e+00 1.15069530037756386776e+01 9.86166408042957165492e+00 1.43263023097436033026e+01 +3818 19085.00 9.62290561350815494279e+01 6.78667097786331563469e+00 1.52298701795787803093e+01 8.49557832637384002794e+00 1.20459769880678102538e+01 7.16309656860153953772e+00 1.15098998482695566992e+01 9.86459644565220727941e+00 1.43302393400554901604e+01 +3819 19090.00 9.62553387280553067740e+01 6.78804404533672478550e+00 1.52347687713047026392e+01 8.49807870932737863257e+00 1.20492572973118630131e+01 7.16474231609679623745e+00 1.15128467709087960458e+01 9.86752782322781563096e+00 1.43341758597281074827e+01 +3820 19095.00 9.62816213210290641200e+01 6.78941699313585456110e+00 1.52396677144773029511e+01 8.50057862542998066147e+00 1.20525376065559139960e+01 7.16638788126678250023e+00 1.15157937703460273582e+01 9.87045821464882777718e+00 1.43381118695905858118e+01 +3821 19100.00 9.63079039140028356769e+01 6.79078982075286763376e+00 1.52445670099256993524e+01 8.50307807348976929518e+00 1.20558179159036082950e+01 7.16803326379021310544e+00 1.15187408456484750019e+01 9.87338762142840131730e+00 1.43420473703684123734e+01 +3822 19105.00 9.63341865069765930230e+01 6.79216252766955896902e+00 1.52494666589972318604e+01 8.50557705228378146955e+00 1.20590982250440212908e+01 7.16967846334580105605e+00 1.15216879955724547102e+01 9.87631604507969562690e+00 1.43459823629943521439e+01 +3823 19110.00 9.63604690999503503690e+01 6.79353511333662840599e+00 1.52543666627283069914e+01 8.50807556059941560989e+00 1.20623785344953571297e+01 7.17132347961225757871e+00 1.15246352187706300185e+01 9.87924348711586830518e+00 1.43499168482975409944e+01 +3824 19115.00 9.63867516928204679516e+01 6.79490757721514437861e+00 1.52592670221553383669e+01 8.51057359718262418369e+00 1.20656588436357665728e+01 7.17296831223720499082e+00 1.15275825141029493182e+01 9.88216994907080525934e+00 1.43538508273143818883e+01 +3825 19120.00 9.64130342857942252976e+01 6.79627991874544612472e+00 1.52641677385220155827e+01 8.51307116078970338435e+00 1.20689391528798193320e+01 7.17461296088899036505e+00 1.15305298802220796972e+01 9.88509543248876276778e+00 1.43577843007703620515e+01 +3826 19125.00 9.64393168787680110654e+01 6.79765213735750606361e+00 1.52690688129683938001e+01 8.51556825015623886088e+00 1.20722194622275136311e+01 7.17625742521523601880e+00 1.15334773158843333363e+01 9.88801993889325991915e+00 1.43617172697018951055e+01 +3827 19130.00 9.64655994717417542006e+01 6.79902423247093601333e+00 1.52739702468417988257e+01 8.51806486399708084889e+00 1.20754997713679266269e+01 7.17790170485319656279e+00 1.15364248197423702180e+01 9.89094346983891092862e+00 1.43656497350417495795e+01 +3828 19135.00 9.64918820647155115466e+01 6.80039620347425444180e+00 1.52788720411786478337e+01 8.52056100103744640251e+00 1.20787800806119776098e+01 7.17954579944013016046e+00 1.15393723904488574306e+01 9.89386602689069682981e+00 1.43695816976190542391e+01 +3829 19140.00 9.65181646576892831035e+01 6.80176804976634130639e+00 1.52837741972226268672e+01 8.52305665996109240723e+00 1.20820603899596719089e+01 7.18118970860292904490e+00 1.15423200266564691674e+01 9.89678761159286857207e+00 1.43735131585738571403e+01 +3830 19145.00 9.65444472506630404496e+01 6.80313977072535180923e+00 1.52886767163210759435e+01 8.52555183946214434343e+00 1.20853406992037246681e+01 7.18283343196848456103e+00 1.15452677268105841080e+01 9.89970822553113372066e+00 1.43774441187352888250e+01 +3831 19150.00 9.65707298436367977956e+01 6.80451136570871195630e+00 1.52935795998213208691e+01 8.52804653821399583080e+00 1.20886210084477774274e+01 7.18447696915332478795e+00 1.15482154895638675640e+01 9.90262787028083657503e+00 1.43813745792434009019e+01 +3832 19155.00 9.65970124366105693525e+01 6.80588283408421279574e+00 1.52984828488634203580e+01 8.53054075486931218109e+00 1.20919013176918301866e+01 7.18612031974288711922e+00 1.15511633133617106495e+01 9.90554654742768292408e+00 1.43853045410309583474e+01 +3833 19160.00 9.66232950295843124877e+01 6.80725417516782016492e+00 1.53033864647947019932e+01 8.53303448808076403509e+00 1.20951816269358847222e+01 7.18776348335369874576e+00 1.15541111968567751234e+01 9.90846425854701529090e+00 1.43892340051343747831e+01 +3834 19165.00 9.66495776225580840446e+01 6.80862538830659858036e+00 1.53082904490661420027e+01 8.53552773648028839659e+00 1.20984619362835790213e+01 7.18940645957119528475e+00 1.15570591383908070071e+01 9.91138100525563459087e+00 1.43931629725900602779e+01 +3835 19170.00 9.66758602155318413907e+01 6.80999647279578734782e+00 1.53131948029214317586e+01 8.53802049867909396141e+00 1.21017422455276300042e+01 7.19104924798081324155e+00 1.15600071364091903092e+01 9.91429678913925016559e+00 1.43970914445380664404e+01 +3836 19175.00 9.67021428085056129476e+01 6.81136742793063021395e+00 1.53180995278115474889e+01 8.54051277329875802025e+00 1.21050225547716809871e+01 7.19269184815762585572e+00 1.15629551892536710511e+01 9.91721161182502264353e+00 1.44010194220148015631e+01 +3837 19180.00 9.67284254014793702936e+01 6.81273825301673063848e+00 1.53230046251874618690e+01 8.54300455891939769515e+00 1.21083028640157372990e+01 7.19433425966633777193e+00 1.15659032954732694520e+01 9.92012547492975649277e+00 1.44049469060566774914e+01 +3838 19185.00 9.67547079944531276396e+01 6.81410894730787219942e+00 1.53279100962928627183e+01 8.54549585413149337398e+00 1.21115831732597882819e+01 7.19597648206129480997e+00 1.15688514532024537829e+01 9.92303838007024729961e+00 1.44088738979073820445e+01 +3839 19190.00 9.67809905874268707748e+01 6.81547951006820618147e+00 1.53328159427860146735e+01 8.54798665748407238141e+00 1.21148634826074825810e+01 7.19761851491756932120e+00 1.15717996609902478156e+01 9.92595032889438932955e+00 1.44128003986033323969e+01 +3840 19195.00 9.68072731804006423317e+01 6.81684994053078785470e+00 1.53377221660142453175e+01 8.55047696754689035004e+00 1.21181437918515353402e+01 7.19926035775841022257e+00 1.15747479168674711758e+01 9.92886132301897994523e+00 1.44167264093882163678e+01 +3841 19200.00 9.68335557733743996778e+01 6.81822023793903664313e+00 1.53426287675321724180e+01 8.55296678285860423330e+00 1.21214241010955880995e+01 7.20090201012779917988e+00 1.15776962192795078721e+01 9.93177136411264172011e+00 1.44206519312984458026e+01 +3842 19205.00 9.68598383663481712347e+01 6.81959040150528217339e+00 1.53475357487907668741e+01 8.55545610192679006900e+00 1.21247044103396426351e+01 7.20254347155935104041e+00 1.15806445663608208463e+01 9.93468045382326536696e+00 1.44245769656813500603e+01 +3843 19210.00 9.68861209593219427916e+01 6.82096043043148902996e+00 1.53524431114482879934e+01 8.55794492327973976842e+00 1.21279847195836936180e+01 7.20418474156595323166e+00 1.15835929563495145800e+01 9.93758859379874159856e+00 1.44285015135733445391e+01 +3844 19215.00 9.69124035522957001376e+01 6.82233032389889082481e+00 1.53573508568520686879e+01 8.56043324540429750868e+00 1.21312650288277481536e+01 7.20582581966049229294e+00 1.15865413873800484623e+01 9.94049578571805980687e+00 1.44324255763217585979e+01 +3845 19220.00 9.69386861452694716945e+01 6.82370008108872827535e+00 1.53622589868676460156e+01 8.56292106678730569058e+00 1.21345453380717991365e+01 7.20746670536622069392e+00 1.15894898574832421190e+01 9.94340203124983723626e+00 1.44363491551702871618e+01 +3846 19225.00 9.69649687382432148297e+01 6.82506970115114075526e+00 1.53671675028423546649e+01 8.56540838589487307786e+00 1.21378256473158518958e+01 7.20910739815456746982e+00 1.15924383647935602681e+01 9.94630733208342299179e+00 1.44402722513626198264e+01 +3847 19230.00 9.69912513312169721758e+01 6.82643918323627385547e+00 1.53720764065380901542e+01 8.56789520117238723174e+00 1.21411059566635444185e+01 7.21074789752805767051e+00 1.15953869075491073914e+01 9.94921168989779935998e+00 1.44441948660388082004e+01 +3848 19235.00 9.70175339241907295218e+01 6.82780852646317804044e+00 1.53769856996131082383e+01 8.57038151107559720288e+00 1.21443862659076007304e+01 7.21238820295812210759e+00 1.15983354835734164823e+01 9.95211510639268048806e+00 1.44481170006498267355e+01 +3849 19240.00 9.70438165171645152896e+01 6.82917772996126970497e+00 1.53818953837256664485e+01 8.57286731401879542602e+00 1.21476665751516517133e+01 7.21402831392655397025e+00 1.16012840908973124954e+01 9.95501758326777874686e+00 1.44520386565430118964e+01 +3850 19245.00 9.70700991101382726356e+01 6.83054679282887100555e+00 1.53868054605340187635e+01 8.57535260840590751741e+00 1.21509468843957044726e+01 7.21566822989442080427e+00 1.16042327274479735166e+01 9.95791912222280828360e+00 1.44559598348584117389e+01 +3851 19250.00 9.70963817031120299816e+01 6.83191571414357845526e+00 1.53917159318000660306e+01 8.57783739265123124085e+00 1.21542271936397590082e+01 7.21730795031242511328e+00 1.16071813912562209481e+01 9.96081972498857304288e+00 1.44598805371506387019e+01 +3852 19255.00 9.71226642959821475642e+01 6.83328449297262086048e+00 1.53966267992857055447e+01 8.58032166510686877814e+00 1.21575075029874533072e+01 7.21894747462090613510e+00 1.16101300801455948886e+01 9.96371939328551370352e+00 1.44638007646633894865e+01 +3853 19260.00 9.71489468889559191211e+01 6.83465312837286642633e+00 1.54015380647528310476e+01 8.58280542416638780878e+00 1.21607878121278627503e+01 7.22058680227056637335e+00 1.16130787920432698712e+01 9.96661812882370590216e+00 1.44677205188476349917e+01 +3854 19265.00 9.71752294819296622563e+01 6.83602161939081920394e+00 1.54064497299633398342e+01 8.58528866816116931204e+00 1.21640681214755570494e+01 7.22222593269138091188e+00 1.16160275246691515605e+01 9.96951593336504870990e+00 1.44716398011543514457e+01 +3855 19270.00 9.72015120749034196024e+01 6.83738996504188634162e+00 1.54113617967827742916e+01 8.58777139543295398028e+00 1.21673484307196098086e+01 7.22386486529259386202e+00 1.16189762759504127132e+01 9.97241280862997925283e+00 1.44755586128272319968e+01 +3856 19275.00 9.72277946678771911593e+01 6.83875816434147942857e+00 1.54162742670766697017e+01 8.59025360430275952695e+00 1.21706287399636625679e+01 7.22550359949381704183e+00 1.16219250435033139013e+01 9.97530875638040015474e+00 1.44794769555245306236e+01 +3857 19280.00 9.72540772608509627162e+01 6.84012621627391936840e+00 1.54211871426069233593e+01 8.59273529307087358120e+00 1.21739090492077153272e+01 7.22714213468356803105e+00 1.16248738250477501310e+01 9.97820377836784011549e+00 1.44833948305935820144e+01 +3858 19285.00 9.72803598538247200622e+01 6.84149411982351995931e+00 1.54261004253427138622e+01 8.59521646002721517732e+00 1.21771893584517698628e+01 7.22878047028145775954e+00 1.16278226184072668303e+01 9.98109787635419820617e+00 1.44873122395890003844e+01 +3859 19290.00 9.73066424467984774083e+01 6.84286187394350964297e+00 1.54310141172532215847e+01 8.59769710345134896556e+00 1.21804696677994641618e+01 7.23041860564491045693e+00 1.16307714210944688205e+01 9.98399105211173676366e+00 1.44912291838581204217e+01 +3860 19295.00 9.73329250397722205435e+01 6.84422947758711242017e+00 1.54359282202039853615e+01 8.60017722159173914065e+00 1.21837499770435151447e+01 7.23205654017281052148e+00 1.16337202307256220024e+01 9.98688330741271634849e+00 1.44951456651628340921e+01 +3861 19300.00 9.73592076327459921004e+01 6.84559692968682664826e+00 1.54408427362678235539e+01 8.60265681269685167365e+00 1.21870302861839281405e+01 7.23369427322258218283e+00 1.16366690450206178298e+01 9.98977464405012405280e+00 1.44990616849541211764e+01 +3862 19305.00 9.73854902257197494464e+01 6.84696422914405999904e+00 1.54457576673102749965e+01 8.60513587498406451459e+00 1.21903105956352604267e+01 7.23533180414128640479e+00 1.16396178613884373476e+01 9.99266506380658725561e+00 1.45029772447865958895e+01 +3863 19310.00 9.74117728186935067924e+01 6.84833137487057808102e+00 1.54506730154041633796e+01 8.60761440667074850808e+00 1.21935909047756734225e+01 7.23696913229671423551e+00 1.16425666774453322461e+01 9.99555456847509837814e+00 1.45068923462148742232e+01 +3864 19315.00 9.74380554116672925602e+01 6.84969836572633106186e+00 1.54555887827259450518e+01 8.61009240594318825401e+00 1.21968712140197261817e+01 7.23860625700483684142e+00 1.16455154904966367013e+01 9.99844315985900777832e+00 1.45108069908972083795e+01 +3865 19320.00 9.74643380046410499062e+01 6.85106520059199741723e+00 1.54605049711411588476e+01 8.61256987099803161811e+00 1.22001515232637771646e+01 7.24024317762307578761e+00 1.16484642981586095090e+01 1.00013308397720308562e+01 1.45147211803882179026e+01 +3866 19325.00 9.74906205976147930414e+01 6.85243187830679545414e+00 1.54654215829299079843e+01 8.61504679996973798950e+00 1.22034318326114714637e+01 7.24187989344667393254e+00 1.16514130977365812925e+01 1.00042176100382533832e+01 1.45186349164497965347e+01 +3867 19330.00 9.75169031905885503875e+01 6.85379839769958287832e+00 1.54703386201650161524e+01 8.61752319102385833105e+00 1.22067121418555277756e+01 7.24351640381233075061e+00 1.16543618865358915571e+01 1.00071034724713925357e+01 1.45225482007402035833e+01 +3868 19335.00 9.75431857835623219444e+01 6.85516475758885324154e+00 1.54752560849192999370e+01 8.61999904227413260571e+00 1.22099924510995787585e+01 7.24515270799455635142e+00 1.16573106618618673735e+01 1.00099884288955287559e+01 1.45264610348140514873e+01 +3869 19340.00 9.75694683765360792904e+01 6.85653095677237001127e+00 1.54801739794728607791e+01 8.62247435184465338409e+00 1.22132727604472730576e+01 7.24678880529895774742e+00 1.16602594211234880106e+01 1.00128724811658358362e+01 1.45303734205368808574e+01 +3870 19345.00 9.75957509695098508473e+01 6.85789699402716834697e+00 1.54850923061058018959e+01 8.62494911782843054482e+00 1.22165530695876842771e+01 7.24842469500004682459e+00 1.16632081615224425519e+01 1.00157556311063977716e+01 1.45342853595669456723e+01 +3871 19350.00 9.76220335624836081934e+01 6.85926286811992103054e+00 1.54900110668909434253e+01 8.62742333829773855314e+00 1.22198333789353785761e+01 7.25006037638270139922e+00 1.16661568802604289630e+01 1.00186378805827516203e+01 1.45381968537697847665e+01 +3872 19355.00 9.76483161554573655394e+01 6.86062857779657075952e+00 1.54949302642120336770e+01 8.62989701131449038485e+00 1.22231136880757897956e+01 7.25169584870070416116e+00 1.16691055744354930113e+01 1.00215192314397079087e+01 1.45421079048036556713e+01 +3873 19360.00 9.76745987484311228854e+01 6.86199412177197132223e+00 1.54998499002455254470e+01 8.63237013493023397359e+00 1.22263939974234840946e+01 7.25333111120784135295e+00 1.16720542412493308859e+01 1.00243996855428036952e+01 1.45460185144304556815e+01 +3874 19365.00 9.77008813414048944423e+01 6.86335949876097117794e+00 1.55047699774788068083e+01 8.63484270716542745561e+00 1.22296743066675368539e+01 7.25496616315790010532e+00 1.16750028777999919072e+01 1.00272792447679428562e+01 1.45499286846193616185e+01 +3875 19370.00 9.77271639343786517884e+01 6.86472470746805996100e+00 1.55096904982956225183e+01 8.63731472603016570133e+00 1.22329546159115896131e+01 7.25660100376320471582e+00 1.16779514810818874082e+01 1.00301579109806606738e+01 1.45538384171322743299e+01 +3876 19375.00 9.77534465273524091344e+01 6.86608974655626802530e+00 1.55146114648724324780e+01 8.63978618951380816782e+00 1.22362349252592839122e+01 7.25823563225681400723e+00 1.16809000480894287222e+01 1.00330356860775911088e+01 1.45577477139383688609e+01 +3877 19380.00 9.77797291203261806913e+01 6.86745461468862572474e+00 1.55195328796966212082e+01 8.64225709560572497026e+00 1.22395152343996969080e+01 7.25987004785105494165e+00 1.16838485758170271822e+01 1.00359125719346344852e+01 1.45616565766959027428e+01 +3878 19385.00 9.78060117132999238265e+01 6.86881931049707272763e+00 1.55244547452555732292e+01 8.64472744225381717342e+00 1.22427955437473894307e+01 7.26150424974789299171e+00 1.16867970612590923452e+01 1.00387885704484229876e+01 1.45655650075813412059e+01 +3879 19390.00 9.78322943062736953834e+01 6.87018383260318099559e+00 1.55293770639330279693e+01 8.64719722739563678715e+00 1.22460758529914421899e+01 7.26313823713892681155e+00 1.16897455012027524646e+01 1.00416636835363135560e+01 1.45694730083565726630e+01 +3880 19395.00 9.78585768991438129660e+01 6.87154817961816544170e+00 1.55342998384236601339e+01 8.64966644895835479190e+00 1.22493561622354931728e+01 7.26477200921575860804e+00 1.16926938925387808865e+01 1.00445379130949365987e+01 1.45733805809907863704e+01 +3881 19400.00 9.78848594921175703121e+01 6.87291235011177636949e+00 1.55392230710075658351e+01 8.65213510483806480522e+00 1.22526364714795477084e+01 7.26640556512853041937e+00 1.16956422321579402990e+01 1.00474112610520194266e+01 1.45772877275567971367e+01 +3882 19405.00 9.79111420850913418690e+01 6.87427634266413356556e+00 1.55441467644830524364e+01 8.65460319293085333925e+00 1.22559167807236004677e+01 7.26803890405847763390e+00 1.16985905166400829813e+01 1.00502837293041853428e+01 1.45811944501274250996e+01 +3883 19410.00 9.79374246780650992150e+01 6.87564015581389753606e+00 1.55490709212338646950e+01 8.65707071110171533235e+00 1.22591970900712929904e+01 7.26967202514538168856e+00 1.17015387428759751742e+01 1.00531553198102532320e+01 1.45851007504645693302e+01 +3884 19415.00 9.79637072710388565611e+01 6.87700378808936729769e+00 1.55539955439546702110e+01 8.65953765719491208586e+00 1.22624773977607315345e+01 7.27130492752902135578e+00 1.17044869074454673807e+01 1.00560260344875818106e+01 1.45890066308483330459e+01 +3885 19420.00 9.79899898640126281180e+01 6.87836723800847504862e+00 1.55589206353401330318e+01 8.66200402904435584617e+00 1.22657577085594002853e+01 7.27293761034917629615e+00 1.17074350070320409856e+01 1.00588958752742598790e+01 1.45929120932478930683e+01 +3886 19425.00 9.80162724569863854640e+01 6.87973050404769903565e+00 1.55638461979812792180e+01 8.66446982447358138302e+00 1.22690380178034512682e+01 7.27457007270417044253e+00 1.17103830382155482681e+01 1.00617648441290992167e+01 1.45968171398397057459e+01 +3887 19430.00 9.80425550499601428101e+01 6.88109358468351661742e+00 1.55687722346764161330e+01 8.66693504126466685022e+00 1.22723183270475040274e+01 7.27620231372341752518e+00 1.17133309975758344024e+01 1.00646329430109169323e+01 1.46007217726966054272e+01 +3888 19435.00 9.80688376429339001561e+01 6.88245647837167506822e+00 1.55736987481202096006e+01 8.66939967718933779395e+00 1.22755986362915585630e+01 7.27783433248451405717e+00 1.17162788815891065752e+01 1.00675001738681615393e+01 1.46046259939950395790e+01 +3889 19440.00 9.80951202359076717130e+01 6.88381918353683186496e+00 1.55786257411109669846e+01 8.67186373001930732585e+00 1.22788789456392528621e+01 7.27946612808578130682e+00 1.17192266867315648682e+01 1.00703665386700151885e+01 1.46085298058078336680e+01 +3890 19445.00 9.81214028288814290590e+01 6.88518169860364448454e+00 1.55835532164470009775e+01 8.67432719748483904709e+00 1.22821592548833056213e+01 7.28109769960481578721e+00 1.17221744094794217972e+01 1.00732320393960215199e+01 1.46124332105187324515e+01 +3891 19450.00 9.81476854218551864051e+01 6.88654402194494874578e+00 1.55884811769266065085e+01 8.67679007730583151670e+00 1.22854395641273566042e+01 7.28272904608812154947e+00 1.17251220462052359039e+01 1.00760966780257223974e+01 1.46163362102005560672e+01 +3892 19455.00 9.81739680148289579620e+01 6.88790615195430522277e+00 1.55934096255553846788e+01 8.67925236718145143300e+00 1.22887198733714129162e+01 7.28436016660292739999e+00 1.17280695930742915323e+01 1.00789604565386579083e+01 1.46202388071334024033e+01 +3893 19460.00 9.82002506078027010972e+01 6.88926808698382853180e+00 1.55983385650279977597e+01 8.68171406479014073909e+00 1.22920001826154638991e+01 7.28599106018537234775e+00 1.17310170466664374089e+01 1.00818233769351071061e+01 1.46241410037010197698e+01 +3894 19465.00 9.82265332007764726541e+01 6.89062982535452928090e+00 1.56032679983500344179e+01 8.68417516778961662283e+00 1.22952804919631581981e+01 7.28762172586123035956e+00 1.17339644029396730218e+01 1.00846854412153348335e+01 1.46280428020798680677e+01 +3895 19470.00 9.82528157937502442110e+01 6.89199136538742518354e+00 1.56081979286307266364e+01 8.68663567383758916662e+00 1.22985608011035694176e+01 7.28925216265627629042e+00 1.17369116582665622417e+01 1.00875466513692515491e+01 1.46319442045500469618e+01 +3896 19475.00 9.82790983867240015570e+01 6.89335270538280298069e+00 1.56131283586683764497e+01 8.68909558053994857119e+00 1.23018411103476221768e+01 7.29088236957555935192e+00 1.17398588088123876361e+01 1.00904070094385858170e+01 1.46358452135989445253e+01 +3897 19480.00 9.83053809796977589031e+01 6.89471384359949279741e+00 1.56180592916758644861e+01 8.69155488551295540844e+00 1.23051214195916749361e+01 7.29251234560339156587e+00 1.17428058506387920090e+01 1.00932665174132427666e+01 1.46397458315066621992e+01 +3898 19485.00 9.83316635726715304600e+01 6.89607477829632831146e+00 1.56229907305551307672e+01 8.69401358632104326318e+00 1.23084017289393692351e+01 7.29414208974482392023e+00 1.17457527798074146119e+01 1.00961251773349545147e+01 1.46436460606569376353e+01 +3899 19490.00 9.83579461656452735951e+01 6.89743550770104540959e+00 1.56279226785190523685e+01 8.69647168053901431506e+00 1.23116820381834219944e+01 7.29577160095308308030e+00 1.17486995923798964725e+01 1.00989829912247142119e+01 1.46475459035371624594e+01 +3900 19495.00 9.83842287586190309412e+01 6.89879603003101937730e+00 1.56328551386768541676e+01 8.69892916571057739361e+00 1.23149623474274747537e+01 7.29740087819175364814e+00 1.17516462843142441841e+01 1.01018399611242539748e+01 1.46514453626347194160e+01 +3901 19500.00 9.84105113515927882872e+01 6.90015634347253303815e+00 1.56377881141377734764e+01 8.70138603935870946771e+00 1.23182426566715257366e+01 7.29902992041406672996e+00 1.17545928514648103658e+01 1.01046960890753041440e+01 1.46553444403333479329e+01 +3902 19505.00 9.84367939445665740550e+01 6.90151644620150417353e+00 1.56427216082183164758e+01 8.70384229897530126152e+00 1.23215229660192200356e+01 7.30065872656288039622e+00 1.17575392897895980582e+01 1.01075513771299512200e+01 1.46592431392240793997e+01 +3903 19510.00 9.84630765375403314010e+01 6.90287633634203245947e+00 1.56476556240277169252e+01 8.70629794205223639381e+00 1.23248032752632710185e+01 7.30228729554996558448e+00 1.17604855951429652094e+01 1.01104058273402923618e+01 1.46631414617942947842e+01 +3904 19515.00 9.84893591305140887471e+01 6.90423601204930381670e+00 1.56525901648824881107e+01 8.70875296603994897282e+00 1.23280835845073273305e+01 7.30391562629745560997e+00 1.17634317631719955699e+01 1.01132594417791423780e+01 1.46670394105313768307e+01 +3905 19520.00 9.85156417234878318823e+01 6.90559547141632634748e+00 1.56575252342027759767e+01 8.71120736838886777775e+00 1.23313638938550216295e+01 7.30554371769639221412e+00 1.17663777898346815221e+01 1.01161122225089616933e+01 1.46709369882336346791e+01 +3906 19525.00 9.85419243164616034392e+01 6.90695471251537806978e+00 1.56624608350978213878e+01 8.71366114651833534310e+00 1.23346442029954310726e+01 7.30717156863781447385e+00 1.17693236705708219603e+01 1.01189641715922036269e+01 1.46748341972848095338e+01 +3907 19530.00 9.85682069094353607852e+01 6.90831373342909671464e+00 1.56673969711950515915e+01 8.71611429781659374783e+00 1.23379245122394856082e+01 7.30879917800240086478e+00 1.17722694012347783854e+01 1.01218152911327852195e+01 1.46787310404832158639e+01 +3908 19535.00 9.85944895023054783678e+01 6.90967253217794308284e+00 1.56723336457073436634e+01 8.71856681967189217630e+00 1.23412048214835383675e+01 7.31042654463973828882e+00 1.17752149772663408100e+01 1.01246655832035230560e+01 1.46826275204198690716e+01 +3909 19540.00 9.86207720952792499247e+01 6.91103110678237175790e+00 1.56772708622621301799e+01 8.72101870944138468644e+00 1.23444851308312326665e+01 7.31205366742013573855e+00 1.17781603943125947609e+01 1.01275150498979655822e+01 1.46865236397894420861e+01 +3910 19545.00 9.86470546882530214816e+01 6.91238945525247405754e+00 1.56822086241759244274e+01 8.72346996445113020968e+00 1.23477654400752836494e+01 7.31368054518281685006e+00 1.17811056478133302505e+01 1.01303636933200245096e+01 1.46904194012865989549e+01 +3911 19550.00 9.86733372812267788277e+01 6.91374757554652408231e+00 1.56871469349725192188e+01 8.72592058201683329344e+00 1.23510457493193364087e+01 7.31530717672554509079e+00 1.17840507332083426206e+01 1.01332115155632500603e+01 1.46943148078132868051e+01 +3912 19555.00 9.86996198742005361737e+01 6.91510546561243089059e+00 1.56920857983829922233e+01 8.72837055944381923211e+00 1.23543260585633891679e+01 7.31693356089790469809e+00 1.17869956459374254365e+01 1.01360585187626490722e+01 1.46982098620641750131e+01 +3913 19560.00 9.87259024671742793089e+01 6.91646312339809821168e+00 1.56970252179311380303e+01 8.73081989398560764926e+00 1.23576063679110834670e+01 7.31855969646656667749e+00 1.17899403812330998420e+01 1.01389047050117682147e+01 1.47021045667339294027e+01 +3914 19565.00 9.87521850601480508658e+01 6.91782054678925195645e+00 1.57019651971407512292e+01 8.73326858289570928662e+00 1.23608866770514964628e+01 7.32018558225002546891e+00 1.17928849345351540734e+01 1.01417500764559740389e+01 1.47059989248281386409e+01 +3915 19570.00 9.87784676531218082118e+01 6.91917773367161714759e+00 1.57069057397429077128e+01 8.73571662339654331220e+00 1.23641669862955474457e+01 7.32181121699422288174e+00 1.17958293010761021691e+01 1.01445946352095468512e+01 1.47098929392487480783e+01 +3916 19575.00 9.88047502460955797687e+01 6.92053468191018605893e+00 1.57118468494686815973e+01 8.73816401271053244670e+00 1.23674472955396002050e+01 7.32343659948656089398e+00 1.17987734758811804170e+01 1.01474383834074881605e+01 1.47137866126904253150e+01 +3917 19580.00 9.88310328390693513256e+01 6.92189138933886294325e+00 1.57167885300491558809e+01 8.74061074800827952913e+00 1.23707276048872945040e+01 7.32506172845225567158e+00 1.18017174542865390663e+01 1.01502813232055348891e+01 1.47176799481587643470e+01 +3918 19585.00 9.88573154320431086717e+01 6.92324785377082285720e+00 1.57217307853190426670e+01 8.74305682645001347453e+00 1.23740079141313490396e+01 7.32668660264761317791e+00 1.18046612312137710887e+01 1.01531234567490500353e+01 1.47215729487629918282e+01 +3919 19590.00 9.88835980250168518069e+01 6.92460407299851077312e+00 1.57266736190094196246e+01 8.74550224516488761139e+00 1.23772882233754000225e+01 7.32831122077712127094e+00 1.18076048017917454303e+01 1.01559647861834090321e+01 1.47254656171977735823e+01 +3920 19595.00 9.89098806179906233638e+01 6.92596004478328097775e+00 1.57316170349550024099e+01 8.74794700129240254682e+00 1.23805685326194527818e+01 7.32993558156599434028e+00 1.18105481610456948260e+01 1.01588053136747049621e+01 1.47293579567796246721e+01 +3921 19600.00 9.89361632109643807098e+01 6.92731576687612449206e+00 1.57365610371977950876e+01 8.75039109189952135637e+00 1.23838488419671470808e+01 7.33155968369799371231e+00 1.18134913037935707081e+01 1.01616450413890380133e+01 1.47332499704104904481e+01 +3922 19605.00 9.89624458039381380559e+01 6.92867123697621067890e+00 1.57415056295725115376e+01 8.75283451407393187083e+00 1.23871291512111998401e+01 7.33318352585687716072e+00 1.18164342249569624954e+01 1.01644839715028663107e+01 1.47371416610959595772e+01 +3923 19610.00 9.89887283969119096128e+01 6.93002645279307216697e+00 1.57464508161211504955e+01 8.75527726485149848656e+00 1.23904094604552525993e+01 7.33480710671604096973e+00 1.18193769193538180673e+01 1.01673221061822900424e+01 1.47410330320489109113e+01 +3924 19615.00 9.90150109898856811697e+01 6.93138141199478852172e+00 1.57513966007820727100e+01 8.75771934126808737631e+00 1.23936897696993053586e+01 7.33643042491778540892e+00 1.18223193818020888557e+01 1.01701594476244956411e+01 1.47449240863785639988e+01 +3925 19620.00 9.90412935828594243048e+01 6.93273611222870655979e+00 1.57563429875972786931e+01 8.76016074031811520229e+00 1.23969700789433598942e+01 7.33805347912514527309e+00 1.18252616070160812001e+01 1.01729959980059465607e+01 1.47488148272977976916e+01 +3926 19625.00 9.90675761758331816509e+01 6.93409055112144656619e+00 1.57612899808160467074e+01 8.76260145897525966063e+00 1.24002503881874108771e+01 7.33967626794932748169e+00 1.18282035895028236894e+01 1.01758317595341960526e+01 1.47527052579158404200e+01 +3927 19630.00 9.90938587688069532078e+01 6.93544472624781160874e+00 1.57662375843767375017e+01 8.76504149419247546859e+00 1.24035306975351051761e+01 7.34129879000154339508e+00 1.18311453240802624265e+01 1.01786667344167955918e+01 1.47565953814455621540e+01 +3928 19635.00 9.91201413617807105538e+01 6.93679863520332862237e+00 1.57711858025286311147e+01 8.76748084291235230125e+00 1.24068110066755181720e+01 7.34292104389300526179e+00 1.18340868052554277767e+01 1.01815009248405736741e+01 1.47604852013071194961e+01 +3929 19640.00 9.91464239547544678999e+01 6.93815227553170377206e+00 1.57761346396246509016e+01 8.76991950203602677050e+00 1.24100913160232124710e+01 7.34454302820382842754e+00 1.18370280274317032365e+01 1.01843343330441751249e+01 1.47643747206097408764e+01 +3930 19645.00 9.91727065477282394568e+01 6.93950564474555520178e+00 1.57810840997067991509e+01 8.77235746844390185117e+00 1.24133716252672634539e+01 7.34616474149340525912e+00 1.18399689850124723023e+01 1.01871669612247881531e+01 1.47682639427735793447e+01 +3931 19650.00 9.91989891407020110137e+01 6.94085874034713601333e+00 1.57860341872316336520e+01 8.77479473898529072073e+00 1.24166519345113162132e+01 7.34778618234185110225e+00 1.18429096726084051028e+01 1.01899988116314226261e+01 1.47721528711151464108e+01 +3932 19655.00 9.92252717336757541489e+01 6.94221155980759974113e+00 1.57909849065520813127e+01 8.77723131051987337514e+00 1.24199322437553707488e+01 7.34940734927746586180e+00 1.18458500843119640678e+01 1.01928298864716335714e+01 1.47760415090545951244e+01 +3933 19660.00 9.92515543266495114949e+01 6.94356410057738315800e+00 1.57959362619174186193e+01 8.77966717983477451526e+00 1.24232125531030632715e+01 7.35102824081818262414e+00 1.18487902145265326936e+01 1.01956601879944326328e+01 1.47799298600120838643e+01 +3934 19665.00 9.92778369196232830518e+01 6.94491636007582346934e+00 1.58008882577842175721e+01 8.78210234372748921317e+00 1.24264928623471160307e+01 7.35264885550266367176e+00 1.18517300573445698575e+01 1.01984897184488261246e+01 1.47838179274077603509e+01 +3935 19670.00 9.93041195125970403978e+01 6.94626833569116541867e+00 1.58058408987126757239e+01 8.78453679896441741448e+00 1.24297731715911687900e+01 7.35426919181774874090e+00 1.18546696071694714902e+01 1.02013184800734606483e+01 1.47877057146617829630e+01 +3936 19675.00 9.93304021055708119547e+01 6.94762002480129403637e+00 1.58107941891593561934e+01 8.78697054227050422526e+00 1.24330534808352215492e+01 7.35588924823991607838e+00 1.18576088577827647441e+01 1.02041464751173478476e+01 1.47915932255052222644e+01 +3937 19680.00 9.93566846984409153265e+01 6.94897142474263240786e+00 1.58157481335808256517e+01 8.78940357036032793303e+00 1.24363337900792743085e+01 7.35750902325600719678e+00 1.18605478034842040103e+01 1.02069737058605873870e+01 1.47954804632545968701e+01 +3938 19685.00 9.93829672914147010943e+01 6.95032253283088152784e+00 1.58207027368482133767e+01 8.79183587992774207009e+00 1.24396140993233270677e+01 7.35912851530104017428e+00 1.18634864381589633098e+01 1.02098001745625577286e+01 1.47993674316409791203e+01 +3939 19690.00 9.94092498843884584403e+01 6.95167334636100786582e+00 1.58256580033144373942e+01 8.79426746763550148955e+00 1.24428944085673798270e+01 7.36074772283076761425e+00 1.18664247556922219928e+01 1.02126258834826284527e+01 1.48032541342918051441e+01 +3940 19695.00 9.94355324773622015755e+01 6.95302386259689164660e+00 1.58306139377469872187e+01 8.79669833011528012889e+00 1.24461747178114325862e+01 7.36236664426984344090e+00 1.18693627499691665150e+01 1.02154508349112678189e+01 1.48071405747308695311e+01 +3941 19700.00 9.94618150703359589215e+01 6.95437407877131530398e+00 1.58355705450169921278e+01 8.79912846397801118314e+00 1.24494550271591268853e+01 7.36398527802219771132e+00 1.18723004148749708975e+01 1.02182750311285772682e+01 1.48110267566892481739e+01 +3942 19705.00 9.94880976633097304784e+01 6.95572399209633562833e+00 1.58405278296846496744e+01 8.80155786582427168696e+00 1.24527353364031778682e+01 7.36560362248139366415e+00 1.18752377440875385162e+01 1.02210984744250250600e+01 1.48149126840016620577e+01 +3943 19710.00 9.95143802562834878245e+01 6.95707359975291872445e+00 1.58454857967247377815e+01 8.80398653219245197477e+00 1.24560156456472306274e+01 7.36722167603063216035e+00 1.18781747311811223256e+01 1.02239211670807126353e+01 1.48187983601919004428e+01 +3944 19715.00 9.95406628492572451705e+01 6.95842289890130150098e+00 1.58504444510083750686e+01 8.80641445964167068894e+00 1.24592959548912851631e+01 7.36883943702202071080e+00 1.18811113700409070049e+01 1.02267431114171980511e+01 1.48226837893019656178e+01 +3945 19720.00 9.95669454422310167274e+01 6.95977188667062485194e+00 1.58554037973030528264e+01 8.80884164465849828218e+00 1.24625762642389794621e+01 7.37045690382839424615e+00 1.18840476540338624289e+01 1.02295643097353092799e+01 1.48265689749592954882e+01 +3946 19725.00 9.95932280352047740735e+01 6.96112056015894342664e+00 1.58603638405835400960e+01 8.81126808373986314393e+00 1.24658565734830322214e+01 7.37207407477077136804e+00 1.18869835767342504340e+01 1.02323847643462464418e+01 1.48304539211022419209e+01 +3947 19730.00 9.96195106281785314195e+01 6.96246891643321497156e+00 1.58653245859282439056e+01 8.81369377334125125856e+00 1.24691368827270832043e+01 7.37369094815980119506e+00 1.18899191316126842111e+01 1.02352044775508392860e+01 1.48343386316691692173e+01 +3948 19735.00 9.96457932211523029764e+01 6.96381695255003396738e+00 1.58702860384155748363e+01 8.81611870989740609161e+00 1.24724171919711377399e+01 7.37530752230613639853e+00 1.18928543120361407404e+01 1.02380234516913688481e+01 1.48382231104947930334e+01 +3949 19740.00 9.96720758141260603225e+01 6.96516466552454183159e+00 1.58752482030203037056e+01 8.81854288980161982181e+00 1.24756975013188320389e+01 7.37692379548933541145e+00 1.18957891111643121462e+01 1.02408416890997635562e+01 1.48421073616211103285e+01 +3950 19745.00 9.96983584070998176685e+01 6.96651205233041981302e+00 1.58802110849244826341e+01 8.82096630943682491477e+00 1.24789778104592432584e+01 7.37853976597859428921e+00 1.18987235224678151724e+01 1.02436591920872164252e+01 1.48459913889864836278e+01 +3951 19750.00 9.97246410000735892254e+01 6.96785910995171331450e+00 1.58851746894137946242e+01 8.82338896515485515692e+00 1.24822581197032960176e+01 7.38015543204310553449e+00 1.19016575391063437195e+01 1.02464759630167403515e+01 1.48498751966329116669e+01 +3952 19755.00 9.97509235930473323606e+01 6.96920583531028547952e+00 1.58901390214630175990e+01 8.82581085328681957947e+00 1.24855384290509903167e+01 7.38177079190024709732e+00 1.19045911541359483721e+01 1.02492920042098969446e+01 1.48537587886023896289e+01 +3953 19760.00 9.97772061860210897066e+01 6.97055222530726936725e+00 1.58951040866687591802e+01 8.82823197011200555551e+00 1.24888187382950412996e+01 7.38338584378811990661e+00 1.19075243606126850437e+01 1.02521073180400659197e+01 1.48576421691442046580e+01 +3954 19765.00 9.98034887789948612635e+01 6.97189827682307061707e+00 1.59000698901094335014e+01 8.83065231192006372396e+00 1.24920990475390940588e+01 7.38500058590337093989e+00 1.19104571516962387534e+01 1.02549219068495300888e+01 1.48615253421967121739e+01 +3955 19770.00 9.98297713719686328204e+01 6.97324398669663914063e+00 1.59050364372780137501e+01 8.83307187493846157622e+00 1.24953793567831485944e+01 7.38661501644264628652e+00 1.19133895201317461243e+01 1.02577357730116727197e+01 1.48654083121128355316e+01 +3956 19775.00 9.98560539649423901665e+01 6.97458935175655891925e+00 1.59100037335638297975e+01 8.83549065539467015640e+00 1.24986596660272013537e+01 7.38822913357149957392e+00 1.19163214588716162012e+01 1.02605489188791416666e+01 1.48692910829345734669e+01 +3957 19780.00 9.98823365579161475125e+01 6.97593436877959582887e+00 1.59149717844598583838e+01 8.83790864947469501089e+00 1.25019399752712523366e+01 7.38984293544512294005e+00 1.19192529606609785020e+01 1.02633613468253201972e+01 1.48731736591184908747e+01 +3958 19785.00 9.99086191508898906477e+01 6.97727903452178477295e+00 1.59199405954590709200e+01 8.84032585332309217563e+00 1.25052202846189466356e+01 7.39145642020833815167e+00 1.19221840184522438477e+01 1.02661730592443110055e+01 1.48770560448102262541e+01 +3959 19790.00 9.99349017438636622046e+01 6.97862334572879827732e+00 1.59249101721580839097e+01 8.84274226309478272867e+00 1.25085005937593596315e+01 7.39306958597488339535e+00 1.19251146246796189132e+01 1.02689840584991323169e+01 1.48809382443627047365e+01 +3960 19795.00 9.99611843368374195506e+01 6.97996729907375978996e+00 1.59298805200498723167e+01 8.84515787488249571879e+00 1.25117809031070539305e+01 7.39468243086885390625e+00 1.19280447720882314400e+01 1.02717943469942554202e+01 1.48848202622324876643e+01 +3961 19800.00 9.99874669298112053184e+01 6.98131089125052106681e+00 1.59348516450419683821e+01 8.84757268475824076859e+00 1.25150612123511049134e+01 7.39629495296252681413e+00 1.19309744531122863265e+01 1.02746039271134215198e+01 1.48887021027725001687e+01 +3962 19805.00 1.00013749522784962664e+02 6.98265411888038567412e+00 1.59398235526273506224e+01 8.84998709235139635609e+00 1.25183415216987992125e+01 7.39790715033854251459e+00 1.19339036603932751035e+01 1.02774128012611036809e+01 1.48925837703356620523e+01 +3963 19810.00 1.00040032115758720010e+02 6.98399697858465717815e+00 1.59447962487135548315e+01 8.85240149998600855952e+00 1.25216218308392122083e+01 7.39951902103808922817e+00 1.19368323862617611297e+01 1.02802209718417731921e+01 1.48964652694821779733e+01 +3964 19815.00 1.00066314708732491567e+02 6.98533946693281659890e+00 1.59497697390008372764e+01 8.85481590758952741282e+00 1.25249021400832649675e+01 7.40113056311271222398e+00 1.19397606230483095402e+01 1.02830284412599013422e+01 1.49003466046686110502e+01 +3965 19820.00 1.00092597301602594939e+02 6.98668158046325427080e+00 1.59547440295003770672e+01 8.85723031518268122397e+00 1.25281824494309592666e+01 7.40274177458287052644e+00 1.19426883629798457065e+01 1.02858352119406877279e+01 1.49042277806624507974e+01 +3966 19825.00 1.00118879894576338074e+02 6.98802331570399726246e+00 1.59597191260160684578e+01 8.85964472281729520375e+00 1.25314627586750120258e+01 7.40435265343792803350e+00 1.19456155983869294346e+01 1.02886412862989686801e+01 1.49081088018166187936e+01 +3967 19830.00 1.00145162487550109631e+02 6.98936466914161425024e+00 1.59646950345590941112e+01 8.86205913038972248330e+00 1.25347430679190630087e+01 7.40596319767761190889e+00 1.19485423212892118983e+01 1.02914466667495787533e+01 1.49119896727949576842e+01 +3968 19835.00 1.00171445080523866977e+02 6.99070563723158322489e+00 1.59696717612442711243e+01 8.86447353802433291037e+00 1.25380233770594760045e+01 7.40757340526019536497e+00 1.19514685238099680475e+01 1.02942513557488108944e+01 1.49158703984686002997e+01 +3969 19840.00 1.00197727673497638534e+02 6.99204621637756051911e+00 1.59746493119791388438e+01 8.86688794561748672152e+00 1.25413036864071703036e+01 7.40918327414394983776e+00 1.19543941979688437272e+01 1.02970553557114996579e+01 1.49197509833977459692e+01 +3970 19845.00 1.00224010266471410091e+02 6.99338640299356750774e+00 1.59796276929821559065e+01 8.86930235322100557482e+00 1.25445839956512230629e+01 7.41079280225605696586e+00 1.19573193356818379129e+01 1.02998586690835747248e+01 1.49236314323498824308e+01 +3971 19850.00 1.00250292859445167437e+02 6.99472619343143975357e+00 1.59846069103681411860e+01 8.87171676084525451245e+00 1.25478643049989173619e+01 7.41240198751332979299e+00 1.19602439287613133700e+01 1.03026612983213254893e+01 1.49275117500924991987e+01 +3972 19855.00 1.00276575452418938994e+02 6.99606558401192302199e+00 1.59895869704592001881e+01 8.87413116842804505779e+00 1.25511446141393303577e+01 7.41401082780149423002e+00 1.19631679691232672980e+01 1.03054632458603165901e+01 1.49313919414967184451e+01 +3973 19860.00 1.00302858045392682129e+02 6.99740457103503121772e+00 1.59945678795774348657e+01 8.87654557604192895326e+00 1.25544249234870228804e+01 7.41561932101663501271e+00 1.19660914482691431715e+01 1.03082645141775728348e+01 1.49352720115373163168e+01 +3974 19865.00 1.00329140638366439475e+02 6.99874315076968933624e+00 1.59995496439413003031e+01 8.87895998363508454077e+00 1.25577052327310756397e+01 7.41722746501338470182e+00 1.19690143581149364138e+01 1.03110651057190150226e+01 1.49391519649817752224e+01 +3975 19870.00 1.00355423231340196821e+02 7.00008131943299982680e+00 1.60045322699765470986e+01 8.88137439126969496783e+00 1.25609855419751266226e+01 7.41883525762564577377e+00 1.19719366900584436308e+01 1.03138650229513011425e+01 1.49430318069085021904e+01 +3976 19875.00 1.00381705824313982589e+02 7.00141907323170276101e+00 1.60095157642125478503e+01 8.88378879887321382114e+00 1.25642658512191793818e+01 7.42044269667695832737e+00 1.19748584356011011920e+01 1.03166642683618174914e+01 1.49469115422922698144e+01 +3977 19880.00 1.00407988417287739935e+02 7.00275640833107893002e+00 1.60145001329714169458e+01 8.88620320643527783488e+00 1.25675461604632321411e+01 7.42204977999085890872e+00 1.19777795861407092559e+01 1.03194628444172202819e+01 1.49507911761078453594e+01 +3978 19885.00 1.00434271010261497281e+02 7.00409332086531932759e+00 1.60194853830934533789e+01 8.88861761409061656991e+00 1.25708264698109264401e+01 7.42365650532870180456e+00 1.19807001332823404027e+01 1.03222607536048922583e+01 1.49546707134336358536e+01 +3979 19890.00 1.00460553603235240416e+02 7.00542980693752159738e+00 1.60244715209007644319e+01 8.89103202169413719957e+00 1.25741067790549791994e+01 7.42526287047257138596e+00 1.19836200680092321846e+01 1.03250579984018546753e+01 1.49585501595553385101e+01 +3980 19895.00 1.00486836196209011973e+02 7.00676586259896350128e+00 1.60294585532336490985e+01 8.89344642927692774492e+00 1.25773870884026734984e+01 7.42686887317345600934e+00 1.19865393816155343387e+01 1.03278545813058553193e+01 1.49624295194477170412e+01 +3981 19900.00 1.00513118789182769319e+02 7.00810148389055864726e+00 1.60344464868287808201e+01 8.89586083690117490619e+00 1.25806673975430864942e+01 7.42847451115125423371e+00 1.19894580653954054839e+01 1.03306505048250070189e+01 1.49663087983964651073e+01 +3982 19905.00 1.00539401382156526665e+02 7.00943666680139898517e+00 1.60394353283191790638e+01 8.89827524451505880165e+00 1.25839477067871374771e+01 7.43007978211549957592e+00 1.19923761102284345270e+01 1.03334457714570575604e+01 1.49701880016872763690e+01 +3983 19910.00 1.00565683975130298222e+02 7.01077140732057912942e+00 1.60444250846487967976e+01 8.90068965212894269712e+00 1.25872280161348317762e+01 7.43168468377572466466e+00 1.19952935072014934548e+01 1.03362403836997565065e+01 1.49740671346058373814e+01 +3984 19915.00 1.00591966568104069779e+02 7.01210570135427690985e+00 1.60494157627615763317e+01 8.90310405975318985838e+00 1.25905083252752447720e+01 7.43328921378964402322e+00 1.19982102470905367397e+01 1.03390343440715763990e+01 1.49779462025414833448e+01 +3985 19920.00 1.00618249161077812914e+02 7.01343954480867370904e+00 1.60544073694978273181e+01 8.90551846731525209577e+00 1.25937886346229390711e+01 7.43489336980460535642e+00 1.20011263208787930523e+01 1.03418276550806371716e+01 1.49818252107799079198e+01 +3986 19925.00 1.00644531754051584471e+02 7.01477293354849162910e+00 1.60593999120087786991e+01 8.90793287494986429920e+00 1.25970689438669900539e+01 7.43649714947832229939e+00 1.20040417193422115361e+01 1.03446203192765029399e+01 1.49857041648140825174e+01 +3987 19930.00 1.00670814347025341817e+02 7.01610586339699970893e+00 1.60643933971347401268e+01 8.91034728254301811035e+00 1.26003492531110428132e+01 7.43810055039596029758e+00 1.20069564330494618076e+01 1.03474123391569214903e+01 1.49895830700333387853e+01 +3988 19935.00 1.00697096939999099163e+02 7.01743833014637186096e+00 1.60693878322342200704e+01 8.91276169014653696365e+00 1.26036295624587371123e+01 7.43970357017377370568e+00 1.20098704525692081546e+01 1.03502037172714622670e+01 1.49934619320342950033e+01 +3989 19940.00 1.00723379532972870720e+02 7.01877032955769042388e+00 1.60743832243548077088e+01 8.91517609776042085912e+00 1.26069098715991501081e+01 7.44130620637620143754e+00 1.20127837685737635098e+01 1.03529944561489699595e+01 1.49973407563099243589e+01 +3990 19945.00 1.00749662125946628066e+02 7.02010185734021874282e+00 1.60793795807513753005e+01 8.91759050536393971242e+00 1.26101901809468444071e+01 7.44290845656767885430e+00 1.20156963715281559502e+01 1.03557845583286418645e+01 1.50012195485604777900e+01 +3991 19950.00 1.00775944718920385412e+02 7.02143290920321838655e+00 1.60843769086787951039e+01 8.92000491294673203413e+00 1.26134704900872556266e+01 7.44451031827118470119e+00 1.20186082515864836040e+01 1.03585740263600545319e+01 1.50050983143825718003e+01 +3992 19955.00 1.00802227311894142758e+02 7.02276348078340095782e+00 1.60893752157028551153e+01 8.92241932055025088744e+00 1.26167507994349481493e+01 7.44611178900969949979e+00 1.20215193992137798773e+01 1.03613628628031371193e+01 1.50089770595801077491e+01 +3993 19960.00 1.00828509904764260341e+02 7.02409356769675508048e+00 1.60943745089747913823e+01 8.92483372848542089173e+00 1.26200311086790009085e+01 7.44771286627511042155e+00 1.20244298046677826619e+01 1.03641510702489139106e+01 1.50128557896460534948e+01 +3994 19965.00 1.00854792497738017687e+02 7.02542316552816981101e+00 1.60993747961640387700e+01 8.92724813578838016781e+00 1.26233114179230518914e+01 7.44931354753857810636e+00 1.20273394578953194411e+01 1.03669386511536796291e+01 1.50167345105915917003e+01 +3995 19970.00 1.00881075090711789244e+02 7.02675226982108380724e+00 1.61043760847327455110e+01 8.92966254340226406327e+00 1.26265917271671082034e+01 7.45091383026089548736e+00 1.20302483491541334359e+01 1.03697256081395501326e+01 1.50206132281169750797e+01 +3996 19975.00 1.00907357683685546590e+02 7.02808087607747733472e+00 1.61093783823503500230e+01 8.93207695100578291658e+00 1.26298720365148025024e+01 7.45251371187176658850e+00 1.20331564682874052608e+01 1.03725119437975514813e+01 1.50244919481297465325e+01 +3997 19980.00 1.00933640276659318147e+02 7.02940897976823819704e+00 1.61143816965826438548e+01 8.93449135859894028044e+00 1.26331523457588534853e+01 7.45411318979053127975e+00 1.20360638052419552935e+01 1.03752976607187079594e+01 1.50283706766410780631e+01 +3998 19985.00 1.00959922869633089704e+02 7.03073657632279669372e+00 1.61193860352027051874e+01 8.93690576625427901547e+00 1.26364326533446504897e+01 7.45571226139507015063e+00 1.20389703497573243851e+01 1.03780827613904058637e+01 1.50322494195585072418e+01 +3999 19990.00 1.00986205462606832839e+02 7.03206366116021985846e+00 1.61243914059836086494e+01 8.93932017382670451866e+00 1.26397129648688064663e+01 7.45731092407363060914e+00 1.20418760916766931501e+01 1.03808672485073110181e+01 1.50361281828932202842e+01 +4000 19995.00 1.01012488055580590185e+02 7.03339022961666149314e+00 1.61293978168020721853e+01 8.94173458141986188252e+00 1.26429932734910117631e+01 7.45890917516263751708e+00 1.20447810205323211363e+01 1.03836511245568061668e+01 1.50400069727600307345e+01 +4001 20000.00 1.01038770648554361742e+02 7.03471627701791568654e+00 1.61344052755348137396e+01 8.94414898897155907775e+00 1.26462735827350645224e+01 7.46050701199851928891e+00 1.20476851259601023258e+01 1.03864343922335553572e+01 1.50438857951701212556e+01 diff --git a/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx b/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx new file mode 100755 index 0000000000..9d616e734f --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx @@ -0,0 +1,17 @@ +# rx heats of formation for various molecules +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# the entries are in LAMMPS "metal" units (eV) +# Be sure the units are consistent with your input file + +# format of a single entry (one or more lines): +# species DeltaHformation + +rdx 1.989907438211819 +h2 0.000000000000000 +no2 0.343004076201018 +n2 0.000000000000000 +hcn 1.400635733970104 +no 0.935781955892458 +h2o -2.506184777415379 +co -1.145533746031845 +co2 -4.078501848437456 diff --git a/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx.new b/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx.new new file mode 100755 index 0000000000..c55d5065ba --- /dev/null +++ b/examples/USER/dpd/dpdrx-shardlow/thermo.dpdrx.new @@ -0,0 +1,17 @@ +# rx heats of formation for various molecules +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# the entries are in LAMMPS "metal" units (eV) +# Be sure the units are consistent with your input file + +# format of a single entry (one or more lines): +# species DeltaHformation + +rdx 1.989907438211819 +hcn 1.400635733970104 +no2 0.343004076201018 +no 0.935781955892458 +h2o -2.506184777415379 +n2 0.000000000000000 +h2 0.000000000000000 +co -1.145533746031845 +co2 -4.078501848437456 diff --git a/examples/VISCOSITY/in.mp.2d b/examples/VISCOSITY/in.mp.2d index fdf0652d62..5ef4857e53 100644 --- a/examples/VISCOSITY/in.mp.2d +++ b/examples/VISCOSITY/in.mp.2d @@ -44,8 +44,9 @@ unfix 2 velocity all scale $t fix 4 all viscosity 100 x y 20 -fix 5 all ave/spatial 20 50 1000 y center 0.05 vx & - units reduced file profile.mp.2d + +compute layers all chunk/atom bin/1d y center 0.05 units reduced +fix 5 all ave/chunk 20 50 1000 layers vx file profile.mp.2d # equilibration run diff --git a/examples/VISCOSITY/in.nemd.2d b/examples/VISCOSITY/in.nemd.2d index 0ff9c1e321..6eba2eaede 100644 --- a/examples/VISCOSITY/in.nemd.2d +++ b/examples/VISCOSITY/in.nemd.2d @@ -54,8 +54,9 @@ variable xyrate equal ${srate}/ly fix 1 all nvt/sllod temp $t $t 0.1 fix 2 all deform 1 xy erate ${xyrate} remap v -fix 4 all ave/spatial 20 250 5000 y center 0.05 vx & - units reduced file profile.nemd.2d + +compute layers all chunk/atom bin/1d y center 0.05 units reduced +fix 4 all ave/chunk 20 250 5000 layers vx file profile.nemd.2d compute usual all temp compute tilt all temp/deform diff --git a/examples/VISCOSITY/in.wall.2d b/examples/VISCOSITY/in.wall.2d index 1c3a8016dc..91b444a7da 100644 --- a/examples/VISCOSITY/in.wall.2d +++ b/examples/VISCOSITY/in.wall.2d @@ -51,8 +51,10 @@ fix 2 flow langevin $t $t 0.1 498094 fix_modify 2 temp thermal fix 3 wall setforce 0.0 0.0 0.0 -fix 4 flow ave/spatial 20 500 10000 y center 0.05 vx & - units reduced file profile.wall.2d + +compute layers all chunk/atom bin/1d y center 0.05 units reduced +fix 4 all ave/chunk 20 500 10000 layers vx file profile.wall.2d + fix 5 all enforce2d # equilibration run diff --git a/lib/colvars/colvar.cpp b/lib/colvars/colvar.cpp index ebf03b814a..761855f52d 100644 --- a/lib/colvars/colvar.cpp +++ b/lib/colvars/colvar.cpp @@ -203,7 +203,7 @@ colvar::colvar(std::string const &conf) cvm::error("Could not parse scripted colvar type."); return; } - x_reported.type(x.type()); + cvm::log(std::string("Expecting colvar value of type ") + colvarvalue::type_desc(x.type())); @@ -216,6 +216,8 @@ colvar::colvar(std::string const &conf) x.vector1d_value.resize(size); } + x_reported.type(x); + // Sort array of cvcs based on their names // Note: default CVC names are in input order for same type of CVC std::sort(cvcs.begin(), cvcs.end(), compare); @@ -335,6 +337,7 @@ colvar::colvar(std::string const &conf) // at this point, the colvar's type is defined f.type(value()); + f_accumulated.type(value()); fb.type(value()); get_keyval(conf, "width", width, 1.0); @@ -419,6 +422,8 @@ colvar::colvar(std::string const &conf) INPUT_ERROR); } + get_keyval(conf, "timeStepFactor", time_step_factor, 1); + { bool b_extended_Lagrangian; get_keyval(conf, "extendedLagrangian", b_extended_Lagrangian, false); @@ -432,6 +437,7 @@ colvar::colvar(std::string const &conf) // Make feature available only on user request provide(f_cv_extended_Lagrangian); enable(f_cv_extended_Lagrangian); + provide(f_cv_Langevin); xr.type(value()); vr.type(value()); @@ -1187,6 +1193,7 @@ cvm::real colvar::update_forces_energy() } } + f_accumulated += f; if (is_enabled(f_cv_fdiff_velocity)) { // set it for the next step @@ -1229,14 +1236,14 @@ void colvar::communicate_forces() if (!cvcs[i]->is_enabled()) continue; // cvc force is colvar force times colvar/cvc Jacobian // (vector-matrix product) - (cvcs[i])->apply_force(colvarvalue(f.as_vector() * func_grads[grad_index++], + (cvcs[i])->apply_force(colvarvalue(f_accumulated.as_vector() * func_grads[grad_index++], cvcs[i]->value().type())); } } else if (x.type() == colvarvalue::type_scalar) { for (i = 0; i < cvcs.size(); i++) { if (!cvcs[i]->is_enabled()) continue; - (cvcs[i])->apply_force(f * (cvcs[i])->sup_coeff * + (cvcs[i])->apply_force(f_accumulated * (cvcs[i])->sup_coeff * cvm::real((cvcs[i])->sup_np) * (std::pow((cvcs[i])->value().real_value, (cvcs[i])->sup_np-1)) ); @@ -1246,10 +1253,14 @@ void colvar::communicate_forces() for (i = 0; i < cvcs.size(); i++) { if (!cvcs[i]->is_enabled()) continue; - (cvcs[i])->apply_force(f * (cvcs[i])->sup_coeff); + (cvcs[i])->apply_force(f_accumulated * (cvcs[i])->sup_coeff); } } + // Accumulated forces have been applied, impulse-style + // Reset to start accumulating again + f_accumulated.reset(); + if (cvm::debug()) cvm::log("Done communicating forces from colvar \""+this->name+"\".\n"); } diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index ea36d3e443..9e4b448a83 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -296,10 +296,24 @@ protected: /// Sum of square coefficients for active cvcs cvm::real active_cvc_square_norm; + /// Time step multiplier (for coarse-time-step colvars) + /// Colvar will only be calculated at those times; biases may ignore the information and + /// always update their own forces (which is typically inexpensive) especially if + /// they rely on other colvars. In this case, the colvar will accumulate forces applied between + /// colvar updates. Alternately they may use it to calculate "impulse" biasing + /// forces at longer intervals. Impulse forces must be multiplied by the timestep factor. + int time_step_factor; + + /// Biasing force collected between updates, to be applied at next update for coarse-time-step colvars + colvarvalue f_accumulated; + public: /// \brief Return the number of CVC objects with an active flag (as set by update_cvc_flags) inline size_t num_active_cvcs() const { return n_active_cvcs; } + /// \brief returns time_step_factor + inline int get_time_step_factor() const {return time_step_factor;} + /// \brief Use the internal metrics (as from \link cvc /// \endlink objects) to calculate square distances and gradients /// @@ -352,7 +366,6 @@ public: protected: - /// Previous value (to calculate velocities during analysis) colvarvalue x_old; diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index 5821c8b24a..7df4d14539 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -263,6 +263,7 @@ void cvm::deps::init_cv_requires() { f_description(f_cv_extended_Lagrangian, "extended Lagrangian"); f_description(f_cv_Langevin, "Langevin dynamics"); + f_req_self(f_cv_Langevin, f_cv_extended_Lagrangian); f_description(f_cv_linear, "linear"); diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index bdf6fcee08..2988c63594 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -509,6 +509,11 @@ int colvarmodule::calc_colvars() int error_code = COLVARS_OK; std::vector::iterator cvi; + // Determine which colvars are active at this time step + for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + (*cvi)->feature_states[cvm::deps::f_cv_active]->enabled = (step_absolute() % (*cvi)->get_time_step_factor() == 0); + } + // if SMP support is available, split up the work if (proxy->smp_enabled() == COLVARS_OK) { @@ -525,6 +530,7 @@ int colvarmodule::calc_colvars() cvm::increase_depth(); for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + if (!(*cvi)->is_enabled()) continue; combine_errors(error_code, (*cvi)->update_cvc_flags()); size_t num_items = (*cvi)->num_active_cvcs(); @@ -544,6 +550,7 @@ int colvarmodule::calc_colvars() cvm::increase_depth(); for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + if (!(*cvi)->is_enabled()) continue; combine_errors(error_code, (*cvi)->collect_cvc_data()); } cvm::decrease_depth(); @@ -553,6 +560,7 @@ int colvarmodule::calc_colvars() // calculate colvars one at a time cvm::increase_depth(); for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + if (!(*cvi)->is_enabled()) continue; combine_errors(error_code, (*cvi)->calc()); if (cvm::get_error()) { return COLVARS_ERROR; @@ -645,6 +653,8 @@ int colvarmodule::update_colvar_forces() "of colvars (if they have any).\n"); cvm::increase_depth(); for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + // Here we call even inactive colvars, so they accumulate biasing forces + // as well as update their extended-system dynamics total_colvar_energy += (*cvi)->update_forces_energy(); if (cvm::get_error()) { return COLVARS_ERROR; @@ -660,6 +670,7 @@ int colvarmodule::update_colvar_forces() cvm::increase_depth(); for (cvi = colvars.begin(); cvi != colvars.end(); cvi++) { if ((*cvi)->is_enabled(cvm::deps::f_cv_gradient)) { + if (!(*cvi)->is_enabled()) continue; (*cvi)->communicate_forces(); if (cvm::get_error()) { return COLVARS_ERROR; diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index 785027884e..8c220baaf4 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -4,7 +4,7 @@ #define COLVARMODULE_H #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2016-05-10" +#define COLVARS_VERSION "2016-05-23" #endif #ifndef COLVARS_DEBUG diff --git a/lib/cuda/Makefile.common b/lib/cuda/Makefile.common index 368b23e794..5b65bfedaf 100644 --- a/lib/cuda/Makefile.common +++ b/lib/cuda/Makefile.common @@ -14,8 +14,8 @@ SHELL = /bin/sh # System-specific settings -#CUDA_INSTALL_PATH = $(HOME)/cuda -CUDA_INSTALL_PATH = $(CUDA_HOME) +CUDA_INSTALL_PATH = /usr/local/cuda +#CUDA_INSTALL_PATH = /home/crtrott/lib/cuda # e.g. in Gentoo # CUDA_INSTALL_PATH = /opt/cuda diff --git a/lib/cuda/Makefile.cudalib b/lib/cuda/Makefile.cudalib index b44b645304..f21e95e686 100644 --- a/lib/cuda/Makefile.cudalib +++ b/lib/cuda/Makefile.cudalib @@ -47,8 +47,8 @@ include Makefile.common tmp := $(shell sed -i '2 d' Makefile.lammps) tmp := $(shell sed -i '2 d' Makefile.lammps) -tmp := $(shell sed -i '1a CUDA_FLAGS := $(CUDA_FLAGS)' Makefile.lammps) -tmp := $(shell sed -i '2a CUDA_USRLIB_CONDITIONAL := $(CUDA_USRLIB_CONDITIONAL)' Makefile.lammps) +tmp := $(shell sed -i '1a CUDA_FLAGS := ${CUDA_FLAGS}' Makefile.lammps) +tmp := $(shell sed -i '2a CUDA_USRLIB_CONDITIONAL := ${CUDA_USRLIB_CONDITIONAL}' Makefile.lammps) # verbose nvcc output during compilation ifeq ($(verbose), 1) diff --git a/lib/cuda/Makefile.defaults b/lib/cuda/Makefile.defaults index fa46816a33..3e50b7b229 100644 --- a/lib/cuda/Makefile.defaults +++ b/lib/cuda/Makefile.defaults @@ -5,8 +5,8 @@ precision ?= 2 #verbose setting: 0 no, 1 yes verbose ?= 1 -#GPU architecture (compute capability): 13, 20, 21, 30, 35 -arch ?= 35 +#GPU architecture (compute capability): 13, 20, 21, 35 +arch ?= 21 #Using cufft (should not be changed) cufft ?= 1 @@ -15,5 +15,5 @@ cufft ?= 1 dbg ?= 0 #On mac machines set this to 0 in order to avoid usage of linux specific precision timer -prec_timer ?= 0 +prec_timer ?= 1 diff --git a/lib/qmmm/Makefile.gfortran b/lib/qmmm/Makefile.gfortran index d0010633a8..73fb35cbfd 100644 --- a/lib/qmmm/Makefile.gfortran +++ b/lib/qmmm/Makefile.gfortran @@ -3,13 +3,13 @@ # this file will be copied to Makefile.lammps EXTRAMAKE = Makefile.lammps.empty -# top level directory of Quantum ESPRESSO 5.1 or later +# top level directory of Quantum ESPRESSO 5.4.1 or later QETOPDIR=$(HOME)/compile/espresso # import compiler settings from Quantum ESPRESSO sinclude $(QETOPDIR)/make.sys -# FLAGS for c++ OpenMPI 1.8.x when QE was compiled with GNU Fortran 4.x +# FLAGS for c++ OpenMPI 1.8.8 or later when QE was compiled with GNU Fortran 4.x MPICXX=mpicxx MPICXXFLAGS=-DOMPI_SKIP_MPICXX=1 -O2 -Wall -g -fPIC\ -I../../src -I$(QETOPDIR)/COUPLE/include @@ -23,8 +23,8 @@ $(QETOPDIR)/PW/src/libpw.a \ $(QETOPDIR)/Modules/libqemod.a # part 2: lo-level libraries for all of Q-E LIBOBJS = \ -$(QETOPDIR)/flib/ptools.a \ -$(QETOPDIR)/flib/flib.a \ +$(QETOPDIR)/FFTXlib/libqefft.a \ +$(QETOPDIR)/LAXlib/libqela.a \ $(QETOPDIR)/clib/clib.a \ $(QETOPDIR)/iotk/src/libiotk.a diff --git a/lib/qmmm/pwqmmm.c b/lib/qmmm/pwqmmm.c index f361c19c4a..ab143d22b4 100644 --- a/lib/qmmm/pwqmmm.c +++ b/lib/qmmm/pwqmmm.c @@ -18,6 +18,14 @@ #include "libqecouple.h" #include "libqmmm.h" +#ifndef QE_LIBCOUPLE_API_VERSION +#define QE_LIBCOUPLE_API_VERSION 1 +#endif + +#if QE_LIBCOUPLE_API_VERSION != 1 +#error "Unsupported QE coupling API. Want API version 1." +#endif + #include "library.h" static const char delim[] = " \t\n\r"; diff --git a/lib/voronoi/Makefile.32-bit b/lib/voronoi/Makefile.32-bit index 555948105b..b164085f78 100644 --- a/lib/voronoi/Makefile.32-bit +++ b/lib/voronoi/Makefile.32-bit @@ -4,7 +4,7 @@ CXX = g++ -m32 CXXFLAGS = -O2 -march=i686 -mtune=generic -mfpmath=387 -mpc64 \ - -fno-rtti -fno-exceptions -finline-functions \ + -finline-functions \ -ffast-math -funroll-loops -fstrict-aliasing \ -Wall -W -Wno-uninitialized ARCHIVE = ar diff --git a/lib/voronoi/Makefile.g++ b/lib/voronoi/Makefile.g++ index 5e62c8e75b..1573645046 100644 --- a/lib/voronoi/Makefile.g++ +++ b/lib/voronoi/Makefile.g++ @@ -3,7 +3,7 @@ # ------ SETTINGS ------ CXX = g++ -CXXFLAGS = -O2 -g -fno-rtti -fno-exceptions -fPIC -funroll-loops -Isrc +CXXFLAGS = -O2 -g -fPIC -funroll-loops -Isrc ARCHIVE = ar ARCHFLAG = -rscv SHELL = /bin/sh diff --git a/lib/voronoi/Makefile.mingw32-cross b/lib/voronoi/Makefile.mingw32-cross index 8a930feaef..55d54fd121 100644 --- a/lib/voronoi/Makefile.mingw32-cross +++ b/lib/voronoi/Makefile.mingw32-cross @@ -4,7 +4,7 @@ CXX = i686-w64-mingw32-g++ CXXFLAGS = -O2 -march=i686 -mtune=generic -mfpmath=387 -mpc64 \ - -fno-rtti -fno-exceptions -finline-functions \ + -finline-functions \ -ffast-math -funroll-loops -fstrict-aliasing \ -Wall -W -Wno-uninitialized ARCHIVE = i686-w64-mingw32-ar diff --git a/lib/voronoi/Makefile.mingw64-cross b/lib/voronoi/Makefile.mingw64-cross index 67ed466874..5c821e54ad 100644 --- a/lib/voronoi/Makefile.mingw64-cross +++ b/lib/voronoi/Makefile.mingw64-cross @@ -4,7 +4,7 @@ CXX = x86_64-w64-mingw32-g++ CXXFLAGS = -O2 -march=core2 -mtune=core2 -mpc64 -msse2 \ - -fno-rtti -fno-exceptions -finline-functions \ + -finline-functions \ -ffast-math -funroll-loops -fstrict-aliasing \ -Wall -W -Wno-uninitialized ARCHIVE = x86_64-w64-mingw32-ar diff --git a/python/lammps.py b/python/lammps.py index 66affb12cc..f7230a73e3 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -87,6 +87,9 @@ class lammps: if cmdargs: cmdargs.insert(0, "lammps.py") narg = len(cmdargs) + for i in range(narg): + if type(cmdargs[i]) is str: + cmdargs[i] = cmdargs[i].encode() cargs = (c_char_p * narg)(*cmdargs) self.lib.lammps_open.argtypes = [c_int, c_char_p * narg, \ MPI_Comm, c_void_p()] @@ -106,6 +109,9 @@ class lammps: if cmdargs: cmdargs.insert(0, "lammps.py") narg = len(cmdargs) + for i in range(narg): + if type(cmdargs[i]) is str: + cmdargs[i] = cmdargs[i].encode() cargs = (c_char_p * narg)(*cmdargs) self.lmp = c_void_p() self.lib.lammps_open_no_mpi(narg, cargs, byref(self.lmp)) diff --git a/src/.gitignore b/src/.gitignore index 6792f4a40a..8c8940c8b0 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -27,6 +27,11 @@ /fix_qeq*.cpp /fix_qeq*.h +/compute_test_nbl.cpp +/compute_test_nbl.h +/pair_multi_lucy.cpp +/pair_multi_lucy.h + /colvarproxy_lammps.cpp /colvarproxy_lammps.h /fix_colvars.cpp diff --git a/src/ASPHERE/fix_nph_asphere.cpp b/src/ASPHERE/fix_nph_asphere.cpp index 10549ca1b8..e0558ef4f2 100644 --- a/src/ASPHERE/fix_nph_asphere.cpp +++ b/src/ASPHERE/fix_nph_asphere.cpp @@ -25,7 +25,8 @@ FixNPHAsphere::FixNPHAsphere(LAMMPS *lmp, int narg, char **arg) : FixNHAsphere(lmp, narg, arg) { if (tstat_flag) - error->all(FLERR,"Temperature control can not be used with fix nph/asphere"); + error->all(FLERR,"Temperature control can not be used " + "with fix nph/asphere"); if (!pstat_flag) error->all(FLERR,"Pressure control must be used with fix nph/asphere"); @@ -46,7 +47,7 @@ FixNPHAsphere::FixNPHAsphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +65,5 @@ FixNPHAsphere::FixNPHAsphere(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/ASPHERE/fix_npt_asphere.cpp b/src/ASPHERE/fix_npt_asphere.cpp index 2625bc6391..205630376a 100644 --- a/src/ASPHERE/fix_npt_asphere.cpp +++ b/src/ASPHERE/fix_npt_asphere.cpp @@ -46,7 +46,7 @@ FixNPTAsphere::FixNPTAsphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTAsphere::FixNPTAsphere(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/ASPHERE/fix_nvt_asphere.cpp b/src/ASPHERE/fix_nvt_asphere.cpp index 5b8b943ab4..f43e731c23 100644 --- a/src/ASPHERE/fix_nvt_asphere.cpp +++ b/src/ASPHERE/fix_nvt_asphere.cpp @@ -45,5 +45,5 @@ FixNVTAsphere::FixNVTAsphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/BODY/fix_nph_body.cpp b/src/BODY/fix_nph_body.cpp index 1808b9ade8..99e33a3d22 100644 --- a/src/BODY/fix_nph_body.cpp +++ b/src/BODY/fix_nph_body.cpp @@ -50,7 +50,7 @@ FixNPHBody::FixNPHBody(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -68,5 +68,5 @@ FixNPHBody::FixNPHBody(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/BODY/fix_npt_body.cpp b/src/BODY/fix_npt_body.cpp index 17014ba17c..077a7babd4 100644 --- a/src/BODY/fix_npt_body.cpp +++ b/src/BODY/fix_npt_body.cpp @@ -50,7 +50,7 @@ FixNPTBody::FixNPTBody(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -68,5 +68,5 @@ FixNPTBody::FixNPTBody(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/BODY/fix_nvt_body.cpp b/src/BODY/fix_nvt_body.cpp index d6601f4966..464f42eae9 100644 --- a/src/BODY/fix_nvt_body.cpp +++ b/src/BODY/fix_nvt_body.cpp @@ -49,5 +49,5 @@ FixNVTBody::FixNVTBody(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/Depend.sh b/src/Depend.sh index 5858fc3bf5..7570d300f8 100644 --- a/src/Depend.sh +++ b/src/Depend.sh @@ -49,7 +49,6 @@ fi if (test $1 = "CLASS2") then depend GPU - depend USER-CUDA depend USER-OMP fi @@ -64,7 +63,6 @@ if (test $1 = "DIPOLE") then fi if (test $1 = "GRANULAR") then - depend USER-CUDA depend USER-OMP fi @@ -74,7 +72,6 @@ if (test $1 = "KSPACE") then depend GPU depend KOKKOS depend OPT - depend USER-CUDA depend USER-OMP depend USER-INTEL depend USER-PHONON @@ -85,7 +82,6 @@ if (test $1 = "MANYBODY") then depend GPU depend KOKKOS depend OPT - depend USER-CUDA depend USER-MISC depend USER-OMP fi @@ -93,7 +89,6 @@ fi if (test $1 = "MOLECULE") then depend GPU depend KOKKOS - depend USER-CUDA depend USER-MISC depend USER-OMP depend USER-FEP @@ -111,7 +106,6 @@ fi if (test $1 = "USER-CG-CMM") then depend GPU depend KOKKOS - depend USER-CUDA depend USER-OMP fi diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index ddd82b30b5..22ec8dde3b 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -80,9 +80,6 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : { if (lmp->citeme) lmp->citeme->add(cite_gpu_package); - if (lmp->cuda) - error->all(FLERR,"Cannot use GPU package with USER-CUDA package enabled"); - if (narg < 4) error->all(FLERR,"Illegal package gpu command"); int ngpu = atoi(arg[3]); diff --git a/src/KOKKOS/fix_nph_kokkos.cpp b/src/KOKKOS/fix_nph_kokkos.cpp index 350832a3d7..f3f7c271d6 100644 --- a/src/KOKKOS/fix_nph_kokkos.cpp +++ b/src/KOKKOS/fix_nph_kokkos.cpp @@ -47,7 +47,7 @@ FixNPHKokkos::FixNPHKokkos(LAMMPS *lmp, int narg, char **arg) : this->modify->add_compute(3,newarg); delete [] newarg; - this->tflag = 1; + this->tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -65,7 +65,7 @@ FixNPHKokkos::FixNPHKokkos(LAMMPS *lmp, int narg, char **arg) : newarg[3] = this->id_temp; this->modify->add_compute(4,newarg); delete [] newarg; - this->pflag = 1; + this->pcomputeflag = 1; } namespace LAMMPS_NS { diff --git a/src/KOKKOS/fix_npt_kokkos.cpp b/src/KOKKOS/fix_npt_kokkos.cpp index 3832fb3e57..bbc26b8e88 100644 --- a/src/KOKKOS/fix_npt_kokkos.cpp +++ b/src/KOKKOS/fix_npt_kokkos.cpp @@ -47,7 +47,7 @@ FixNPTKokkos::FixNPTKokkos(LAMMPS *lmp, int narg, char **arg) : this->modify->add_compute(3,newarg); delete [] newarg; - this->tflag = 1; + this->tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -65,7 +65,7 @@ FixNPTKokkos::FixNPTKokkos(LAMMPS *lmp, int narg, char **arg) : newarg[3] = this->id_temp; this->modify->add_compute(4,newarg); delete [] newarg; - this->pflag = 1; + this->pcomputeflag = 1; } namespace LAMMPS_NS { diff --git a/src/KOKKOS/fix_nvt_kokkos.cpp b/src/KOKKOS/fix_nvt_kokkos.cpp index bf6ce0de2b..c479251c33 100644 --- a/src/KOKKOS/fix_nvt_kokkos.cpp +++ b/src/KOKKOS/fix_nvt_kokkos.cpp @@ -46,7 +46,7 @@ FixNVTKokkos::FixNVTKokkos(LAMMPS *lmp, int narg, char **arg) : this->modify->add_compute(3,newarg); delete [] newarg; - this->tflag = 1; + this->tcomputeflag = 1; } namespace LAMMPS_NS { diff --git a/src/MANYBODY/pair_vashishta.cpp b/src/MANYBODY/pair_vashishta.cpp index 7456c08791..aa030540f4 100644 --- a/src/MANYBODY/pair_vashishta.cpp +++ b/src/MANYBODY/pair_vashishta.cpp @@ -488,13 +488,16 @@ void PairVashishta::setup_params() // set cutsq using shortcut to reduce neighbor list for accelerated // calculations. cut must remain unchanged as it is a potential parameter + double tmp_par; for (m = 0; m < nparams; m++) { params[m].cutsq = params[m].cut * params[m].cut; params[m].cutsq2 = params[m].r0 * params[m].r0; - params[m].lam1inv = 1.0/params[m].lambda1; - params[m].lam4inv = 1.0/params[m].lambda4; + tmp_par = params[m].lambda1; + params[m].lam1inv = (tmp_par == 0.0) ? 0.0 : 1.0/tmp_par; + tmp_par = params[m].lambda4; + params[m].lam4inv = (tmp_par == 0.0) ? 0.0 : 1.0/tmp_par; params[m].zizj = params[m].zi*params[m].zj * force->qqr2e; // note that bigd does not have 1/2 factor params[m].mbigd = params[m].bigd; @@ -502,8 +505,9 @@ void PairVashishta::setup_params() params[m].big2b = 2.0*params[m].bigb; params[m].big6w = 6.0*params[m].bigw; - params[m].rcinv = 1.0/params[m].cut; - params[m].rc2inv = 1.0/params[m].cutsq; + tmp_par = params[m].cut; + params[m].rcinv = (tmp_par == 0.0) ? 0.0 : 1.0/tmp_par; + params[m].rc2inv = params[m].rcinv*params[m].rcinv; params[m].rc4inv = params[m].rc2inv*params[m].rc2inv; params[m].rc6inv = params[m].rc2inv*params[m].rc4inv; params[m].rceta = pow(params[m].rcinv,params[m].eta); diff --git a/src/MC/fix_tfmc.cpp b/src/MC/fix_tfmc.cpp index eea0a0bf31..8ce1308694 100644 --- a/src/MC/fix_tfmc.cpp +++ b/src/MC/fix_tfmc.cpp @@ -229,9 +229,12 @@ void FixTFMC::initial_integrate(int vflag) // zero com motion if (comflag == 1 && group->count(igroup) != 0) { MPI_Allreduce(xcm_d,xcm_dall,3,MPI_DOUBLE,MPI_SUM,world); - xcm_dall[0] /= masstotal; - xcm_dall[1] /= masstotal; - xcm_dall[2] /= masstotal; + if (masstotal > 0.0) { + xcm_dall[0] /= masstotal; + xcm_dall[1] /= masstotal; + xcm_dall[2] /= masstotal; + } else xcm_dall[0] = xcm_dall[1] = xcm_dall[2] = 0.0; + for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { if (xflag) x[i][0] -= xcm_dall[0]; diff --git a/src/Makefile b/src/Makefile index 1b566fc5f0..dba3ff8f63 100644 --- a/src/Makefile +++ b/src/Makefile @@ -46,7 +46,7 @@ PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ opt peri poems python qeq replica rigid shock snap srd \ voronoi -PACKUSER = user-atc user-awpmd user-cg-cmm user-colvars user-cuda \ +PACKUSER = user-atc user-awpmd user-cg-cmm user-colvars \ user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ user-intel user-lb user-manifold user-mgpt \ user-misc user-molfile user-omp user-phonon user-qmmm user-qtb \ @@ -54,7 +54,7 @@ PACKUSER = user-atc user-awpmd user-cg-cmm user-colvars user-cuda \ user-vtk PACKLIB = compress gpu kim kokkos meam mpiio poems python voronoi \ - user-atc user-awpmd user-colvars user-cuda user-h5md user-intel \ + user-atc user-awpmd user-colvars user-h5md user-intel \ user-lb user-molfile user-qmmm user-quip user-smd user-vtk PACKALL = $(PACKAGE) $(PACKUSER) diff --git a/src/Purge.list b/src/Purge.list index 79ad3c0c42..37d137e838 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -13,6 +13,140 @@ style_kspace.h style_minimize.h style_pair.h style_region.h +# deleted on 31 May 2016 +fix_ave_spatial_sphere.cpp +fix_ave_spatial_sphere.h +atom_vec_angle_cuda.cpp +atom_vec_angle_cuda.h +atom_vec_atomic_cuda.cpp +atom_vec_atomic_cuda.h +atom_vec_charge_cuda.cpp +atom_vec_charge_cuda.h +atom_vec_full_cuda.cpp +atom_vec_full_cuda.h +comm_cuda.cpp +comm_cuda.h +compute_pe_cuda.cpp +compute_pe_cuda.h +compute_pressure_cuda.cpp +compute_pressure_cuda.h +compute_temp_cuda.cpp +compute_temp_cuda.h +compute_temp_partial_cuda.cpp +compute_temp_partial_cuda.h +cuda.cpp +cuda_data.h +cuda_modify_flags.h +cuda_neigh_list.cpp +cuda_neigh_list.h +domain_cuda.cpp +domain_cuda.h +fft3d_cuda.cpp +fft3d_cuda.h +fft3d_wrap_cuda.cpp +fft3d_wrap_cuda.h +fix_addforce_cuda.cpp +fix_addforce_cuda.h +fix_aveforce_cuda.cpp +fix_aveforce_cuda.h +fix_enforce2d_cuda.cpp +fix_enforce2d_cuda.h +fix_freeze_cuda.cpp +fix_freeze_cuda.h +fix_gravity_cuda.cpp +fix_gravity_cuda.h +fix_nh_cuda.cpp +fix_nh_cuda.h +fix_npt_cuda.cpp +fix_npt_cuda.h +fix_nve_cuda.cpp +fix_nve_cuda.h +fix_nvt_cuda.cpp +fix_nvt_cuda.h +fix_set_force_cuda.cpp +fix_set_force_cuda.h +fix_shake_cuda.cpp +fix_shake_cuda.h +fix_temp_berendsen_cuda.cpp +fix_temp_berendsen_cuda.h +fix_temp_rescale_cuda.cpp +fix_temp_rescale_cuda.h +fix_temp_rescale_limit_cuda.cpp +fix_temp_rescale_limit_cuda.h +fix_viscous_cuda.cpp +fix_viscous_cuda.h +modify_cuda.cpp +modify_cuda.h +neighbor_cuda.cpp +neighbor_cuda.h +neigh_full_cuda.cpp +pair_born_coul_long_cuda.cpp +pair_born_coul_long_cuda.h +pair_buck_coul_cut_cuda.cpp +pair_buck_coul_cut_cuda.h +pair_buck_coul_long_cuda.cpp +pair_buck_coul_long_cuda.h +pair_buck_cuda.cpp +pair_buck_cuda.h +pair_eam_alloy_cuda.cpp +pair_eam_alloy_cuda.h +pair_eam_cuda.cpp +pair_eam_cuda.h +pair_eam_fs_cuda.cpp +pair_eam_fs_cuda.h +pair_gran_hooke_cuda.cpp +pair_gran_hooke_cuda.h +pair_lj96_cut_cuda.cpp +pair_lj96_cut_cuda.h +pair_lj_charmm_coul_charmm_cuda.cpp +pair_lj_charmm_coul_charmm_cuda.h +pair_lj_charmm_coul_charmm_implicit_cuda.cpp +pair_lj_charmm_coul_charmm_implicit_cuda.h +pair_lj_charmm_coul_long_cuda.cpp +pair_lj_charmm_coul_long_cuda.h +pair_lj_class2_coul_cut_cuda.cpp +pair_lj_class2_coul_cut_cuda.h +pair_lj_class2_coul_long_cuda.cpp +pair_lj_class2_coul_long_cuda.h +pair_lj_class2_cuda.cpp +pair_lj_class2_cuda.h +pair_lj_cut_coul_cut_cuda.cpp +pair_lj_cut_coul_cut_cuda.h +pair_lj_cut_coul_debye_cuda.cpp +pair_lj_cut_coul_debye_cuda.h +pair_lj_cut_coul_long_cuda.cpp +pair_lj_cut_coul_long_cuda.h +pair_lj_cut_cuda.cpp +pair_lj_cut_cuda.h +pair_lj_cut_experimental_cuda.cpp +pair_lj_cut_experimental_cuda.h +pair_lj_expand_cuda.cpp +pair_lj_expand_cuda.h +pair_lj_gromacs_coul_gromacs_cuda.cpp +pair_lj_gromacs_coul_gromacs_cuda.h +pair_lj_gromacs_cuda.cpp +pair_lj_gromacs_cuda.h +pair_lj_sdk_coul_long_cuda.cpp +pair_lj_sdk_coul_long_cuda.h +pair_lj_sdk_cuda.cpp +pair_lj_sdk_cuda.h +pair_lj_smooth_cuda.cpp +pair_lj_smooth_cuda.h +pair_morse_cuda.cpp +pair_morse_cuda.h +pair_sw_cuda.cpp +pair_sw_cuda.h +pair_tersoff_cuda.cpp +pair_tersoff_cuda.h +pair_tersoff_zbl_cuda.cpp +pair_tersoff_zbl_cuda.h +pppm_cuda.cpp +pppm_cuda.h +pppm_old.cpp +pppm_old.h +user_cuda.h +verlet_cuda.cpp +verlet_cuda.h # deleted on 11 May 2016 pair_dpd_conservative.cpp pair_dpd_conservative.h diff --git a/src/RIGID/fix_ehex.cpp b/src/RIGID/fix_ehex.cpp new file mode 100644 index 0000000000..c968887374 --- /dev/null +++ b/src/RIGID/fix_ehex.cpp @@ -0,0 +1,621 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Peter Wirnsberger (University of Cambridge) + + This source file implements the asymmetric version of the enhanced heat + exchange (eHEX/a) algorithm. The paper is available for download on + arXiv: http://arxiv.org/pdf/1507.07081.pdf. + + This file is based on fix_heat.cpp written by Paul Crozier (SNL) + which implements the heat exchange (HEX) algorithm. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "fix_ehex.h" +#include "atom.h" +#include "domain.h" +#include "region.h" +#include "group.h" +#include "force.h" +#include "update.h" +#include "modify.h" +#include "input.h" +#include "variable.h" +#include "memory.h" +#include "error.h" +#include "fix_shake.h" +#include "neighbor.h" +#include "comm.h" +#include "timer.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +enum{CONSTANT,EQUAL,ATOM}; + +/* ---------------------------------------------------------------------- */ + +FixEHEX::FixEHEX(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) +{ + MPI_Comm_rank(world, &me); + + // check + if (narg < 4) error->all(FLERR,"Illegal fix ehex command: wrong number of parameters "); + + scalar_flag = 1; + global_freq = 1; + extscalar = 0; + + // apply fix every nevery timesteps + + nevery = force->inumeric(FLERR,arg[3]); + + if (nevery <= 0) error->all(FLERR,"Illegal fix ehex command"); + + // heat flux into the reservoir + + heat_input = force->numeric(FLERR,arg[4]); + + // optional args + + iregion = -1; + idregion = NULL; + + // NOTE: constraints are deactivated by default + + constraints = 0; + + // NOTE: cluster rescaling is deactivated by default + + cluster = 0; + + // NOTE: hex = 1 means that no coordinate correction is applied in which case eHEX reduces to HEX + + hex = 0; + + int iarg = 5; + while (iarg < narg) { + + if (strcmp(arg[iarg],"region") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix ehex command: wrong number of parameters "); + iregion = domain->find_region(arg[iarg+1]); + if (iregion == -1) + error->all(FLERR,"Region ID for fix ehex does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); + iarg += 2; + } + + // apply constraints (shake/rattle) at the end of the timestep + + else if (strcmp(arg[iarg], "constrain") == 0) { + constraints = 1; + iarg += 1; + } + + // rescale only if the entire molecule is contained within the region + + else if (strcmp(arg[iarg], "com") == 0) { + cluster = 1; + iarg += 1; + } + + // don't apply a coordinate correction if this keyword is specified + + else if (strcmp(arg[iarg], "hex") == 0) { + hex = 1; + iarg+= 1; + } + else + error->all(FLERR, "Illegal fix ehex keyword "); + } + + // check options + + if (cluster && !constraints) + error->all(FLERR, "You can only use the keyword 'com' together with the keyword 'constrain' "); + + scale = 1.0; + scalingmask = NULL; + grow_arrays(atom->nmax); + atom->add_callback(0); + +} + + +/* ---------------------------------------------------------------------- */ + +void FixEHEX::grow_arrays(int nmax) { + memory->grow(scalingmask, nmax,"ehex:scalingmask"); +} + + +/* ---------------------------------------------------------------------- */ + +FixEHEX::~FixEHEX() +{ + atom->delete_callback(id,0); + delete [] idregion; + memory->destroy(scalingmask); + +} + +/* ---------------------------------------------------------------------- */ + +int FixEHEX::setmask() +{ + int mask = 0; + mask |= END_OF_STEP; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixEHEX::init() +{ + // set index and check validity of region + + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) + error->all(FLERR,"Region ID for fix ehex does not exist"); + } + + // cannot have 0 atoms in group + + if (group->count(igroup) == 0) + error->all(FLERR,"Fix ehex group has no atoms"); + + fshake = NULL; + if (constraints) { + + // check if constraining algorithm is used (FixRattle inherits from FixShake) + + int cnt_shake = 0; + int id_shake; + for (int i = 0; i < modify->nfix; i++) { + if (strcmp("rattle", modify->fix[i]->style) == 0 || + strcmp("shake", modify->fix[i]->style) == 0) { + cnt_shake++; + id_shake = i; + } + } + + if (cnt_shake > 1) + error->all(FLERR,"Multiple instances of fix shake/rattle detected (not supported yet)"); + else if (cnt_shake == 1) { + fshake = ((FixShake*) modify->fix[id_shake]); + } + else if (cnt_shake == 0) + error->all(FLERR, "Fix ehex was configured with keyword constrain, but shake/rattle was not defined"); + } +} + + + +/* ---------------------------------------------------------------------- */ + + +void FixEHEX::end_of_step() { + // store local pointers + + x = atom->x; + f = atom->f; + v = atom->v; + mass = atom->mass; + rmass = atom->rmass; + type = atom->type; + nlocal = atom->nlocal; + + // determine which sites are to be rescaled + + update_scalingmask(); + + // rescale velocities + + rescale(); + + // if required use shake/rattle to correct coordinates and velocities + + if (constraints && fshake) + fshake->shake_end_of_step(0); +} + + + +/* ---------------------------------------------------------------------- + Iterate over all atoms, rescale the velocities and apply coordinate + corrections. +------------------------------------------------------------------------- */ + +void FixEHEX::rescale() { + double Kr, Ke, escale; + double vsub[3],vcm[3], sfr[3]; + double mi; + double dt; + double F, mr, epsr_ik, sfvr, eta_ik; + + dt = update->dt; + + // calculate centre of mass properties + + com_properties(vcm, sfr, &sfvr, &Ke, &Kr, &masstotal); + + // heat flux into the reservoir + + F = heat_input * force->ftm2v * nevery; + + // total mass + + mr = masstotal; + + // energy scaling factor + + escale = 1. + (F*dt)/Kr; + + // safety check for kinetic energy + + if (escale < 0.0) error->all(FLERR,"Fix ehex kinetic energy went negative"); + + scale = sqrt(escale); + vsub[0] = (scale-1.0) * vcm[0]; + vsub[1] = (scale-1.0) * vcm[1]; + vsub[2] = (scale-1.0) * vcm[2]; + + for (int i = 0; i < nlocal; i++){ + + if (scalingmask[i]) { + + mi = (rmass) ? rmass[i] : mass[type[i]]; + + for (int k=0; k<3; k++) { + + // apply coordinate correction unless running in hex mode + + if (!hex) { + + // epsr_ik implements Eq. (20) in the paper + + eta_ik = mi * F/(2.*Kr) * (v[i][k] - vcm[k]); + epsr_ik = eta_ik / (mi*Kr) * (F/48. + sfvr/6.*force->ftm2v) - F/(12.*Kr) * (f[i][k]/mi - sfr[k]/mr)*force->ftm2v; + + x[i][k] -= dt*dt*dt * epsr_ik; + } + + // rescale the velocity + + v[i][k] = scale*v[i][k] - vsub[k]; + } + } + } +} + + +/* ---------------------------------------------------------------------- */ + +double FixEHEX::compute_scalar() +{ + return scale; +} + + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +double FixEHEX::memory_usage() +{ + double bytes = 0.0; + bytes += atom->nmax * sizeof(double); + return bytes; +} + + +/* ---------------------------------------------------------------------- + Update the array scalingmask depending on which individual atoms + will be rescaled or not. +------------------------------------------------------------------------- */ + +void FixEHEX::update_scalingmask() { + int m; + int lid; + bool stat; + int nsites; + + // prematch region + + Region *region = NULL; + if (iregion >= 0) { + region = domain->regions[iregion]; + region->prematch(); + } + + // only rescale molecules whose center of mass if fully contained in the region + + if (cluster) { + + // loop over all clusters + + for (int i=0; i < fshake->nlist; i++) { + + // cluster id + + m = fshake->list[i]; + + // check if the centre of mass of the cluster is inside the region + // if region == NULL, just check the group information of all sites + + if (fshake->shake_flag[m] == 1) nsites = 3; + else if (fshake->shake_flag[m] == 2) nsites = 2; + else if (fshake->shake_flag[m] == 3) nsites = 3; + else if (fshake->shake_flag[m] == 4) nsites = 4; + else nsites = 0; + + if (nsites == 0) { + error->all(FLERR,"Internal error: shake_flag[m] has to be between 1 and 4 for m in nlist"); + } + + stat = check_cluster(fshake->shake_atom[m], nsites, region); + + for (int l=0; l < nsites; l++) { + lid = atom->map(fshake->shake_atom[m][l]); + scalingmask[lid] = stat; + } + } + + // check atoms that do not belong to any cluster + + for (int i=0; inlocal; i++) { + if (fshake->shake_flag[i] == 0) + scalingmask[i] = rescale_atom(i,region); + } + + } + + // no clusters, just individual sites (e.g. monatomic system or flexible molecules) + + else { + for (int i=0; inlocal; i++) + scalingmask[i] = rescale_atom(i,region); + } + +} + + +/* ---------------------------------------------------------------------- + Check if the centre of mass of the cluster to be constrained is + inside the region. +------------------------------------------------------------------------- */ + +bool FixEHEX::check_cluster(tagint *shake_atom, int n, Region * region) { + + // IMPORTANT NOTE: If any site of the cluster belongs to a group + // which should not be rescaled than all of the sites + // will be ignored! + + double **x = atom->x; + double * rmass = atom->rmass; + double * mass = atom->mass; + int * type = atom->type; + int * mask = atom->mask; + double xcom[3], xtemp[3]; + double mcluster, mi; + bool stat; + int lid[4]; + + // accumulate mass and centre of mass position + + stat = true; + xcom[0] = 0.; + xcom[1] = 0.; + xcom[2] = 0.; + mcluster = 0; + + for (int i = 0; i < n; i++) { + + // get local id + + lid[i] = atom->map(shake_atom[i]); + + // check if all sites of the cluster belong to the correct group + + stat = stat && (mask[lid[i]] & groupbit); + + if (region && stat) { + + // check if reduced mass is used + + mi = (rmass) ? rmass[lid[i]] : mass[type[lid[i]]]; + mcluster += mi; + + // accumulate centre of mass + // NOTE: you can either use unwrapped coordinates or take site x[lid[0]] as reference, + // i.e. reconstruct the molecule around this site and calculate the com. + + for (int k=0; k<3; k++) + xtemp[k] = x[lid[i]][k] - x[lid[0]][k]; + + // take into account pbc + + domain->minimum_image(xtemp); + + for (int k=0; k<3; k++) + xcom[k] += mi * (x[lid[0]][k] + xtemp[k]) ; + } + } + + // check if centre of mass is inside the region (if specified) + + if (region && stat) { + + // check mass + + if (mcluster < 1.e-14) { + error->all(FLERR, "Fix ehex shake cluster has almost zero mass."); + } + + // divide by total mass + + for (int k=0; k<3; k++) + xcom[k] = xcom[k]/mcluster; + + // apply periodic boundary conditions (centre of mass could be outside the box) + // and check if molecule is inside the region + + domain->remap(xcom); + stat = stat && region->match(xcom[0], xcom[1], xcom[2]); + } + + return stat; +} + + +/* ---------------------------------------------------------------------- + Check if atom i has the correct group and is inside the region. +------------------------------------------------------------------------- */ + +bool FixEHEX::rescale_atom(int i, Region*region) { + bool stat; + double x_r[3]; + + // check mask and group + + stat = (atom->mask[i] & groupbit); + + if (region) { + + x_r[0] = atom->x[i][0]; + x_r[1] = atom->x[i][1]; + x_r[2] = atom->x[i][2]; + + // apply periodic boundary conditions + + domain->remap(x_r); + + // check if the atom is in the group/region + + stat = stat && region->match(x_r[0],x_r[1],x_r[2]); + } + + return stat; +} + +/* ---------------------------------------------------------------------- + Calculate global properties of the atoms inside the reservoir. + (e.g. com velocity, kinetic energy, total mass,...) +------------------------------------------------------------------------- */ + +void FixEHEX::com_properties(double * vr, double * sfr, double *sfvr, double *K, double *Kr, double *mr) { + double ** f = atom->f; + double ** v = atom->v; + int nlocal = atom->nlocal; + double *rmass= atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + double l_vr[3]; + double l_mr; + double l_sfr[3]; + double l_sfvr; + double l_K; + double mi; + double l_buf[9]; + double buf[9]; + + // calculate partial sums + + l_vr[0] = l_vr[1] = l_vr[2] = 0; + l_sfr[0] = l_sfr[1] = l_sfr[2] = 0; + l_sfvr = 0; + l_mr = 0; + l_K = 0; + + for (int i = 0; i < nlocal; i++) { + if (scalingmask[i]) { + + // check if reduced mass is used + + mi = (rmass) ? rmass[i] : mass[type[i]]; + + // accumulate total mass + + l_mr += mi; + + // accumulate kinetic energy + + l_K += mi/2. * (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + + // sum_j f_j * v_j + + l_sfvr += f[i][0]*v[i][0] + f[i][1]*v[i][1] + f[i][2]*v[i][2]; + + // accumulate com velocity and sum of forces + + for (int k=0; k<3; k++) { + l_vr[k] += mi * v[i][k]; + l_sfr[k]+= f[i][k]; + } + } + } + + // reduce sums + + l_buf[0] = l_vr[0]; + l_buf[1] = l_vr[1]; + l_buf[2] = l_vr[2]; + l_buf[3] = l_K; + l_buf[4] = l_mr; + l_buf[5] = l_sfr[0]; + l_buf[6] = l_sfr[1]; + l_buf[7] = l_sfr[2]; + l_buf[8] = l_sfvr; + + MPI_Allreduce(l_buf, buf, 9, MPI_DOUBLE, MPI_SUM, world); + + // total mass of region + + *mr = buf[4]; + + if (*mr < 1.e-14) { + error->all(FLERR, "Fix ehex error mass of region is close to zero"); + } + + // total kinetic energy of region + + *K = buf[3]; + + // centre of mass velocity of region + + vr[0] = buf[0]/(*mr); + vr[1] = buf[1]/(*mr); + vr[2] = buf[2]/(*mr); + + // sum of forces + + sfr[0] = buf[5]; + sfr[1] = buf[6]; + sfr[2] = buf[7]; + + // calculate non-translational kinetic energy + + *Kr = *K - 0.5* (*mr) * (vr[0]*vr[0]+vr[1]*vr[1]+vr[2]*vr[2]); + + // calculate sum_j f_j * (v_j - v_r) = sum_j f_j * v_j - v_r * sum_j f_j + + *sfvr = buf[8] - (vr[0]*sfr[0] + vr[1]*sfr[1] + vr[2]*sfr[2]); +} + diff --git a/src/RIGID/fix_ehex.h b/src/RIGID/fix_ehex.h new file mode 100644 index 0000000000..3ae974fc0d --- /dev/null +++ b/src/RIGID/fix_ehex.h @@ -0,0 +1,130 @@ +/* ---------------------------------------------------------------------- + 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 FIX_CLASS + +FixStyle(ehex,FixEHEX) + +#else + +#ifndef LMP_FIX_EHEX_H +#define LMP_FIX_EHEX_H + +#include "fix.h" +#include "fix_shake.h" +#include "region.h" +#define EHEX_DEBUG 0 + +namespace LAMMPS_NS { + +class FixEHEX : public Fix { + + public: + FixEHEX(class LAMMPS *, int, char **); + ~FixEHEX(); + int setmask(); + void init(); + void end_of_step(); + void rescale(); + double compute_scalar(); + double memory_usage(); + void update_scalingmask(); + void com_properties(double *, double *, double *, double*, double *, double*); + bool rescale_atom(int i, Region*region); + virtual void grow_arrays(int nmax); + bool check_cluster(tagint *shake_atom, int n, Region * region); + + private: + int iregion; + double heat_input; + double masstotal; + double scale; + char *idregion; + int me; + + double ** x; // coordinates + double ** f; // forces + double ** v; // velocities + double * mass; // masses + double * rmass; // reduced masses + int * type; // atom types + int nlocal; // number of local atoms + FixShake * fshake; // pointer to fix_shake/fix_rattle + int constraints; // constraints (0/1) + int cluster; // rescaling entire clusters (0/1) + int hex; // HEX mode (0/1) + bool * scalingmask; // scalingmask[i] determines whether + // the velocity of atom i is to be rescaled +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal fix ehex command: wrong number of parameters + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Illegal fix ehex command: integer value expected + +Self-explanatory. Check the value for nevery. + +E: Region ID for fix ehex does not exist + +Self-explanatory. + +E: You can only use the keyword 'com' together with the keyword 'constrain' . + +Self-explanatory. + +E: Illegal fix ehex keyword + +Self-explanatory. + +E: Fix ehex group has no atoms + +Self-explanatory. + +E: Multiple instances of fix shake/rattle detected (not supported yet) + +You can only have one instance of fix rattle/shake at the moment. + +E: Fix ehex was configured with keyword constrain, but shake/rattle was not defined + +The option constrain requires either fix shake or fix rattle which is missing in the input script. + +E: Fix heat kinetic energy went negative + +This will cause the velocity rescaling about to be performed by fix +heat to be invalid. + +E: Fix heat kinetic energy of an atom went negative + +This will cause the velocity rescaling about to be performed by fix +heat to be invalid. + +E: Internal error: shake_flag[m] has to be between 1 and 4 for m in nlist + +Contact developers. + +E: Fix ehex error mass of region is close to zero + +Check your configuration. + +*/ diff --git a/src/RIGID/fix_rattle.cpp b/src/RIGID/fix_rattle.cpp index f07e5fe252..3a5fef69cb 100644 --- a/src/RIGID/fix_rattle.cpp +++ b/src/RIGID/fix_rattle.cpp @@ -44,13 +44,22 @@ using namespace FixConst; using namespace MathConst; using namespace MathExtra; -// set RATTLE_DEBUG = 1 to check constraints at end of timestep +// set RATTLE_DEBUG 1 to check constraints at end of timestep #define RATTLE_DEBUG 0 -#define RATTLE_TEST_VEL true -#define RATTLE_TEST_POS true -enum{V,VP,XSHAKE,X}; +// set RATTLE_RAISE_ERROR 1 if you want this fix to raise +// an error if the constraints cannot be satisfied + +#define RATTLE_RAISE_ERROR 0 + +// You can enable velocity and coordinate checks separately +// by setting RATTLE_TEST_VEL/POS true + +#define RATTLE_TEST_VEL false +#define RATTLE_TEST_POS false + +enum{V,VP,XSHAKE}; /* ---------------------------------------------------------------------- */ @@ -59,10 +68,6 @@ FixRattle::FixRattle(LAMMPS *lmp, int narg, char **arg) : { rattle = 1; - // define timestep for velocity integration - - dtfv = 0.5 * update->dt * force->ftm2v; - // allocate memory for unconstrained velocity update vp = NULL; @@ -74,13 +79,35 @@ FixRattle::FixRattle(LAMMPS *lmp, int narg, char **arg) : comm_mode = XSHAKE; vflag_post_force = 0; + + verr_max = 0; + derr_max = 0; } /* ---------------------------------------------------------------------- */ FixRattle::~FixRattle() -{ +{ memory->destroy(vp); + + + if (RATTLE_DEBUG) { + + // communicate maximum distance error + + double global_derr_max, global_verr_max; + int npid; + + MPI_Reduce(&derr_max, &global_derr_max, 1 , MPI_DOUBLE, MPI_MAX, 0, world); + MPI_Reduce(&verr_max, &global_verr_max, 1 , MPI_DOUBLE, MPI_MAX, 0, world); + + MPI_Comm_rank (world, &npid); // Find out process rank + + if (npid == 0 && screen) { + fprintf(screen, "RATTLE: Maximum overall relative position error ( (r_ij-d_ij)/d_ij ): %.10g\n", global_derr_max); + fprintf(screen, "RATTLE: Maximum overall absolute velocity error (r_ij * v_ij): %.10g\n", global_verr_max); + } + } } /* ---------------------------------------------------------------------- */ @@ -89,11 +116,11 @@ int FixRattle::setmask() { int mask = 0; mask |= PRE_NEIGHBOR; - mask |= POST_FORCE; + mask |= POST_FORCE; mask |= POST_FORCE_RESPA; mask |= FINAL_INTEGRATE; mask |= FINAL_INTEGRATE_RESPA; - if (RATTLE_DEBUG) mask |= END_OF_STEP; + if (RATTLE_DEBUG) mask |= END_OF_STEP; return mask; } @@ -118,7 +145,7 @@ void FixRattle::init() { if (flag && comm->me == 0) error->warning(FLERR, - "Fix rattle should come after all other integration fixes"); + "Fix rattle should come after all other integration fixes "); } /* ---------------------------------------------------------------------- @@ -149,10 +176,10 @@ void FixRattle::post_force(int vflag) int m; for (int i = 0; i < nlist; i++) { m = list[i]; - if (shake_flag[m] == 2) vrattle2(m); - else if (shake_flag[m] == 3) vrattle3(m); - else if (shake_flag[m] == 4) vrattle4(m); - else vrattle3angle(m); + if (shake_flag[m] == 2) vrattle2(m); + else if (shake_flag[m] == 3) vrattle3(m); + else if (shake_flag[m] == 4) vrattle4(m); + else vrattle3angle(m); } } @@ -213,30 +240,36 @@ void FixRattle::final_integrate_respa(int ilevel, int iloop) void FixRattle::vrattle3angle(int m) { tagint i0,i1,i2; + int nlist,list[3]; double c[3], l[3], a[3][3], r01[3], imass[3], r02[3], r12[3], vp01[3], vp02[3], vp12[3]; // local atom IDs and constraint distances + i0 = atom->map(shake_atom[m][0]); i1 = atom->map(shake_atom[m][1]); i2 = atom->map(shake_atom[m][2]); // r01,r02,r12 = distance vec between atoms + MathExtra::sub3(x[i1],x[i0],r01); MathExtra::sub3(x[i2],x[i0],r02); MathExtra::sub3(x[i2],x[i1],r12); // take into account periodicity + domain->minimum_image(r01); domain->minimum_image(r02); domain->minimum_image(r12); - // v01,v02,v12 = velocity differences + // v01,v02,v12 = velocity differences + MathExtra::sub3(vp[i1],vp[i0],vp01); MathExtra::sub3(vp[i2],vp[i0],vp02); MathExtra::sub3(vp[i2],vp[i1],vp12); // matrix coeffs and rhs for lamda equations + if (rmass) { imass[0] = 1.0/rmass[i0]; imass[1] = 1.0/rmass[i1]; @@ -248,35 +281,39 @@ void FixRattle::vrattle3angle(int m) } // setup matrix + a[0][0] = (imass[1] + imass[0]) * MathExtra::dot3(r01,r01); a[0][1] = (imass[0] ) * MathExtra::dot3(r01,r02); a[0][2] = (-imass[1] ) * MathExtra::dot3(r01,r12); a[1][0] = a[0][1]; - a[1][1] = (imass[0] + imass[2]) * MathExtra::dot3(r02,r02); + a[1][1] = (imass[0] + imass[2]) * MathExtra::dot3(r02,r02); a[1][2] = (imass[2] ) * MathExtra::dot3(r02,r12); a[2][0] = a[0][2]; a[2][1] = a[1][2]; a[2][2] = (imass[2] + imass[1]) * MathExtra::dot3(r12,r12); // sestup RHS + c[0] = -MathExtra::dot3(vp01,r01); c[1] = -MathExtra::dot3(vp02,r02); c[2] = -MathExtra::dot3(vp12,r12); // calculate the inverse matrix exactly + solve3x3exactly(a,c,l); // add corrections to the velocities if processor owns atom + if (i0 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i0][k] -= imass[0]* ( l[0] * r01[k] + l[1] * r02[k] ); - } + } if (i1 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i1][k] -= imass[1] * ( -l[0] * r01[k] + l[2] * r12[k] ); } if (i2 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i2][k] -= imass[2] * ( -l[1] * r02[k] - l[2] * r12[k] ); } } @@ -286,20 +323,25 @@ void FixRattle::vrattle3angle(int m) void FixRattle::vrattle2(int m) { tagint i0, i1; + int nlist,list[2]; double imass[2], r01[3], vp01[3]; // local atom IDs and constraint distances + i0 = atom->map(shake_atom[m][0]); i1 = atom->map(shake_atom[m][1]); // r01 = distance vec between atoms, with PBC + MathExtra::sub3(x[i1],x[i0],r01); domain->minimum_image(r01); // v01 = distance vectors for velocities + MathExtra::sub3(vp[i1],vp[i0],vp01); // matrix coeffs and rhs for lamda equations + if (rmass) { imass[0] = 1.0/rmass[i0]; imass[1] = 1.0/rmass[i1]; @@ -309,16 +351,18 @@ void FixRattle::vrattle2(int m) } // Lagrange multiplier: exact solution - double l01 = - MathExtra::dot3(r01,vp01) / + + double l01 = - MathExtra::dot3(r01,vp01) / (MathExtra::dot3(r01,r01) * (imass[0] + imass[1])); // add corrections to the velocities if the process owns this atom + if (i0 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i0][k] -= imass[0] * l01 * r01[k]; - } + } if (i1 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i1][k] -= imass[1] * (-l01) * r01[k]; } } @@ -328,22 +372,26 @@ void FixRattle::vrattle2(int m) void FixRattle::vrattle3(int m) { tagint i0,i1,i2; + int nlist,list[3]; double imass[3], r01[3], r02[3], vp01[3], vp02[3], a[2][2],c[2],l[2]; // local atom IDs and constraint distances + i0 = atom->map(shake_atom[m][0]); i1 = atom->map(shake_atom[m][1]); i2 = atom->map(shake_atom[m][2]); // r01,r02 = distance vec between atoms, with PBC + MathExtra::sub3(x[i1],x[i0],r01); MathExtra::sub3(x[i2],x[i0],r02); - + domain->minimum_image(r01); domain->minimum_image(r02); // vp01,vp02 = distance vectors between velocities + MathExtra::sub3(vp[i1],vp[i0],vp01); MathExtra::sub3(vp[i2],vp[i0],vp02); @@ -358,29 +406,33 @@ void FixRattle::vrattle3(int m) } // setup matrix + a[0][0] = (imass[1] + imass[0]) * MathExtra::dot3(r01,r01); a[0][1] = (imass[0] ) * MathExtra::dot3(r01,r02); a[1][0] = a[0][1]; a[1][1] = (imass[0] + imass[2]) * MathExtra::dot3(r02,r02); // setup RHS + c[0] = - MathExtra::dot3(vp01,r01); c[1] = - MathExtra::dot3(vp02,r02); // calculate the inverse 2x2 matrix exactly + solve2x2exactly(a,c,l); // add corrections to the velocities if the process owns this atom + if (i0 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i0][k] -= imass[0] * ( l[0] * r01[k] + l[1] * r02[k] ); - } - if (i1 < nlocal) + } + if (i1 < nlocal) for (int k=0; k<3; k++) { v[i1][k] -= imass[1] * ( -l[0] * r01[k] ); } if (i2 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i2][k] -= imass[2] * ( -l[1] * r02[k] ); } } @@ -390,16 +442,19 @@ void FixRattle::vrattle3(int m) void FixRattle::vrattle4(int m) { tagint i0,i1,i2,i3; + int nlist,list[4]; double imass[4], c[3], l[3], a[3][3], r01[3], r02[3], r03[3], vp01[3], vp02[3], vp03[3]; // local atom IDs and constraint distances + i0 = atom->map(shake_atom[m][0]); i1 = atom->map(shake_atom[m][1]); i2 = atom->map(shake_atom[m][2]); i3 = atom->map(shake_atom[m][3]); // r01,r02,r12 = distance vec between atoms, with PBC + MathExtra::sub3(x[i1],x[i0],r01); MathExtra::sub3(x[i2],x[i0],r02); MathExtra::sub3(x[i3],x[i0],r03); @@ -409,11 +464,13 @@ void FixRattle::vrattle4(int m) domain->minimum_image(r03); // vp01,vp02,vp03 = distance vectors between velocities + MathExtra::sub3(vp[i1],vp[i0],vp01); MathExtra::sub3(vp[i2],vp[i0],vp02); MathExtra::sub3(vp[i3],vp[i0],vp03); // matrix coeffs and rhs for lamda equations + if (rmass) { imass[0] = 1.0/rmass[i0]; imass[1] = 1.0/rmass[i1]; @@ -427,6 +484,7 @@ void FixRattle::vrattle4(int m) } // setup matrix + a[0][0] = (imass[0] + imass[1]) * MathExtra::dot3(r01,r01); a[0][1] = (imass[0] ) * MathExtra::dot3(r01,r02); a[0][2] = (imass[0] ) * MathExtra::dot3(r01,r03); @@ -438,71 +496,80 @@ void FixRattle::vrattle4(int m) a[2][2] = (imass[0] + imass[3]) * MathExtra::dot3(r03,r03); // setup RHS + c[0] = - MathExtra::dot3(vp01,r01); c[1] = - MathExtra::dot3(vp02,r02); c[2] = - MathExtra::dot3(vp03,r03); // calculate the inverse 3x3 matrix exactly + solve3x3exactly(a,c,l); // add corrections to the velocities if the process owns this atom + if (i0 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i0][k] -= imass[0] * ( l[0] * r01[k] + l[1] * r02[k] + l[2] * r03[k]); - } + } if (i1 < nlocal) { - for (int k=0; k<3; k++) - v[i1][k] -= imass[1] * (-l[0] * r01[k]); + for (int k=0; k<3; k++) + v[i1][k] -= imass[1] * (-l[0] * r01[k]); } if (i2 < nlocal) { - for (int k=0; k<3; k++) + for (int k=0; k<3; k++) v[i2][k] -= imass[2] * ( -l[1] * r02[k]); } if (i3 < nlocal) { - for (int k=0; k<3; k++) - v[i3][k] -= imass[3] * ( -l[2] * r03[k]); + for (int k=0; k<3; k++) + v[i3][k] -= imass[3] * ( -l[2] * r03[k]); } } /* ---------------------------------------------------------------------- */ -void FixRattle::solve2x2exactly(const double a[][2], +void FixRattle::solve2x2exactly(const double a[][2], const double c[], double l[]) { double determ, determinv; // calculate the determinant of the matrix + determ = a[0][0] * a[1][1] - a[0][1] * a[1][0]; // check if matrix is actually invertible - if (determ == 0.0) error->one(FLERR,"RATTLE determinant = 0.0"); + + if (determ == 0.0) error->one(FLERR,"Rattle determinant = 0.0"); determinv = 1.0/determ; - // Calcualte the solution: (l01, l02)^T = A^(-1) * c + // Calculate the solution: (l01, l02)^T = A^(-1) * c + l[0] = determinv * ( a[1][1] * c[0] - a[0][1] * c[1]); l[1] = determinv * (-a[1][0] * c[0] + a[0][0] * c[1]); } /* ---------------------------------------------------------------------- */ -void FixRattle::solve3x3exactly(const double a[][3], +void FixRattle::solve3x3exactly(const double a[][3], const double c[], double l[]) { double ai[3][3]; double determ, determinv; - + // calculate the determinant of the matrix - determ = a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + - a[0][2]*a[1][0]*a[2][1] - a[0][0]*a[1][2]*a[2][1] - - a[0][1]*a[1][0]*a[2][2] - a[0][2]*a[1][1]*a[2][0]; + determ = a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + + a[0][2]*a[1][0]*a[2][1] - a[0][0]*a[1][2]*a[2][1] - + a[0][1]*a[1][0]*a[2][2] - a[0][2]*a[1][1]*a[2][0]; + // check if matrix is actually invertible - if (determ == 0.0) error->one(FLERR,"RATTLE determinant = 0.0"); + + if (determ == 0.0) error->one(FLERR,"Rattle determinant = 0.0"); // calculate the inverse 3x3 matrix: A^(-1) = (ai_jk) + determinv = 1.0/determ; ai[0][0] = determinv * (a[1][1]*a[2][2] - a[1][2]*a[2][1]); - ai[0][1] = -determinv * (a[0][1]*a[2][2] - a[0][2]*a[2][1]); + ai[0][1] = -determinv * (a[0][1]*a[2][2] - a[0][2]*a[2][1]); ai[0][2] = determinv * (a[0][1]*a[1][2] - a[0][2]*a[1][1]); ai[1][0] = -determinv * (a[1][0]*a[2][2] - a[1][2]*a[2][0]); ai[1][1] = determinv * (a[0][0]*a[2][2] - a[0][2]*a[2][0]); @@ -512,11 +579,12 @@ void FixRattle::solve3x3exactly(const double a[][3], ai[2][2] = determinv * (a[0][0]*a[1][1] - a[0][1]*a[1][0]); // calculate the solution: (l01, l02, l12)^T = A^(-1) * c + for (int i=0; i<3; i++) { l[i] = 0; - for (int j=0; j<3; j++) + for (int j=0; j<3; j++) l[i] += ai[i][j] * c[j]; - } + } } /* ---------------------------------------------------------------------- */ @@ -534,6 +602,8 @@ void FixRattle::reset_dt() void FixRattle::update_v_half_nocons() { double dtfvinvm; + dtfv = 0.5 * update->dt * force->ftm2v; + if (rmass) { for (int i = 0; i < nlocal; i++) { if (shake_flag[i]) { @@ -563,9 +633,11 @@ void FixRattle::update_v_half_nocons() void FixRattle::update_v_half_nocons_respa(int ilevel) { // select timestep for current level + dtfv = 0.5 * step_respa[ilevel] * force->ftm2v; // carry out unconstrained velocity update + update_v_half_nocons(); } @@ -621,18 +693,9 @@ int FixRattle::pack_forward_comm(int n, int *list, double *buf, buf[m++] = v[j][2]; } break; - - case X: - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - break; } return m; -} +} /* ---------------------------------------------------------------------- */ @@ -662,31 +725,80 @@ void FixRattle::unpack_forward_comm(int n, int first, double *buf) v[i][2] = buf[m++]; } break; - - case X: - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } - break; } } /* ---------------------------------------------------------------------- - wrapper method for end_of_step fixes which modify the coordinates + Let shake calculate new constraining forces for the coordinates; + As opposed to the regular shake call, this method is usually called from + end_of_step fixes after the second velocity integration has happened. ------------------------------------------------------------------------- */ -void FixRattle::coordinate_constraints_end_of_step() { +void FixRattle::shake_end_of_step(int vflag) { + + if (nprocs > 1) { + comm_mode = V; + comm->forward_comm_fix(this); + } + comm_mode = XSHAKE; - FixShake::coordinate_constraints_end_of_step(); + FixShake::shake_end_of_step(vflag); +} + + +/* ---------------------------------------------------------------------- + Let shake calculate new constraining forces and correct the + coordinates. Nothing to do for rattle here. +------------------------------------------------------------------------- */ + +void FixRattle::correct_coordinates(int vflag) { + comm_mode = XSHAKE; + FixShake::correct_coordinates(vflag); +} + + +/* ---------------------------------------------------------------------- + Remove the velocity component along any bond. +------------------------------------------------------------------------- */ + +void FixRattle::correct_velocities() { + + // Copy current velocities instead of unconstrained_update, because the correction + // should happen instantaneously and not after the next half step. + + for (int i = 0; i < atom->nlocal; i++) { + if (shake_flag[i]) { + for (int k=0; k<3; k++) + vp[i][k] = v[i][k]; + } + else + vp[i][0] = vp[i][1] = vp[i][2] = 0; + } + + // communicate the unconstrained velocities + + if (nprocs > 1) { + comm_mode = VP; + comm->forward_comm_fix(this); + } + + // correct the velocity for each molecule accordingly + + int m; + for (int i = 0; i < nlist; i++) { + m = list[i]; + if (shake_flag[m] == 2) vrattle2(m); + else if (shake_flag[m] == 3) vrattle3(m); + else if (shake_flag[m] == 4) vrattle4(m); + else vrattle3angle(m); + } } /* ---------------------------------------------------------------------- DEBUGGING methods - The functions below allow you to check whether the + The functions below allow you to check whether the coordinate and velocity constraints are satisfied at the end of the timestep only enabled if RATTLE_DEBUG is set to 1 at top of file @@ -695,18 +807,16 @@ void FixRattle::coordinate_constraints_end_of_step() { void FixRattle::end_of_step() { - // communicate velocities and coordinates (x and v) if (nprocs > 1) { - comm_mode = V; - comm->forward_comm_fix(this); - comm_mode = X; - comm->forward_comm_fix(this); + comm_mode = V; + comm->forward_comm_fix(this); } - if (!check_constraints(v, RATTLE_TEST_POS, RATTLE_TEST_VEL)) { - error->one(FLERR, "RATTLE failed"); + if (!check_constraints(v, RATTLE_TEST_POS, RATTLE_TEST_VEL) && RATTLE_RAISE_ERROR) { + error->one(FLERR, "Rattle failed "); } } + /* ---------------------------------------------------------------------- */ bool FixRattle::check_constraints(double **v, bool checkr, bool checkv) @@ -716,11 +826,12 @@ bool FixRattle::check_constraints(double **v, bool checkr, bool checkv) int i=0; while (i < nlist && ret) { m = list[i]; - if (shake_flag[m] == 2) ret = check2(v,m,checkr,checkv); - else if (shake_flag[m] == 3) ret = check3(v,m,checkr,checkv); - else if (shake_flag[m] == 4) ret = check4(v,m,checkr,checkv); + if (shake_flag[m] == 2) ret = check2(v,m,checkr,checkv); + else if (shake_flag[m] == 3) ret = check3(v,m,checkr,checkv); + else if (shake_flag[m] == 4) ret = check4(v,m,checkr,checkv); else ret = check3angle(v,m,checkr,checkv); i++; + if (!RATTLE_RAISE_ERROR) ret = true; } return ret; } @@ -733,7 +844,7 @@ bool FixRattle::check2(double **v, int m, bool checkr, bool checkv) double r01[3],v01[3]; const double tol = tolerance; double bond1 = bond_distance[shake_type[m][0]]; - + tagint i0 = atom->map(shake_atom[m][0]); tagint i1 = atom->map(shake_atom[m][1]); @@ -742,14 +853,14 @@ bool FixRattle::check2(double **v, int m, bool checkr, bool checkv) MathExtra::sub3(v[i1],v[i0],v01); stat = !(checkr && (fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1) > tol)); - if (!stat) - error->one(FLERR,"RATTLE coordinate constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Coordinate constraints are not satisfied " + "up to desired tolerance "); stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol)); - if (!stat) - error->one(FLERR,"RATTLE velocity constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Velocity constraints are not satisfied " + "up to desired tolerance "); return stat; } @@ -763,14 +874,14 @@ bool FixRattle::check3(double **v, int m, bool checkr, bool checkv) const double tol = tolerance; double bond1 = bond_distance[shake_type[m][0]]; double bond2 = bond_distance[shake_type[m][1]]; - + i0 = atom->map(shake_atom[m][0]); i1 = atom->map(shake_atom[m][1]); i2 = atom->map(shake_atom[m][2]); MathExtra::sub3(x[i1],x[i0],r01); MathExtra::sub3(x[i2],x[i0],r02); - + domain->minimum_image(r01); domain->minimum_image(r02); @@ -779,15 +890,15 @@ bool FixRattle::check3(double **v, int m, bool checkr, bool checkv) stat = !(checkr && (fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1) > tol || fabs(sqrt(MathExtra::dot3(r02,r02))-bond2) > tol)); - if (!stat) - error->one(FLERR,"RATTLE coordinate constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Coordinate constraints are not satisfied " + "up to desired tolerance "); - stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol || + stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol || fabs(MathExtra::dot3(r02,v02)) > tol)); - if (!stat) - error->one(FLERR,"RATTLE velocity constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Velocity constraints are not satisfied " + "up to desired tolerance "); return stat; } @@ -819,19 +930,19 @@ bool FixRattle::check4(double **v, int m, bool checkr, bool checkv) MathExtra::sub3(v[i2],v[i0],v02); MathExtra::sub3(v[i3],v[i0],v03); - stat = !(checkr && (fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1) > tol || - fabs(sqrt(MathExtra::dot3(r02,r02))-bond2) > tol || + stat = !(checkr && (fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1) > tol || + fabs(sqrt(MathExtra::dot3(r02,r02))-bond2) > tol || fabs(sqrt(MathExtra::dot3(r03,r03))-bond3) > tol)); - if (!stat) - error->one(FLERR,"RATTLE coordinate constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Coordinate constraints are not satisfied " + "up to desired tolerance "); - stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol || - fabs(MathExtra::dot3(r02,v02)) > tol || + stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol || + fabs(MathExtra::dot3(r02,v02)) > tol || fabs(MathExtra::dot3(r03,v03)) > tol)); - if (!stat) - error->one(FLERR,"RATTLE velocity constraints are not satisfied " - "up to desired tolerance"); + if (!stat) + error->one(FLERR,"Velocity constraints are not satisfied " + "up to desired tolerance "); return stat; } @@ -862,18 +973,44 @@ bool FixRattle::check3angle(double **v, int m, bool checkr, bool checkv) MathExtra::sub3(v[i2],v[i0],v02); MathExtra::sub3(v[i2],v[i1],v12); - stat = !(checkr && (fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1) > tol || - fabs(sqrt(MathExtra::dot3(r02,r02))-bond2) > tol || - fabs(sqrt(MathExtra::dot3(r12,r12))-bond12) > tol)); - if (!stat) - error->one(FLERR,"RATTLE coordinate constraints are not satisfied " - "up to desired tolerance"); - stat = !(checkv && (fabs(MathExtra::dot3(r01,v01)) > tol || - fabs(MathExtra::dot3(r02,v02)) > tol || - fabs(MathExtra::dot3(r12,v12)) > tol)); - if (!stat) - error->one(FLERR,"RATTLE velocity constraints are not satisfied " - "up to desired tolerance"); + + double db1 = fabs(sqrt(MathExtra::dot3(r01,r01)) - bond1); + double db2 = fabs(sqrt(MathExtra::dot3(r02,r02))-bond2); + double db12 = fabs(sqrt(MathExtra::dot3(r12,r12))-bond12); + + + stat = !(checkr && (db1 > tol || + db2 > tol || + db12 > tol)); + + if (derr_max < db1/bond1) derr_max = db1/bond1; + if (derr_max < db2/bond2) derr_max = db2/bond2; + if (derr_max < db12/bond12) derr_max = db12/bond12; + + + if (!stat && RATTLE_RAISE_ERROR) + error->one(FLERR,"Coordinate constraints are not satisfied " + "up to desired tolerance "); + + double dv1 = fabs(MathExtra::dot3(r01,v01)); + double dv2 = fabs(MathExtra::dot3(r02,v02)); + double dv12 = fabs(MathExtra::dot3(r12,v12)); + + if (verr_max < dv1) verr_max = dv1; + if (verr_max < dv2) verr_max = dv2; + if (verr_max < dv12) verr_max = dv12; + + + stat = !(checkv && (dv1 > tol || + dv2 > tol || + dv12> tol)); + + + if (!stat && RATTLE_RAISE_ERROR) + error->one(FLERR,"Velocity constraints are not satisfied " + "up to desired tolerance!"); + + return stat; } diff --git a/src/RIGID/fix_rattle.h b/src/RIGID/fix_rattle.h index a77fac19ab..7b94d2cf0d 100644 --- a/src/RIGID/fix_rattle.h +++ b/src/RIGID/fix_rattle.h @@ -30,22 +30,27 @@ class FixRattle : public FixShake { double **vp; // array for unconstrained velocities double dtfv; // timestep for velocity update int comm_mode; // mode for communication pack/unpack + double derr_max; // distance error + double verr_max; // velocity error FixRattle(class LAMMPS *, int, char **); ~FixRattle(); int setmask(); - void init(); - void post_force(int); - void post_force_respa(int, int, int); - void final_integrate(); - void final_integrate_respa(int,int); - void coordinate_constraints_end_of_step(); + virtual void init(); + virtual void post_force(int); + virtual void post_force_respa(int, int, int); + virtual void final_integrate(); + virtual void final_integrate_respa(int,int); - double memory_usage(); - void grow_arrays(int); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); - void reset_dt(); + virtual void correct_coordinates(int vflag); + virtual void correct_velocities(); + virtual void shake_end_of_step(int vflag); + + virtual double memory_usage(); + virtual void grow_arrays(int); + virtual int pack_forward_comm(int, int *, double *, int, int *); + virtual void unpack_forward_comm(int, int, double *); + virtual void reset_dt(); private: void update_v_half_nocons(); @@ -58,7 +63,7 @@ class FixRattle : public FixShake { void solve3x3exactly(const double a[][3], const double c[], double l[]); void solve2x2exactly(const double a[][2], const double c[], double l[]); - // debugging methosd + // debugging methods bool check3angle(double ** v, int m, bool checkr, bool checkv); bool check2(double **v, int m, bool checkr, bool checkv); @@ -73,6 +78,7 @@ class FixRattle : public FixShake { #endif #endif + /* ERROR/WARNING messages: W: Fix rattle should come after all other integration fixes @@ -82,20 +88,20 @@ atom positions. Thus it should be the last integration fix specified. If not, it will not satisfy the desired constraints as well as it otherwise would. -E: RATTLE determinant = 0.0 +E: Rattle determinant = 0.0 The determinant of the matrix being solved for a single cluster specified by the fix rattle command is numerically invalid. -E: RATTLE failed +E: Rattle failed Certain constraints were not satisfied. -E: RATTLE coordinate constraints are not satisfied up to desired tolerance +E: Coordinate constraints are not satisfied up to desired tolerance Self-explanatory. -E: RATTLE velocity constraints are not satisfied up to desired tolerance +E: Rattle velocity constraints are not satisfied up to desired tolerance Self-explanatory. diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index 5db799e9f0..a2c6c338b7 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -148,6 +148,9 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : tcomputeflag = 0; pcomputeflag = 0; + + id_temp = NULL; + id_press = NULL; } /* ---------------------------------------------------------------------- */ @@ -162,10 +165,8 @@ FixRigidNH::~FixRigidNH() if (rfix) delete [] rfix; - if (tcomputeflag) { - modify->delete_compute(id_temp); - delete [] id_temp; - } + if (tcomputeflag) modify->delete_compute(id_temp); + delete [] id_temp; // delete pressure if fix created it @@ -1265,7 +1266,6 @@ int FixRigidNH::modify_param(int narg, char **arg) { if (strcmp(arg[0],"temp") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command"); if (tcomputeflag) { modify->delete_compute(id_temp); tcomputeflag = 0; diff --git a/src/RIGID/fix_rigid_nh.h b/src/RIGID/fix_rigid_nh.h index 684579b8af..08208e5aac 100644 --- a/src/RIGID/fix_rigid_nh.h +++ b/src/RIGID/fix_rigid_nh.h @@ -69,7 +69,7 @@ class FixRigidNH : public FixRigid { char *id_temp,*id_press; class Compute *temperature,*pressure; - int tcomputeflag,pcomputeflag; + int tcomputeflag,pcomputeflag; // 1 = compute was created by fix. 0 = external void couple(); void remap(); diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 5708bb6602..d8ec174f72 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -163,6 +163,9 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : tcomputeflag = 0; pcomputeflag = 0; + + id_temp = NULL; + id_press = NULL; } /* ---------------------------------------------------------------------- */ @@ -176,10 +179,8 @@ FixRigidNHSmall::~FixRigidNHSmall() if (rfix) delete [] rfix; - if (tcomputeflag) { - modify->delete_compute(id_temp); - delete [] id_temp; - } + if (tcomputeflag) modify->delete_compute(id_temp); + delete [] id_temp; // delete pressure if fix created it @@ -1374,7 +1375,6 @@ int FixRigidNHSmall::modify_param(int narg, char **arg) { if (strcmp(arg[0],"temp") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command"); if (tcomputeflag) { modify->delete_compute(id_temp); tcomputeflag = 0; diff --git a/src/RIGID/fix_rigid_nh_small.h b/src/RIGID/fix_rigid_nh_small.h index f771b8c41b..07510a59e3 100644 --- a/src/RIGID/fix_rigid_nh_small.h +++ b/src/RIGID/fix_rigid_nh_small.h @@ -68,7 +68,7 @@ class FixRigidNHSmall : public FixRigidSmall { char *id_temp,*id_press; class Compute *temperature,*pressure; - int tcomputeflag,pcomputeflag; + int tcomputeflag,pcomputeflag; // 1 = compute was created by fix. 0 = external void couple(); void remap(); diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 18811eee6a..9667a2b2e3 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -17,6 +17,7 @@ #include #include #include "fix_shake.h" +#include "fix_rattle.h" #include "atom.h" #include "atom_vec.h" #include "molecule.h" @@ -56,7 +57,6 @@ FixShake::FixShake(LAMMPS *lmp, int narg, char **arg) : virial_flag = 1; create_attribute = 1; dof_flag = 1; - // error check molecular = atom->molecular; @@ -71,6 +71,9 @@ FixShake::FixShake(LAMMPS *lmp, int narg, char **arg) : shake_type = NULL; xshake = NULL; + ftmp = NULL; + vtmp = NULL; + grow_arrays(atom->nmax); atom->add_callback(0); @@ -206,7 +209,6 @@ FixShake::FixShake(LAMMPS *lmp, int narg, char **arg) : // SHAKE vs RATTLE rattle = 0; - vflag_post_force = 0; // identify all SHAKE clusters @@ -255,6 +257,9 @@ FixShake::~FixShake() memory->destroy(shake_atom); memory->destroy(shake_type); memory->destroy(xshake); + memory->destroy(ftmp); + memory->destroy(vtmp); + delete [] bond_flag; delete [] angle_flag; @@ -433,30 +438,27 @@ void FixShake::setup(int vflag) next_output = (ntimestep/output_every)*output_every + output_every; } else next_output = -1; - // half timestep constraint on pre-step, full timestep thereafter - if (strstr(update->integrate_style,"verlet")) { - respa = 0; - dtv = update->dt; - dtfsq = 0.5 * update->dt * update->dt * force->ftm2v; - FixShake::post_force(vflag); - if (!rattle) dtfsq = update->dt * update->dt * force->ftm2v; + // set respa to 0 if verlet is used and to 1 otherwise - } else { - respa = 1; - dtv = step_respa[0]; - dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; - dtf_inner = dtf_innerhalf; + if (strstr(update->integrate_style,"verlet")) + respa = 0; + else + respa = 1; - // apply correction to all rRESPA levels - for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) { - ((Respa *) update->integrate)->copy_flevel_f(ilevel); - FixShake::post_force_respa(vflag,ilevel,loop_respa[ilevel]-1); - ((Respa *) update->integrate)->copy_f_flevel(ilevel); - } - if (!rattle) dtf_inner = step_respa[0] * force->ftm2v; - } + // correct geometry of cluster if necessary + + correct_coordinates(vflag); + + // remove velocities along any bonds + + correct_velocities(); + + // precalculate constraining forces for first integration step + + shake_end_of_step(vflag); + } /* ---------------------------------------------------------------------- @@ -499,7 +501,7 @@ void FixShake::pre_neighbor() atom2 = atom->map(shake_atom[i][1]); if (atom1 == -1 || atom2 == -1) { char str[128]; - sprintf(str,"Shake atoms " TAGINT_FORMAT " " TAGINT_FORMAT + sprintf(str,"Shake atoms " TAGINT_FORMAT " " TAGINT_FORMAT " missing on proc %d at step " BIGINT_FORMAT, shake_atom[i][0],shake_atom[i][1],me,update->ntimestep); error->one(FLERR,str); @@ -511,7 +513,7 @@ void FixShake::pre_neighbor() atom3 = atom->map(shake_atom[i][2]); if (atom1 == -1 || atom2 == -1 || atom3 == -1) { char str[128]; - sprintf(str,"Shake atoms " + sprintf(str,"Shake atoms " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " missing on proc %d at step " BIGINT_FORMAT, shake_atom[i][0],shake_atom[i][1],shake_atom[i][2], @@ -526,8 +528,8 @@ void FixShake::pre_neighbor() atom4 = atom->map(shake_atom[i][3]); if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1) { char str[128]; - sprintf(str,"Shake atoms " - TAGINT_FORMAT " " TAGINT_FORMAT " " + sprintf(str,"Shake atoms " + TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " missing on proc %d at step " BIGINT_FORMAT, shake_atom[i][0],shake_atom[i][1], @@ -570,9 +572,8 @@ void FixShake::post_force(int vflag) else if (shake_flag[m] == 4) shake4(m); else shake3angle(m); } - + // store vflag for coordinate_constraints_end_of_step() - vflag_post_force = vflag; } @@ -620,7 +621,6 @@ void FixShake::post_force_respa(int vflag, int ilevel, int iloop) } // store vflag for coordinate_constraints_end_of_step() - vflag_post_force = vflag; } @@ -670,7 +670,7 @@ void FixShake::find_clusters() tagint tagprev; double massone; tagint *buf; - + if (me == 0 && screen) { if (!rattle) fprintf(screen,"Finding SHAKE clusters ...\n"); else fprintf(screen,"Finding RATTLE clusters ...\n"); @@ -685,7 +685,7 @@ void FixShake::find_clusters() double *rmass = atom->rmass; int **nspecial = atom->nspecial; tagint **special = atom->special; - + int *molindex = atom->molindex; int *molatom = atom->molatom; @@ -956,7 +956,7 @@ void FixShake::find_clusters() comm->ring(size,sizeof(tagint),buf,2,ring_nshake,buf); // store partner info returned to me - + m = 0; while (m < size) { i = atom->map(buf[m]); @@ -2289,7 +2289,7 @@ int FixShake::bondtype_findset(int i, tagint n1, tagint n2, int setflag) tagint *batom = atommols[imol]->bond_atom[iatom]; btype = atommols[imol]->bond_type[iatom]; nbonds = atommols[imol]->num_bond[iatom]; - + for (m = 0; m < nbonds; m++) { if (n1 == tag[i] && n2 == batom[m]+tagprev) break; if (n1 == batom[m]+tagprev && n2 == tag[i]) break; @@ -2346,7 +2346,7 @@ int FixShake::angletype_findset(int i, tagint n1, tagint n2, int setflag) tagint *aatom3 = atommols[imol]->angle_atom3[iatom]; atype = atommols[imol]->angle_type[iatom]; nangles = atommols[imol]->num_angle[iatom]; - + for (m = 0; m < nangles; m++) { if (n1 == aatom1[m]+tagprev && n2 == aatom3[m]+tagprev) break; if (n1 == aatom3[m]+tagprev && n2 == aatom1[m]+tagprev) break; @@ -2397,6 +2397,11 @@ void FixShake::grow_arrays(int nmax) memory->grow(shake_type,nmax,3,"shake:shake_type"); memory->destroy(xshake); memory->create(xshake,nmax,3,"shake:xshake"); + memory->destroy(ftmp); + memory->create(ftmp,nmax,3,"shake:ftmp"); + memory->destroy(vtmp); + memory->create(vtmp,nmax,3,"shake:vtmp"); + } /* ---------------------------------------------------------------------- @@ -2456,7 +2461,7 @@ void FixShake::update_arrays(int i, int atom_offset) shake_atom[i][0] += atom_offset; shake_atom[i][1] += atom_offset; shake_atom[i][2] += atom_offset; - } else if (flag == 2) { + } else if (flag == 2) { shake_atom[i][0] += atom_offset; shake_atom[i][1] += atom_offset; } else if (flag == 3) { @@ -2602,7 +2607,7 @@ int FixShake::unpack_exchange(int nlocal, double *buf) /* ---------------------------------------------------------------------- */ -int FixShake::pack_forward_comm(int n, int *list, double *buf, +int FixShake::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { int i,j,m; @@ -2683,25 +2688,116 @@ void *FixShake::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- - wrapper method for end_of_step fixes which modify the coordinates + Add coordinate constraining forces; this method is called + at the end of a timestep. ------------------------------------------------------------------------- */ -void FixShake::coordinate_constraints_end_of_step() { +void FixShake::shake_end_of_step(int vflag) { + if (!respa) { + dtv = update->dt; dtfsq = 0.5 * update->dt * update->dt * force->ftm2v; - FixShake::post_force(vflag_post_force); + FixShake::post_force(vflag); if (!rattle) dtfsq = update->dt * update->dt * force->ftm2v; - } - else { + + } else { + dtv = step_respa[0]; dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; dtf_inner = dtf_innerhalf; + // apply correction to all rRESPA levels + for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) { ((Respa *) update->integrate)->copy_flevel_f(ilevel); - FixShake::post_force_respa(vflag_post_force,ilevel,loop_respa[ilevel]-1); + FixShake::post_force_respa(vflag,ilevel,loop_respa[ilevel]-1); ((Respa *) update->integrate)->copy_f_flevel(ilevel); } if (!rattle) dtf_inner = step_respa[0] * force->ftm2v; } } + + +/* ---------------------------------------------------------------------- + wrapper method for end_of_step fixes which modify velocities +------------------------------------------------------------------------- */ + +void FixShake::correct_velocities() { + +} + + +/* ---------------------------------------------------------------------- + Calculate constraining forces based on the current configuration + and change coordinates. +------------------------------------------------------------------------- */ + +void FixShake::correct_coordinates(int vflag) { + + // save current forces and velocities so that you + // initialise them to zero such that FixShake::unconstrained_coordinate_update has no effect + + for (int j=0; jdt * update->dt * force->ftm2v; + FixShake::post_force(vflag); + + // integrate coordiantes: x' = xnp1 + dt^2/2m_i * f, where f is the constraining force + // NOTE: After this command, the coordinates geometry of the molecules will be correct! + + double dtfmsq; + if (rmass) { + for (int i = 0; i < nlocal; i++) { + dtfmsq = dtfsq/ rmass[i]; + x[i][0] = x[i][0] + dtfmsq*f[i][0]; + x[i][1] = x[i][1] + dtfmsq*f[i][1]; + x[i][2] = x[i][2] + dtfmsq*f[i][2]; + } + } + else { + for (int i = 0; i < nlocal; i++) { + dtfmsq = dtfsq / mass[type[i]]; + x[i][0] = x[i][0] + dtfmsq*f[i][0]; + x[i][1] = x[i][1] + dtfmsq*f[i][1]; + x[i][2] = x[i][2] + dtfmsq*f[i][2]; + } + } + + // copy forces and velocities back + + for (int j=0; jdt * update->dt * force->ftm2v; + + // communicate changes + // NOTE: for compatibility xshake is temporarily set to x, such that pack/unpack_forward + // can be used for communicating the coordinates. + + double **xtmp = xshake; + xshake = x; + if (nprocs > 1) { + comm->forward_comm_fix(this); + } + xshake = xtmp; +} diff --git a/src/RIGID/fix_shake.h b/src/RIGID/fix_shake.h index 564d2fa96e..bad1e56e43 100644 --- a/src/RIGID/fix_shake.h +++ b/src/RIGID/fix_shake.h @@ -25,6 +25,9 @@ FixStyle(shake,FixShake) namespace LAMMPS_NS { class FixShake : public Fix { + + friend class FixEHEX; + public: FixShake(class LAMMPS *, int, char **); virtual ~FixShake(); @@ -46,7 +49,13 @@ class FixShake : public Fix { virtual int unpack_exchange(int, double *); virtual int pack_forward_comm(int, int *, double *, int, int *); virtual void unpack_forward_comm(int, int, double *); - virtual void coordinate_constraints_end_of_step(); + + + + virtual void shake_end_of_step(int vflag); + virtual void correct_coordinates(int vflag); + virtual void correct_velocities(); + int dof(int); virtual void reset_dt(); @@ -61,7 +70,7 @@ class FixShake : public Fix { int max_iter; // max # of SHAKE iterations int output_every; // SHAKE stat output every so often bigint next_output; // timestep for next output - + // settings from input command int *bond_flag,*angle_flag; // bond/angle types to constrain int *type_flag; // constrain bonds to these types @@ -77,6 +86,8 @@ class FixShake : public Fix { double *step_respa; double **x,**v,**f; // local ptrs to atom class quantities + double **ftmp, **vtmp; // pointers to temporary arrays for forces and velocities + double *mass,*rmass; int *type; int nlocal; diff --git a/src/SHOCK/fix_nphug.cpp b/src/SHOCK/fix_nphug.cpp index 480b667254..7fc0f8a381 100644 --- a/src/SHOCK/fix_nphug.cpp +++ b/src/SHOCK/fix_nphug.cpp @@ -135,7 +135,7 @@ FixNPHug::FixNPHug(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -153,7 +153,7 @@ FixNPHug::FixNPHug(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; // create a new compute potential energy compute diff --git a/src/USER-CUDA/Install.sh b/src/USER-CUDA/Install.sh deleted file mode 100755 index 5e5bfb26b1..0000000000 --- a/src/USER-CUDA/Install.sh +++ /dev/null @@ -1,203 +0,0 @@ -# Install/unInstall package files in LAMMPS -# mode = 0/1/2 for uninstall/install/update - -mode=$1 - -# arg1 = file, arg2 = file it depends on - -action () { - if (test $mode = 0) then - rm -f ../$1 - elif (! cmp -s $1 ../$1) then - if (test -z "$2" || test -e ../$2) then - cp $1 .. - if (test $mode = 2) then - echo " updating src/$1" - fi - fi - elif (test -n "$2") then - if (test ! -e ../$2) then - rm -f ../$1 - fi - fi -} - -# force rebuild of files with LMP_USER_CUDA switch - -touch ../accelerator_cuda.h -touch ../neighbor.cpp - -# list of files with optional dependencies - -action atom_vec_angle_cuda.cpp atom_vec_angle.cpp -action atom_vec_angle_cuda.h atom_vec_angle.cpp -action atom_vec_atomic_cuda.cpp -action atom_vec_atomic_cuda.h -action atom_vec_charge_cuda.cpp -action atom_vec_charge_cuda.h -action atom_vec_full_cuda.cpp atom_vec_full.cpp -action atom_vec_full_cuda.h atom_vec_full.cpp -action comm_cuda.cpp -action comm_cuda.h -action compute_pe_cuda.cpp -action compute_pe_cuda.h -action compute_pressure_cuda.cpp -action compute_pressure_cuda.h -action compute_temp_cuda.cpp -action compute_temp_cuda.h -action compute_temp_partial_cuda.cpp -action compute_temp_partial_cuda.h -action cuda.cpp -action cuda_data.h -action cuda_modify_flags.h -action cuda_neigh_list.cpp -action cuda_neigh_list.h -action domain_cuda.cpp -action domain_cuda.h -action fft3d_cuda.cpp pppm.cpp -action fft3d_cuda.h pppm.cpp -action fft3d_wrap_cuda.cpp pppm.cpp -action fft3d_wrap_cuda.h pppm.cpp -action fix_addforce_cuda.cpp -action fix_addforce_cuda.h -action fix_aveforce_cuda.cpp -action fix_aveforce_cuda.h -action fix_enforce2d_cuda.cpp -action fix_enforce2d_cuda.h -action fix_freeze_cuda.cpp fix_freeze.cpp -action fix_freeze_cuda.h fix_freeze.cpp -action fix_gravity_cuda.cpp -action fix_gravity_cuda.h -action fix_nh_cuda.cpp -action fix_nh_cuda.h -action fix_npt_cuda.cpp -action fix_npt_cuda.h -action fix_nve_cuda.cpp -action fix_nve_cuda.h -action fix_nvt_cuda.cpp -action fix_nvt_cuda.h -action fix_set_force_cuda.cpp -action fix_set_force_cuda.h -action fix_shake_cuda.cpp -action fix_shake_cuda.h -action fix_temp_berendsen_cuda.cpp -action fix_temp_berendsen_cuda.h -action fix_temp_rescale_cuda.cpp -action fix_temp_rescale_cuda.h -action fix_temp_rescale_limit_cuda.cpp -action fix_temp_rescale_limit_cuda.h -action fix_viscous_cuda.cpp -action fix_viscous_cuda.h -action modify_cuda.cpp -action modify_cuda.h -action neigh_full_cuda.cpp -action neighbor_cuda.cpp -action neighbor_cuda.h -action pair_born_coul_long_cuda.cpp pair_born_coul_long.cpp -action pair_born_coul_long_cuda.h pair_born_coul_long.cpp -action pair_buck_coul_cut_cuda.cpp -action pair_buck_coul_cut_cuda.h -action pair_buck_coul_long_cuda.cpp pair_buck_coul_long.cpp -action pair_buck_coul_long_cuda.h pair_buck_coul_long.cpp -action pair_buck_cuda.cpp -action pair_buck_cuda.h -action pair_eam_alloy_cuda.cpp pair_eam_alloy.cpp -action pair_eam_alloy_cuda.h pair_eam_alloy.cpp -action pair_eam_cuda.cpp pair_eam.cpp -action pair_eam_cuda.h pair_eam.cpp -action pair_eam_fs_cuda.cpp pair_eam_fs.cpp -action pair_eam_fs_cuda.h pair_eam_fs.cpp -action pair_gran_hooke_cuda.cpp pair_gran_hooke.cpp -action pair_gran_hooke_cuda.h pair_gran_hooke.cpp -action pair_lj96_cut_cuda.cpp -action pair_lj96_cut_cuda.h -action pair_lj_charmm_coul_charmm_cuda.cpp pair_lj_charmm_coul_charmm.cpp -action pair_lj_charmm_coul_charmm_cuda.h pair_lj_charmm_coul_charmm.cpp -action pair_lj_charmm_coul_charmm_implicit_cuda.cpp pair_lj_charmm_coul_charmm_implicit.cpp -action pair_lj_charmm_coul_charmm_implicit_cuda.h pair_lj_charmm_coul_charmm_implicit.cpp -action pair_lj_charmm_coul_long_cuda.cpp pair_lj_charmm_coul_long.cpp -action pair_lj_charmm_coul_long_cuda.h pair_lj_charmm_coul_long.cpp -action pair_lj_class2_coul_cut_cuda.cpp pair_lj_class2_coul_cut.cpp -action pair_lj_class2_coul_cut_cuda.h pair_lj_class2_coul_cut.cpp -action pair_lj_class2_coul_long_cuda.cpp pair_lj_class2_coul_long.cpp -action pair_lj_class2_coul_long_cuda.h pair_lj_class2_coul_long.cpp -action pair_lj_class2_cuda.cpp pair_lj_class2.cpp -action pair_lj_class2_cuda.h pair_lj_class2.cpp -action pair_lj_cut_coul_cut_cuda.cpp -action pair_lj_cut_coul_cut_cuda.h -action pair_lj_cut_coul_debye_cuda.cpp -action pair_lj_cut_coul_debye_cuda.h -action pair_lj_cut_coul_long_cuda.cpp pair_lj_cut_coul_long.cpp -action pair_lj_cut_coul_long_cuda.h pair_lj_cut_coul_long.cpp -action pair_lj_cut_cuda.cpp -action pair_lj_cut_cuda.h -action pair_lj_cut_experimental_cuda.cpp -action pair_lj_cut_experimental_cuda.h -action pair_lj_expand_cuda.cpp -action pair_lj_expand_cuda.h -action pair_lj_gromacs_coul_gromacs_cuda.cpp -action pair_lj_gromacs_coul_gromacs_cuda.h -action pair_lj_gromacs_cuda.cpp -action pair_lj_gromacs_cuda.h -action pair_lj_sdk_coul_long_cuda.cpp pair_lj_sdk_coul_long.cpp -action pair_lj_sdk_coul_long_cuda.h pair_lj_sdk_coul_long.cpp -action pair_lj_sdk_cuda.cpp pair_lj_sdk.cpp -action pair_lj_sdk_cuda.h pair_lj_sdk.cpp -action pair_lj_smooth_cuda.cpp -action pair_lj_smooth_cuda.h -action pair_morse_cuda.cpp -action pair_morse_cuda.h -action pair_sw_cuda.cpp pair_sw.cpp -action pair_sw_cuda.h pair_sw.cpp -action pair_tersoff_cuda.cpp pair_tersoff.cpp -action pair_tersoff_cuda.h pair_tersoff.cpp -action pair_tersoff_zbl_cuda.cpp pair_tersoff_zbl.cpp -action pair_tersoff_zbl_cuda.h pair_tersoff_zbl.cpp -action pppm_cuda.cpp pppm.cpp -action pppm_cuda.h pppm.cpp -action pppm_old.cpp pppm.cpp -action pppm_old.h pppm.cpp -action user_cuda.h -action verlet_cuda.cpp -action verlet_cuda.h - -# edit 2 Makefile.package files to include/exclude package info - -if (test $1 = 1) then - - if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*cuda[^ \t]* //g' ../Makefile.package - sed -i -e 's/[^ \t]*CUDA[^ \t]* //g' ../Makefile.package - sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/cuda -DLMP_USER_CUDA |' ../Makefile.package - sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/cuda |' ../Makefile.package - sed -i -e 's|^PKG_LIB =[ \t]*|&-llammpscuda |' ../Makefile.package - sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(user-cuda_SYSINC) |' ../Makefile.package - sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(user-cuda_SYSLIB) |' ../Makefile.package - sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(user-cuda_SYSPATH) |' ../Makefile.package - fi - - if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*cuda.*$/d' ../Makefile.package.settings - # multiline form needed for BSD sed on Macs - sed -i -e '4 i \ -include ..\/..\/lib\/cuda\/Makefile.lammps -' ../Makefile.package.settings - - fi - -elif (test $1 = 0) then - # need to delete a bunch of depenency files because they indirectly depend on user_cuda.h - for f in input.d output.d pair.d fix_omp.d - do \ - rm -f ../Obj_*/$f - done - if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*cuda[^ \t]* //g' ../Makefile.package - sed -i -e 's/[^ \t]*CUDA[^ \t]* //g' ../Makefile.package - fi - - if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*cuda.*$/d' ../Makefile.package.settings - fi - -fi diff --git a/src/USER-CUDA/README b/src/USER-CUDA/README deleted file mode 100644 index b9d2c07f8a..0000000000 --- a/src/USER-CUDA/README +++ /dev/null @@ -1,21 +0,0 @@ -This package provides acceleration of various LAMMPS pair styles, fix -styles, compute styles, and long-range Coulombics via PPPM for NVIDIA -GPUs. - -See this section of the manual to get started: - -doc/Section_accelerate.html, sub-section 5.4 - -There are example scripts for using this package in -examples/USER/cuda. - -This package uses an external library in lib/cuda which must be -compiled before making LAMMPS. See the lib/cuda/README file and the -LAMMPS manual for information on building LAMMPS with external -libraries. The settings in the Makefile.lammps file in that directory -must be correct for LAMMPS to build correctly with this package -installed. - -The person who created this package is Christian Trott at the -University of Technology Ilmenau, Germany (christian.trott at -tu-ilmenau.de). Contact him directly if you have questions. diff --git a/src/USER-CUDA/atom_vec_angle_cuda.cpp b/src/USER-CUDA/atom_vec_angle_cuda.cpp deleted file mode 100644 index c393d58824..0000000000 --- a/src/USER-CUDA/atom_vec_angle_cuda.cpp +++ /dev/null @@ -1,467 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "atom_vec_angle_cuda.h" -#include "comm_cuda_cu.h" -#include "atom_vec_angle_cuda_cu.h" -#include "atom.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" -#include "universe.h" -#include "comm.h" - -using namespace LAMMPS_NS; - -#define BUFFACTOR 1.5 -#define BUFEXTRA 1000 -#define NCUDAEXCHANGE 12 //nextra x y z vx vy vz tag type mask image molecule - -#define BUF_CFLOAT double -/* ---------------------------------------------------------------------- */ - -AtomVecAngleCuda::AtomVecAngleCuda(LAMMPS *lmp) : AtomVecAngle(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - maxsend=0; - cudable=true; - cuda_init_done=false; - max_nsend=0; - cu_copylist=NULL; - copylist=NULL; - copylist2=NULL; -} - -void AtomVecAngleCuda::grow_copylist(int new_max_nsend) -{ - max_nsend=new_max_nsend; - delete cu_copylist; - delete [] copylist2; - if(copylist) CudaWrapper_FreePinnedHostData((void*) copylist); - copylist = (int*) CudaWrapper_AllocPinnedHostData(max_nsend*sizeof(int),false); - copylist2 = new int[max_nsend]; - cu_copylist = new cCudaData (copylist, max_nsend); -} - -void AtomVecAngleCuda::grow_send(int n,double** buf_send,int flag) //need to be able to grow the comm send_buffer since the array sahll be copied from the gpu in whole -{ - int old_maxsend=*maxsend+BUFEXTRA; - *maxsend = static_cast (BUFFACTOR * n); - if (flag) - { - if(cuda->pinned) - { - double* tmp = new double[old_maxsend]; - memcpy((void*) tmp,(void*) *buf_send,old_maxsend*sizeof(double)); - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - memcpy(*buf_send,tmp,old_maxsend*sizeof(double)); - delete [] tmp; - } - else - { - *buf_send = (double *) - memory->srealloc(*buf_send,(*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } - else { - if(cuda->pinned) - { - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - } - else - { - memory->sfree(*buf_send); - *buf_send = (double *) memory->smalloc((*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } -} - -void AtomVecAngleCuda::grow_both(int n) -{ - if(cuda->finished_setup) - { - cuda->cu_special->upload(); - cuda->cu_nspecial->upload(); - cuda->downloadAll(); - } - AtomVecAngle::grow(n); - if(cuda->finished_setup) - { - cuda->checkResize(); - cuda->uploadAll(); - } -} - -int AtomVecAngleCuda::pack_comm(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAngle::pack_comm(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackComm(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -int AtomVecAngleCuda::pack_comm_vel(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAngle::pack_comm_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackCommVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleCuda::unpack_comm(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAngle::unpack_comm(n,first,buf); return;} - - Cuda_CommCuda_UnpackComm(&cuda->shared_data,n,first,(void*)buf); -} - -void AtomVecAngleCuda::unpack_comm_vel(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAngle::unpack_comm_vel(n,first,buf); return;} - - Cuda_CommCuda_UnpackCommVel(&cuda->shared_data,n,first,(void*)buf); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleCuda::pack_reverse(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAngle::pack_reverse(n,first,buf); - - int i,m,last; - cuda->cu_f->download(); - 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]; - } - cuda->cu_f->upload(); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleCuda::unpack_reverse(int n, int *list, double *buf)//usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAngle::unpack_reverse(n,list,buf); return;} - - int i,j,m; - - m = 0; - cuda->cu_f->download(); - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } - cuda->cu_f->upload(); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleCuda::pack_border(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAngle::pack_border(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecAngleCuda_PackBorder(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - return m; -} - -int AtomVecAngleCuda::pack_border_vel(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAngle::pack_border_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecAngleCuda_PackBorderVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleCuda::unpack_border(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAngle::unpack_border(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecAngleCuda_UnpackBorder(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -void AtomVecAngleCuda::unpack_border_vel(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAngle::unpack_border_vel(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecAngleCuda_UnpackBorderVel(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - - -int AtomVecAngleCuda::pack_exchange(int dim, double *buf) -{ - if(cuda->oncpu) - return AtomVecAngle::pack_exchange(dim,buf); - - if(not cuda_init_done||domain->box_change) - { - Cuda_AtomVecAngleCuda_Init(&cuda->shared_data); - cuda_init_done=true; - } - double** buf_pointer=(double**) buf; - if(*maxsendnghost || *buf_pointer==NULL) - { - grow_send(atom->nghost>*maxsend?atom->nghost:*maxsend,buf_pointer,0); - *maxsend=atom->nghost>*maxsend?atom->nghost:*maxsend; - } - - if(max_nsend==0) grow_copylist(200); - - int nsend_atoms = Cuda_AtomVecAngleCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - if(nsend_atoms*NCUDAEXCHANGE>*maxsend) - { - grow_send((int) (nsend_atoms+100)*NCUDAEXCHANGE,buf_pointer,0); - Cuda_AtomVecAngleCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - } - - int nlocal=atom->nlocal-nsend_atoms; - - for(int i=0;i ((*buf_pointer)[j]); - if(i>=nlocal) copylist2[i-nlocal]=-1; - } - - int actpos=0; - for(int j=1;j ((*buf_pointer)[j]); - if(iupload(); - - cuda->shared_data.atom.nlocal=nlocal; - - int m = Cuda_AtomVecAngleCuda_PackExchange(&cuda->shared_data,nsend_atoms,*buf_pointer,cu_copylist->dev_data()); - - my_times time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - - double* buf_p=*buf_pointer; - for(int j=0;j (buf_p[j+1]); - int nextra=0; - int k; - buf_p[m++] = num_bond[i]; - for (k = 0; k < num_bond[i]; k++) { - buf_p[m++] = bond_type[i][k]; - buf_p[m++] = bond_atom[i][k]; - } - nextra+=2*num_bond[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = num_angle[i]; - for (k = 0; k < num_angle[i]; k++) { - buf_p[m++] = angle_type[i][k]; - buf_p[m++] = angle_atom1[i][k]; - buf_p[m++] = angle_atom2[i][k]; - buf_p[m++] = angle_atom3[i][k]; - } - nextra+=4*num_angle[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = nspecial[i][0]; - buf_p[m++] = nspecial[i][1]; - buf_p[m++] = nspecial[i][2]; - for (k = 0; k < nspecial[i][2]; k++) buf_p[m++] = special[i][k]; - nextra+=nspecial[i][2]+3; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - { - int dm= modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf_p[m]); - m+=dm; - nextra+=dm; - if(ifix[atom->extra_grow[iextra]]->copy_arrays(copylist[j],i,1); - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - } - - if(ishared_data.cuda_timings.comm_exchange_cpu_pack+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - (*buf_pointer)[0] = nsend_atoms; - atom->nlocal-=nsend_atoms; - cuda->shared_data.atom.update_nlocal=2; - //printf("End Pack Exchange\n"); - if(m==1) return 0; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleCuda::unpack_exchange(double *buf) -{ -// printf("Begin UnPack Exchange\n"); - if(cuda->oncpu) - return AtomVecAngle::unpack_exchange(buf); - - int dim=cuda->shared_data.exchange_dim; - if(domain->box_change) - Cuda_AtomVecAngleCuda_Init(&cuda->shared_data); - - int mfirst=0; - for(int pi=0;pi<(comm->procgrid[dim]>2?2:1);pi++) - { - int nlocal = atom->nlocal; - int nsend_atoms=static_cast (buf[0]); - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - - if (nlocal+nsend_atoms+atom->nghost>=atom->nmax) grow_both(nlocal+nsend_atoms*2+atom->nghost); //ensure there is enough space on device to unpack data - int naccept = Cuda_AtomVecAngleCuda_UnpackExchange(&cuda->shared_data,nsend_atoms,buf,cu_copylist->dev_data()); - cu_copylist->download(); - int m = nsend_atoms*NCUDAEXCHANGE + 1; - nlocal+=naccept; - - my_times time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - - for(int j=0;j-1) - { - int k; - int i=copylist[j]; - num_bond[i] = static_cast (buf[m++]); - for (k = 0; k < num_bond[i]; k++) { - bond_type[i][k] = static_cast (buf[m++]); - bond_atom[i][k] = static_cast (buf[m++]); - } - - num_angle[i] = static_cast (buf[m++]); - for (k = 0; k < num_angle[i]; k++) { - angle_type[i][k] = static_cast (buf[m++]); - angle_atom1[i][k] = static_cast (buf[m++]); - angle_atom2[i][k] = static_cast (buf[m++]); - angle_atom3[i][k] = static_cast (buf[m++]); - } - - nspecial[i][0] = static_cast (buf[m++]); - nspecial[i][1] = static_cast (buf[m++]); - nspecial[i][2] = static_cast (buf[m++]); - for (k = 0; k < nspecial[i][2]; k++) - special[i][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(i,&buf[m]); - - } - else - m+=static_cast (buf[j+1]); - } - - my_gettime(CLOCK_REALTIME,&time2); - cuda->shared_data.cuda_timings.comm_exchange_cpu_pack+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - cuda->shared_data.atom.nlocal=nlocal; - cuda->shared_data.atom.update_nlocal=2; - atom->nlocal=nlocal; - mfirst+=m; - buf=&buf[m]; - } - return mfirst; -} diff --git a/src/USER-CUDA/atom_vec_angle_cuda.h b/src/USER-CUDA/atom_vec_angle_cuda.h deleted file mode 100644 index 13913da1c0..0000000000 --- a/src/USER-CUDA/atom_vec_angle_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef ATOM_CLASS - -AtomStyle(angle/cuda,AtomVecAngleCuda) - -#else - -#ifndef LMP_ATOM_VEC_ANGLE_CUDA_H -#define LMP_ATOM_VEC_ANGLE_CUDA_H - -#include "atom_vec_angle.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class AtomVecAngleCuda : public AtomVecAngle { - public: - AtomVecAngleCuda(class LAMMPS *); - virtual ~AtomVecAngleCuda() {} - void grow_copylist(int n); - void grow_send(int n,double** buf_send,int flag); - void grow_both(int n); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - private: - class Cuda *cuda; - bool cuda_init_done; - int* copylist; - int* copylist2; - cCudaData* cu_copylist; - int max_nsend; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/atom_vec_atomic_cuda.cpp b/src/USER-CUDA/atom_vec_atomic_cuda.cpp deleted file mode 100644 index c54f7d3127..0000000000 --- a/src/USER-CUDA/atom_vec_atomic_cuda.cpp +++ /dev/null @@ -1,394 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "atom_vec_atomic_cuda.h" -#include "comm_cuda_cu.h" -#include "atom_vec_atomic_cuda_cu.h" -#include "atom.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" -#include "comm.h" - -using namespace LAMMPS_NS; - -#define BUFFACTOR 1.5 -#define BUFEXTRA 1000 -#define NCUDAEXCHANGE 11 //nextra x y z vx vy vz tag type mask image - - -#define BUF_CFLOAT double -/* ---------------------------------------------------------------------- */ - -AtomVecAtomicCuda::AtomVecAtomicCuda(LAMMPS *lmp) : AtomVecAtomic(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - maxsend=0; - cudable=true; - cuda_init_done=false; - max_nsend=0; - cu_copylist=NULL; - copylist=NULL; - copylist2=NULL; -} - -void AtomVecAtomicCuda::grow_copylist(int new_max_nsend) -{ - max_nsend=new_max_nsend; - delete cu_copylist; - delete [] copylist2; - if(copylist) CudaWrapper_FreePinnedHostData((void*) copylist); - copylist = (int*) CudaWrapper_AllocPinnedHostData(max_nsend*sizeof(int),false); - copylist2 = new int[max_nsend]; - cu_copylist = new cCudaData (copylist, max_nsend); -} - -void AtomVecAtomicCuda::grow_send(int n,double** buf_send,int flag) -{ - int old_maxsend=*maxsend+BUFEXTRA; - *maxsend = static_cast (BUFFACTOR * n); - if (flag) - { - if(cuda->pinned) - { - double* tmp = new double[old_maxsend]; - memcpy((void*) tmp,(void*) *buf_send,old_maxsend*sizeof(double)); - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - memcpy(*buf_send,tmp,old_maxsend*sizeof(double)); - delete [] tmp; - } - else - { - *buf_send = (double *) - memory->srealloc(*buf_send,(*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } - else { - if(cuda->pinned) - { - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - } - else - { - memory->sfree(*buf_send); - *buf_send = (double *) memory->smalloc((*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } -} - -void AtomVecAtomicCuda::grow_both(int n) -{ - if(cuda->finished_setup) - cuda->downloadAll(); - AtomVecAtomic::grow(n); - if(cuda->finished_setup) - { - cuda->checkResize(); - cuda->uploadAll(); - } -} - -int AtomVecAtomicCuda::pack_comm(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAtomic::pack_comm(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackComm(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -int AtomVecAtomicCuda::pack_comm_vel(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAtomic::pack_comm_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackCommVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomicCuda::unpack_comm(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAtomic::unpack_comm(n,first,buf); return;} - - Cuda_CommCuda_UnpackComm(&cuda->shared_data,n,first,(void*)buf); -} - -void AtomVecAtomicCuda::unpack_comm_vel(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAtomic::unpack_comm_vel(n,first,buf); return;} - - Cuda_CommCuda_UnpackCommVel(&cuda->shared_data,n,first,(void*)buf); -} -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomicCuda::pack_reverse(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAtomic::pack_reverse(n,first,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 AtomVecAtomicCuda::unpack_reverse(int n, int *list, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAtomic::unpack_reverse(n,list,buf); return;} - - 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 AtomVecAtomicCuda::pack_border(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAtomic::pack_border(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecAtomicCuda_PackBorder(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} - -int AtomVecAtomicCuda::pack_border_vel(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecAtomic::pack_border_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecAtomicCuda_PackBorderVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomicCuda::unpack_border(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAtomic::unpack_border(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) - { - grow_both(0); - } - int flag=Cuda_AtomVecAtomicCuda_UnpackBorder(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} - -} - -void AtomVecAtomicCuda::unpack_border_vel(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecAtomic::unpack_border_vel(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) - { - grow_both(0); - } - int flag=Cuda_AtomVecAtomicCuda_UnpackBorderVel(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - - -int AtomVecAtomicCuda::pack_exchange(int dim, double *buf) -{ - if(cuda->oncpu) - return AtomVecAtomic::pack_exchange(dim,buf); - - if(not cuda_init_done||domain->box_change) - { - Cuda_AtomVecAtomicCuda_Init(&cuda->shared_data); - cuda_init_done=true; - } - double** buf_pointer=(double**) buf; - if(*maxsendnghost || *buf_pointer==NULL) - { - grow_send(atom->nghost>*maxsend?atom->nghost:*maxsend,buf_pointer,0); - *maxsend=atom->nghost>*maxsend?atom->nghost:*maxsend; - } - - if(max_nsend==0) grow_copylist(200); - - int nsend_atoms = Cuda_AtomVecAtomicCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - - if(nsend_atoms>max_nsend) {grow_copylist(nsend_atoms+100);} - if(nsend_atoms*NCUDAEXCHANGE>*maxsend) - { - grow_send((int) (nsend_atoms+100)*NCUDAEXCHANGE,buf_pointer,0); - Cuda_AtomVecAtomicCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - } - - int nlocal=atom->nlocal-nsend_atoms; - - for(int i=0;i ((*buf_pointer)[j]); - if(i>=nlocal) copylist2[i-nlocal]=-1; - } - - int actpos=0; - for(int j=1;j ((*buf_pointer)[j]); - if(iupload(); - - cuda->shared_data.atom.nlocal=nlocal; - - int m = Cuda_AtomVecAtomicCuda_PackExchange(&cuda->shared_data,nsend_atoms,*buf_pointer,cu_copylist->dev_data()); - if (atom->nextra_grow) - for(int j=0;j ((*buf_pointer)[j+1]); - int nextra=0; - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) { - - int dm = modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&((*buf_pointer)[m])); - m+=dm; - nextra+=dm; - if(ifix[atom->extra_grow[iextra]]->copy_arrays(copylist[j],i,1); - if(m>*maxsend) grow_send(m,buf_pointer,1); - } - (*buf_pointer)[j+1] = nextra; - - } - - (*buf_pointer)[0] = nsend_atoms; - atom->nlocal-=nsend_atoms; - cuda->shared_data.atom.update_nlocal=2; - - if(m==1) return 0;//m is at least 1 in cuda since buf[0] contains number of atoms - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomicCuda::unpack_exchange(double *buf) -{ - //printf("Unpack Begin\n"); - if(cuda->oncpu) - return AtomVecAtomic::unpack_exchange(buf); - - int dim=cuda->shared_data.exchange_dim; - if(domain->box_change) - Cuda_AtomVecAtomicCuda_Init(&cuda->shared_data); - - int mfirst=0; - for(int pi=0;pi<(comm->procgrid[dim]>2?2:1);pi++) - { - int nlocal = atom->nlocal; - - int nsend_atoms=static_cast (buf[0]); - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - - if (nlocal+nsend_atoms+atom->nghost>=atom->nmax) grow_both(nlocal+nsend_atoms*2+atom->nghost); - int naccept = Cuda_AtomVecAtomicCuda_UnpackExchange(&cuda->shared_data,nsend_atoms,buf,cu_copylist->dev_data()); - cu_copylist->download(); - int m = nsend_atoms*NCUDAEXCHANGE + 1; - nlocal+=naccept; - if (atom->nextra_grow) - for(int j=0;j-1) - { - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(copylist[j],&buf[m]); - } - else - { - m+=static_cast (buf[j+1]); - } - } - cuda->shared_data.atom.nlocal=nlocal; - if(atom->nlocal!=nlocal) - cuda->shared_data.atom.update_nlocal=2; - atom->nlocal=nlocal; - mfirst+=m; - buf=&buf[m]; - } - return mfirst; -} diff --git a/src/USER-CUDA/atom_vec_atomic_cuda.h b/src/USER-CUDA/atom_vec_atomic_cuda.h deleted file mode 100644 index dabbd9a215..0000000000 --- a/src/USER-CUDA/atom_vec_atomic_cuda.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - 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 ATOM_CLASS - -AtomStyle(atomic/cuda,AtomVecAtomicCuda) - -#else - -#ifndef LMP_ATOM_VEC_ATOMIC_CUDA_H -#define LMP_ATOM_VEC_ATOMIC_CUDA_H - -#include "atom_vec_atomic.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class AtomVecAtomicCuda : public AtomVecAtomic { - public: - AtomVecAtomicCuda(class LAMMPS *); - virtual ~AtomVecAtomicCuda() {} - void grow_copylist(int n); - void grow_send(int n,double** buf_send,int flag); - void grow_both(int n); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - private: - class Cuda *cuda; - bool cuda_init_done; - int* copylist; - int* copylist2; - cCudaData* cu_copylist; - int max_nsend; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/atom_vec_charge_cuda.cpp b/src/USER-CUDA/atom_vec_charge_cuda.cpp deleted file mode 100644 index 07140f3e84..0000000000 --- a/src/USER-CUDA/atom_vec_charge_cuda.cpp +++ /dev/null @@ -1,394 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "atom_vec_charge_cuda.h" -#include "comm_cuda_cu.h" -#include "atom_vec_charge_cuda_cu.h" -#include "atom.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" -#include "comm.h" - -using namespace LAMMPS_NS; - -#define BUFFACTOR 1.5 -#define BUFEXTRA 1000 -#define NCUDAEXCHANGE 12 //nextra x y z vx vy vz tag type mask image q - -#define BUF_CFLOAT double -/* ---------------------------------------------------------------------- */ - -AtomVecChargeCuda::AtomVecChargeCuda(LAMMPS *lmp) : AtomVecCharge(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - maxsend=0; - cudable=true; - cuda_init_done=false; - max_nsend=0; - cu_copylist=NULL; - copylist=NULL; - copylist2=NULL; -} - -void AtomVecChargeCuda::grow_copylist(int new_max_nsend) -{ - max_nsend=new_max_nsend; - delete cu_copylist; - delete [] copylist2; - if(copylist) CudaWrapper_FreePinnedHostData((void*) copylist); - copylist = (int*) CudaWrapper_AllocPinnedHostData(max_nsend*sizeof(int),false); - copylist2 = new int[max_nsend]; - cu_copylist = new cCudaData (copylist, max_nsend); -} - -void AtomVecChargeCuda::grow_send(int n,double** buf_send,int flag) //need to be able to grow the comm send_buffer since the array sahll be copied from the gpu in whole -{ - int old_maxsend=*maxsend+BUFEXTRA; - *maxsend = static_cast (BUFFACTOR * n); - if (flag) - { - if(cuda->pinned) - { - double* tmp = new double[old_maxsend]; - memcpy((void*) tmp,(void*) *buf_send,old_maxsend*sizeof(double)); - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - memcpy(*buf_send,tmp,old_maxsend*sizeof(double)); - delete [] tmp; - } - else - { - *buf_send = (double *) - memory->srealloc(*buf_send,(*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } - else { - if(cuda->pinned) - { - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - } - else - { - memory->sfree(*buf_send); - *buf_send = (double *) memory->smalloc((*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } -} - -void AtomVecChargeCuda::grow_both(int n) -{ - if(cuda->finished_setup) - cuda->downloadAll(); - AtomVecCharge::grow(n); - if(cuda->finished_setup) - { - cuda->checkResize(); - cuda->uploadAll(); - } -} - -int AtomVecChargeCuda::pack_comm(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecCharge::pack_comm(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackComm(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -int AtomVecChargeCuda::pack_comm_vel(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecCharge::pack_comm_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackCommVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecChargeCuda::unpack_comm(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecCharge::unpack_comm(n,first,buf); return;} - - Cuda_CommCuda_UnpackComm(&cuda->shared_data,n,first,(void*)buf); -} - -void AtomVecChargeCuda::unpack_comm_vel(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecCharge::unpack_comm_vel(n,first,buf); return;} - - Cuda_CommCuda_UnpackCommVel(&cuda->shared_data,n,first,(void*)buf); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeCuda::pack_reverse(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecCharge::pack_reverse(n,first,buf); - - int i,m,last; - cuda->cu_f->download(); - 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]; - } - cuda->cu_f->upload(); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecChargeCuda::unpack_reverse(int n, int *list, double *buf)//usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecCharge::unpack_reverse(n,list,buf); return;} - - int i,j,m; - - m = 0; - cuda->cu_f->download(); - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } - cuda->cu_f->upload(); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeCuda::pack_border(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecCharge::pack_border(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecChargeCuda_PackBorder(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} - -int AtomVecChargeCuda::pack_border_vel(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecCharge::pack_border_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecChargeCuda_PackBorderVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecChargeCuda::unpack_border(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecCharge::unpack_border(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecChargeCuda_UnpackBorder(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -void AtomVecChargeCuda::unpack_border_vel(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecCharge::unpack_border_vel(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecChargeCuda_UnpackBorderVel(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - - -int AtomVecChargeCuda::pack_exchange(int dim, double *buf) -{ - if(cuda->oncpu) - return AtomVecCharge::pack_exchange(dim,buf); - - if(not cuda_init_done||domain->box_change) - { - Cuda_AtomVecChargeCuda_Init(&cuda->shared_data); - cuda_init_done=true; - } - double** buf_pointer=(double**) buf; - if(*maxsendnghost || *buf_pointer==NULL) - { - grow_send(atom->nghost>*maxsend?atom->nghost:*maxsend,buf_pointer,0); - *maxsend=atom->nghost>*maxsend?atom->nghost:*maxsend; - } - - if(max_nsend==0) grow_copylist(200); - - int nsend_atoms = Cuda_AtomVecChargeCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - if(nsend_atoms*NCUDAEXCHANGE>*maxsend) - { - grow_send((int) (nsend_atoms+100)*NCUDAEXCHANGE,buf_pointer,0); - Cuda_AtomVecChargeCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - } - - int nlocal=atom->nlocal-nsend_atoms; - - for(int i=0;i ((*buf_pointer)[j]); - if(i>=nlocal) copylist2[i-nlocal]=-1; - } - - int actpos=0; - for(int j=1;j ((*buf_pointer)[j]); - if(iupload(); - - cuda->shared_data.atom.nlocal=nlocal; - - int m = Cuda_AtomVecChargeCuda_PackExchange(&cuda->shared_data,nsend_atoms,*buf_pointer,cu_copylist->dev_data()); - - if (atom->nextra_grow) - for(int j=0;j ((*buf_pointer)[j+1]); - int nextra=0; - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) { - - int dm = modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&((*buf_pointer)[m])); - m+=dm; - nextra+=dm; - if(ifix[atom->extra_grow[iextra]]->copy_arrays(copylist[j],i,1); - if(m>*maxsend) grow_send(m,buf_pointer,1); - } - (*buf_pointer)[j+1] = nextra; - } - - (*buf_pointer)[0] = nsend_atoms; - atom->nlocal-=nsend_atoms; - cuda->shared_data.atom.update_nlocal=2; - - if(m==1) return 0;//m is at least 1 in cuda since buf[0] contains number of atoms - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeCuda::unpack_exchange(double *buf) -{ - if(cuda->oncpu) - return AtomVecCharge::unpack_exchange(buf); - - int dim=cuda->shared_data.exchange_dim; - if(domain->box_change) - Cuda_AtomVecChargeCuda_Init(&cuda->shared_data); - - int mfirst=0; - for(int pi=0;pi<(comm->procgrid[dim]>2?2:1);pi++) - { - int nlocal = atom->nlocal; - int nsend_atoms=static_cast (buf[0]); - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - - if (nlocal+nsend_atoms+atom->nghost>=atom->nmax) grow_both(nlocal+nsend_atoms*2+atom->nghost); - int naccept = Cuda_AtomVecChargeCuda_UnpackExchange(&cuda->shared_data,nsend_atoms,buf,cu_copylist->dev_data()); - cu_copylist->download(); - int m = nsend_atoms*NCUDAEXCHANGE + 1; - nlocal+=naccept; - if (atom->nextra_grow) - for(int j=0;j-1) - { - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(copylist[j],&buf[m]); - } - else - m+=static_cast (buf[j+1]); - } - cuda->shared_data.atom.nlocal=nlocal; - cuda->shared_data.atom.update_nlocal=2; - atom->nlocal=nlocal; - mfirst+=m; - buf=&buf[m]; - } - return mfirst; -} diff --git a/src/USER-CUDA/atom_vec_charge_cuda.h b/src/USER-CUDA/atom_vec_charge_cuda.h deleted file mode 100644 index 25d431c917..0000000000 --- a/src/USER-CUDA/atom_vec_charge_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef ATOM_CLASS - -AtomStyle(charge/cuda,AtomVecChargeCuda) - -#else - -#ifndef LMP_ATOM_VEC_CHARGE_CUDA_H -#define LMP_ATOM_VEC_CHARGE_CUDA_H - -#include "atom_vec_charge.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class AtomVecChargeCuda : public AtomVecCharge { - public: - AtomVecChargeCuda(class LAMMPS *); - virtual ~AtomVecChargeCuda() {} - void grow_copylist(int n); - void grow_send(int n,double** buf_send,int flag); - void grow_both(int n); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - private: - class Cuda *cuda; - bool cuda_init_done; - int* copylist; - int* copylist2; - cCudaData* cu_copylist; - int max_nsend; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/atom_vec_full_cuda.cpp b/src/USER-CUDA/atom_vec_full_cuda.cpp deleted file mode 100644 index dda12603db..0000000000 --- a/src/USER-CUDA/atom_vec_full_cuda.cpp +++ /dev/null @@ -1,508 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "atom_vec_full_cuda.h" -#include "comm_cuda_cu.h" -#include "atom_vec_full_cuda_cu.h" -#include "atom.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" -#include "universe.h" -#include "comm.h" - -using namespace LAMMPS_NS; - -#define BUFFACTOR 1.5 -#define BUFEXTRA 1000 -#define NCUDAEXCHANGE 13 //nextra x y z vx vy vz tag type mask image q molecule - -#define BUF_CFLOAT double -/* ---------------------------------------------------------------------- */ - -AtomVecFullCuda::AtomVecFullCuda(LAMMPS *lmp) : - AtomVecFull(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - maxsend=0; - cudable=true; - cuda_init_done=false; - max_nsend=0; - cu_copylist=NULL; - copylist=NULL; - copylist2=NULL; -} - -void AtomVecFullCuda::grow_copylist(int new_max_nsend) -{ - max_nsend=new_max_nsend; - delete cu_copylist; - delete [] copylist2; - if(copylist) CudaWrapper_FreePinnedHostData((void*) copylist); - copylist = (int*) CudaWrapper_AllocPinnedHostData(max_nsend*sizeof(int),false); - copylist2 = new int[max_nsend]; - cu_copylist = new cCudaData (copylist, max_nsend); -} - -void AtomVecFullCuda::grow_send(int n,double** buf_send,int flag) //need to be able to grow the comm send_buffer since the array sahll be copied from the gpu in whole -{ - int old_maxsend=*maxsend+BUFEXTRA; - *maxsend = static_cast (BUFFACTOR * n); - if (flag) - { - if(cuda->pinned) - { - double* tmp = new double[old_maxsend]; - memcpy((void*) tmp,(void*) *buf_send,old_maxsend*sizeof(double)); - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - memcpy(*buf_send,tmp,old_maxsend*sizeof(double)); - delete [] tmp; - } - else - { - *buf_send = (double *) - memory->srealloc(*buf_send,(*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } - else { - if(cuda->pinned) - { - if(*buf_send) CudaWrapper_FreePinnedHostData((void*) (*buf_send)); - *buf_send = (double*) CudaWrapper_AllocPinnedHostData((*maxsend+BUFEXTRA)*sizeof(double),false); - } - else - { - memory->sfree(*buf_send); - *buf_send = (double *) memory->smalloc((*maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - } -} - -void AtomVecFullCuda::grow_both(int n) -{ - if(cuda->finished_setup) - { - cuda->cu_special->upload(); - cuda->cu_nspecial->upload(); - cuda->downloadAll(); - } - AtomVecFull::grow(n); - if(cuda->finished_setup) - { - cuda->checkResize(); - cuda->uploadAll(); - } -} - -int AtomVecFullCuda::pack_comm(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecFull::pack_comm(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackComm(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -int AtomVecFullCuda::pack_comm_vel(int n, int* iswap, double *buf, - int pbc_flag, int *pbc) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecFull::pack_comm_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_CommCuda_PackCommVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - if((sizeof(X_CFLOAT)!=sizeof(double)) && m) - m=(m+1)*sizeof(X_CFLOAT)/sizeof(double); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFullCuda::unpack_comm(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecFull::unpack_comm(n,first,buf); return;} - - Cuda_CommCuda_UnpackComm(&cuda->shared_data,n,first,(void*)buf); -} - -void AtomVecFullCuda::unpack_comm_vel(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only positions are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecFull::unpack_comm_vel(n,first,buf); return;} - - Cuda_CommCuda_UnpackCommVel(&cuda->shared_data,n,first,(void*)buf); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullCuda::pack_reverse(int n, int first, double *buf) //usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecFull::pack_reverse(n,first,buf); - - int i,m,last; - cuda->cu_f->download(); - 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]; - } - cuda->cu_f->upload(); - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFullCuda::unpack_reverse(int n, int *list, double *buf)//usually this should not be called since comm->communicate handles the communication if only forces are exchanged -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecFull::unpack_reverse(n,list,buf); return;} - - int i,j,m; - - m = 0; - cuda->cu_f->download(); - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } - cuda->cu_f->upload(); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullCuda::pack_border(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecFull::pack_border(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecFullCuda_PackBorder(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - return m; -} - -int AtomVecFullCuda::pack_border_vel(int n, int *iswap, double *buf, - int pbc_flag, int *pbc) -{ - if(not cuda->finished_setup || cuda->oncpu) - return AtomVecFull::pack_border_vel(n,iswap,buf,pbc_flag,pbc); - - int m = Cuda_AtomVecFullCuda_PackBorderVel(&cuda->shared_data,n,*iswap,(void*) buf,pbc,pbc_flag); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFullCuda::unpack_border(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecFull::unpack_border(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecFullCuda_UnpackBorder(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -void AtomVecFullCuda::unpack_border_vel(int n, int first, double *buf) -{ - if(not cuda->finished_setup || cuda->oncpu) - {AtomVecFull::unpack_border_vel(n,first,buf); return;} - while(atom->nghost+atom->nlocal+n>=cuda->shared_data.atom.nmax) //ensure there is enough space on device to unpack data - { - grow_both(0); - } - int flag=Cuda_AtomVecFullCuda_UnpackBorderVel(&cuda->shared_data,n,first,(void*)buf); - if(flag) {printf(" # CUDA: Error: Failed to unpack Border atoms (This might be a bug).\n");} -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - - -int AtomVecFullCuda::pack_exchange(int dim, double *buf) -{ - if(cuda->oncpu) - return AtomVecFull::pack_exchange(dim,buf); - - if(not cuda_init_done||domain->box_change) - { - Cuda_AtomVecFullCuda_Init(&cuda->shared_data); - cuda_init_done=true; - } - double** buf_pointer=(double**) buf; - if(*maxsendnghost || *buf_pointer==NULL) - { - grow_send(atom->nghost>*maxsend?atom->nghost:*maxsend,buf_pointer,0); - *maxsend=atom->nghost>*maxsend?atom->nghost:*maxsend; - } - - if(max_nsend==0) grow_copylist(200); - - int nsend_atoms = Cuda_AtomVecFullCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - if(nsend_atoms*NCUDAEXCHANGE>*maxsend) - { - grow_send((int) (nsend_atoms+100)*NCUDAEXCHANGE,buf_pointer,0); - Cuda_AtomVecFullCuda_PackExchangeList(&cuda->shared_data,*maxsend,dim,*buf_pointer); - } - - int nlocal=atom->nlocal-nsend_atoms; - - for(int i=0;i ((*buf_pointer)[j]); - if(i>=nlocal) copylist2[i-nlocal]=-1; - } - - int actpos=0; - for(int j=1;j ((*buf_pointer)[j]); - if(iupload(); - - cuda->shared_data.atom.nlocal=nlocal; - - int m = Cuda_AtomVecFullCuda_PackExchange(&cuda->shared_data,nsend_atoms,*buf_pointer,cu_copylist->dev_data()); - - my_times time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - - double* buf_p=*buf_pointer; - for(int j=0;j (buf_p[j+1]); - int nextra=0; - int k; - buf_p[m++] = num_bond[i]; - for (k = 0; k < num_bond[i]; k++) { - buf_p[m++] = bond_type[i][k]; - buf_p[m++] = bond_atom[i][k]; - } - nextra+=2*num_bond[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = num_angle[i]; - for (k = 0; k < num_angle[i]; k++) { - buf_p[m++] = angle_type[i][k]; - buf_p[m++] = angle_atom1[i][k]; - buf_p[m++] = angle_atom2[i][k]; - buf_p[m++] = angle_atom3[i][k]; - } - nextra+=4*num_angle[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = num_dihedral[i]; - for (k = 0; k < num_dihedral[i]; k++) { - buf_p[m++] = dihedral_type[i][k]; - buf_p[m++] = dihedral_atom1[i][k]; - buf_p[m++] = dihedral_atom2[i][k]; - buf_p[m++] = dihedral_atom3[i][k]; - buf_p[m++] = dihedral_atom4[i][k]; - } - nextra+=5*num_dihedral[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = num_improper[i]; - for (k = 0; k < num_improper[i]; k++) { - buf_p[m++] = improper_type[i][k]; - buf_p[m++] = improper_atom1[i][k]; - buf_p[m++] = improper_atom2[i][k]; - buf_p[m++] = improper_atom3[i][k]; - buf_p[m++] = improper_atom4[i][k]; - } - nextra+=5*num_improper[i]+1; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - buf_p[m++] = nspecial[i][0]; - buf_p[m++] = nspecial[i][1]; - buf_p[m++] = nspecial[i][2]; - for (k = 0; k < nspecial[i][2]; k++) buf_p[m++] = special[i][k]; - nextra+=nspecial[i][2]+3; - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - { - int dm= modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf_p[m]); - m+=dm; - nextra+=dm; - if(ifix[atom->extra_grow[iextra]]->copy_arrays(copylist[j],i,1); - if(m>*maxsend) {grow_send(m,buf_pointer,1); buf_p=*buf_pointer;} - } - - if(ishared_data.cuda_timings.comm_exchange_cpu_pack+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - (*buf_pointer)[0] = nsend_atoms; - atom->nlocal-=nsend_atoms; - cuda->shared_data.atom.update_nlocal=2; - //printf("End Pack Exchange\n"); - if(m==1) return 0; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullCuda::unpack_exchange(double *buf) -{ -// printf("Begin UnPack Exchange\n"); - if(cuda->oncpu) - return AtomVecFull::unpack_exchange(buf); - - int dim=cuda->shared_data.exchange_dim; - if(domain->box_change) - Cuda_AtomVecFullCuda_Init(&cuda->shared_data); - - int mfirst=0; - for(int pi=0;pi<(comm->procgrid[dim]>2?2:1);pi++) - { - int nlocal = atom->nlocal; - int nsend_atoms=static_cast (buf[0]); - if(nsend_atoms>max_nsend) grow_copylist(nsend_atoms+100); - - if (nlocal+nsend_atoms+atom->nghost>=atom->nmax) grow_both(nlocal+nsend_atoms*2+atom->nghost); //ensure there is enough space on device to unpack data - int naccept = Cuda_AtomVecFullCuda_UnpackExchange(&cuda->shared_data,nsend_atoms,buf,cu_copylist->dev_data()); - cu_copylist->download(); - int m = nsend_atoms*NCUDAEXCHANGE + 1; - nlocal+=naccept; - - my_times time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - - for(int j=0;j-1) - { - int k; - int i=copylist[j]; - num_bond[i] = static_cast (buf[m++]); - for (k = 0; k < num_bond[i]; k++) { - bond_type[i][k] = static_cast (buf[m++]); - bond_atom[i][k] = static_cast (buf[m++]); - } - - num_angle[i] = static_cast (buf[m++]); - for (k = 0; k < num_angle[i]; k++) { - angle_type[i][k] = static_cast (buf[m++]); - angle_atom1[i][k] = static_cast (buf[m++]); - angle_atom2[i][k] = static_cast (buf[m++]); - angle_atom3[i][k] = static_cast (buf[m++]); - } - - num_dihedral[i] = static_cast (buf[m++]); - for (k = 0; k < num_dihedral[i]; k++) { - dihedral_type[i][k] = static_cast (buf[m++]); - dihedral_atom1[i][k] = static_cast (buf[m++]); - dihedral_atom2[i][k] = static_cast (buf[m++]); - dihedral_atom3[i][k] = static_cast (buf[m++]); - dihedral_atom4[i][k] = static_cast (buf[m++]); - } - - num_improper[i] = static_cast (buf[m++]); - for (k = 0; k < num_improper[i]; k++) { - improper_type[i][k] = static_cast (buf[m++]); - improper_atom1[i][k] = static_cast (buf[m++]); - improper_atom2[i][k] = static_cast (buf[m++]); - improper_atom3[i][k] = static_cast (buf[m++]); - improper_atom4[i][k] = static_cast (buf[m++]); - } - - nspecial[i][0] = static_cast (buf[m++]); - nspecial[i][1] = static_cast (buf[m++]); - nspecial[i][2] = static_cast (buf[m++]); - for (k = 0; k < nspecial[i][2]; k++) - special[i][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(i,&buf[m]); - - } - else - m+=static_cast (buf[j+1]); - } - - my_gettime(CLOCK_REALTIME,&time2); - cuda->shared_data.cuda_timings.comm_exchange_cpu_pack+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - cuda->shared_data.atom.nlocal=nlocal; - cuda->shared_data.atom.update_nlocal=2; - atom->nlocal=nlocal; - mfirst+=m; - buf=&buf[m]; - } - return mfirst; -} diff --git a/src/USER-CUDA/atom_vec_full_cuda.h b/src/USER-CUDA/atom_vec_full_cuda.h deleted file mode 100644 index 4ce1b24a51..0000000000 --- a/src/USER-CUDA/atom_vec_full_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef ATOM_CLASS - -AtomStyle(full/cuda,AtomVecFullCuda) - -#else - -#ifndef LMP_ATOM_VEC_FULL_CUDA_H -#define LMP_ATOM_VEC_FULL_CUDA_H - -#include "atom_vec_full.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class AtomVecFullCuda : public AtomVecFull { - public: - AtomVecFullCuda(class LAMMPS *); - virtual ~AtomVecFullCuda() {} - void grow_copylist(int n); - void grow_send(int n,double** buf_send,int flag); - void grow_both(int n); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - private: - class Cuda *cuda; - bool cuda_init_done; - int* copylist; - int* copylist2; - cCudaData* cu_copylist; - int max_nsend; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/comm_cuda.cpp b/src/USER-CUDA/comm_cuda.cpp deleted file mode 100644 index a03f873ce2..0000000000 --- a/src/USER-CUDA/comm_cuda.cpp +++ /dev/null @@ -1,1375 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author (triclinic) : Pieter in 't Veld (SNL) -------------------------------------------------------------------------- */ - -#ifdef LAMMPS_BIGBIG -#error LAMMPS_BIGBIG not supported by this file -#endif - -#include -#include -#include -#include -#include -#include "comm_cuda.h" -#include "atom.h" -#include "atom_vec.h" -#include "force.h" -#include "pair.h" -#include "domain.h" -#include "neighbor.h" -#include "modify.h" -#include "fix.h" -#include "group.h" -#include "compute.h" -#include "user_cuda.h" -#include "error.h" -#include "memory.h" -#include "comm_cuda_cu.h" - -using namespace LAMMPS_NS; - -#define BUFFACTOR 1.5 -#define BUFMIN 1000 -#define BUFEXTRA 1000 - - - -#define BIG 1.0e20 - -enum{SINGLE,MULTI}; - -/* ---------------------------------------------------------------------- - setup MPI and allocate buffer space -------------------------------------------------------------------------- */ - -CommCuda::CommCuda(LAMMPS *lmp) : CommBrick(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - cu_pbc=NULL; - cu_slablo=NULL; - cu_slabhi=NULL; - cu_multilo=NULL; - cu_multihi=NULL; - cu_sendlist=NULL; - - - memory->sfree(buf_send); - memory->sfree(buf_recv); - buf_send = NULL; - buf_recv = NULL; - - CommBrick::free_swap(); - allocate_swap(maxswap); -} - -/* ---------------------------------------------------------------------- */ - -CommCuda::~CommCuda() -{ - delete cu_sendlist; - if(cuda->pinned) - { - CudaWrapper_FreePinnedHostData((void*)buf_send); - CudaWrapper_FreePinnedHostData((void*)buf_recv); - } - else - { - memory->sfree(buf_send); - memory->sfree(buf_recv); - } - buf_send=NULL; - buf_recv=NULL; -} - -/* ---------------------------------------------------------------------- */ - -void CommCuda::init() -{ - if(not buf_send) - grow_send(maxsend,0); - if(not buf_recv) - grow_recv(maxrecv); - if(not cu_sendlist) - { - cu_sendlist=new cCudaData ((int*)sendlist,maxswap,BUFMIN); - cuda->shared_data.comm.sendlist.dev_data=cu_sendlist->dev_data(); - cuda->shared_data.comm.maxswap=maxswap; - cuda->shared_data.comm.maxlistlength=BUFMIN; - cu_sendlist->upload(); - } - delete cu_pbc; - cu_pbc=new cCudaData ((int*)pbc,cuda->shared_data.comm.maxswap,6); - cu_pbc->upload(); - - delete cu_slablo; - cu_slablo = new cCudaData(slablo,cuda->shared_data.comm.maxswap); - cu_slablo->upload(); - - delete cu_slabhi; - cu_slabhi = new cCudaData(slabhi,cuda->shared_data.comm.maxswap); - cu_slabhi->upload(); - - cuda->shared_data.comm.pbc.dev_data=cu_pbc->dev_data(); - cuda->shared_data.comm.slablo.dev_data=cu_slablo->dev_data(); - cuda->shared_data.comm.slabhi.dev_data=cu_slabhi->dev_data(); - - CommBrick::init(); -} - -/* ---------------------------------------------------------------------- - setup spatial-decomposition communication patterns - function of neighbor cutoff(s) & cutghostuser & current box size - single style sets slab boundaries (slablo,slabhi) based on max cutoff - multi style sets type-dependent slab boundaries (multilo,multihi) -------------------------------------------------------------------------- */ - -void CommCuda::setup() -{ - if(cuda->shared_data.pair.neighall) cutghostuser = MAX(2.0*neighbor->cutneighmax,cutghostuser); - CommBrick::setup(); - - //upload changed geometry to device - if(style == SINGLE) - { - if(cu_slablo) cu_slablo->upload(); - if(cu_slabhi) cu_slabhi->upload(); - } - else - { - if(cu_multilo) cu_multilo->upload(); - if(cu_multihi) cu_multihi->upload(); - } -} - -/* ---------------------------------------------------------------------- - forward communication of atom coords every timestep - other per-atom attributes may also be sent via pack/unpack routines -------------------------------------------------------------------------- */ - -void CommCuda::forward_comm(int mode) -{ - if(mode==0) return forward_comm_cuda(); - if(mode==1) return forward_comm_pack_cuda(); - if(mode==2) return forward_comm_transfer_cuda(); - if(mode==3) return forward_comm_unpack_cuda(); -} - - -void CommCuda::forward_comm_cuda() -{ - my_times time1,time2,time3; - - int n; - MPI_Request request; - AtomVec *avec = atom->avec; - - cuda->shared_data.domain.xy=domain->xy; - cuda->shared_data.domain.xz=domain->xz; - cuda->shared_data.domain.yz=domain->yz; - cuda->shared_data.domain.prd[0]=domain->prd[0]; - cuda->shared_data.domain.prd[1]=domain->prd[1]; - cuda->shared_data.domain.prd[2]=domain->prd[2]; - cuda->shared_data.domain.triclinic=domain->triclinic; - if(not comm_x_only && not avec->cudable) - { - cuda->downloadAll(); - CommBrick::forward_comm(); - cuda->uploadAll(); - return; - } - - // exchange data with another proc - // if other proc is self, just copy - // if comm_x_only set, exchange or copy directly to x, don't unpack - - for (int iswap = 0; iswap < nswap; iswap++) { - if (sendproc[iswap] != me) - { - if (comm_x_only) - { - - int size_forward_recv_now=0; - - if((sizeof(X_CFLOAT)!=sizeof(double)) && size_forward_recv[iswap]) //some complicated way to safe some transfer size if single precision is used - size_forward_recv_now=(size_forward_recv[iswap]+1)*sizeof(X_CFLOAT)/sizeof(double); - else - size_forward_recv_now=size_forward_recv[iswap]; -my_gettime(CLOCK_REALTIME,&time1); - - MPI_Irecv(buf_recv,size_forward_recv_now,MPI_DOUBLE, - recvproc[iswap],0,world,&request); - n = Cuda_CommCuda_PackComm(&cuda->shared_data,sendnum[iswap],iswap,(void*) buf_send,pbc[iswap],pbc_flag[iswap]); - -my_gettime(CLOCK_REALTIME,&time2); - - if((sizeof(X_CFLOAT)!=sizeof(double)) && n) //some complicated way to safe some transfer size if single precision is used - n=(n+1)*sizeof(X_CFLOAT)/sizeof(double); - - //printf("RecvSize: %i SendSize: %i\n",size_forward_recv_now,n); - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - -my_gettime(CLOCK_REALTIME,&time3); -cuda->shared_data.cuda_timings.comm_forward_mpi_upper+= - time3.tv_sec-time1.tv_sec+1.0*(time3.tv_nsec-time1.tv_nsec)/1000000000; -cuda->shared_data.cuda_timings.comm_forward_mpi_lower+= - time3.tv_sec-time2.tv_sec+1.0*(time3.tv_nsec-time2.tv_nsec)/1000000000; - - Cuda_CommCuda_UnpackComm(&cuda->shared_data,recvnum[iswap],firstrecv[iswap],(void*)buf_recv,iswap); //Unpack for cpu exchange happens implicitely since buf==x[firstrecv] - - } - else if (ghost_velocity) - { - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - - if(avec->cudable) - n = avec->pack_comm_vel(sendnum[iswap],&iswap, - buf_send,pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_recv); - } - else - { - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - - if(avec->cudable) - n = avec->pack_comm(sendnum[iswap],&iswap, - buf_send,pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_recv); - } - - } - else //sendproc == me - { - cuda->self_comm=1; - if (comm_x_only) - { - if (sendnum[iswap]) - { - n = Cuda_CommCuda_PackComm_Self(&cuda->shared_data,sendnum[iswap],iswap,firstrecv[iswap],pbc[iswap],pbc_flag[iswap]); - if(n<0) error->all(FLERR," # CUDA ERRROR on PackComm_Self"); - if((sizeof(X_CFLOAT)!=sizeof(double)) && n) - n=(n+1)*sizeof(X_CFLOAT)/sizeof(double); - } - } - else if (ghost_velocity) - { - n = avec->pack_comm_vel(sendnum[iswap],&iswap, - (double*) firstrecv,pbc_flag[iswap],pbc[iswap]); - //avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],(double*) firstrecv); - } - else - { - n = avec->pack_comm(sendnum[iswap],&iswap, - (double*) firstrecv,pbc_flag[iswap],pbc[iswap]); - //avec->unpack_comm(recvnum[iswap],firstrecv[iswap],(double*) firstrecv); - } - cuda->self_comm=0; - } - } -} - -void CommCuda::forward_comm_pack_cuda() -{ - my_times time1,time2; - int n; // initialize comm buffers & exchange memory - - MPI_Request request; - AtomVec *avec = atom->avec; - - cuda->shared_data.domain.xy=domain->xy; - cuda->shared_data.domain.xz=domain->xz; - cuda->shared_data.domain.yz=domain->yz; - cuda->shared_data.domain.prd[0]=domain->prd[0]; - cuda->shared_data.domain.prd[1]=domain->prd[1]; - cuda->shared_data.domain.prd[2]=domain->prd[2]; - cuda->shared_data.domain.triclinic=domain->triclinic; - if(not comm_x_only && not avec->cudable) cuda->downloadAll(); //if not comm_x_only the communication routine of the atom_vec style class is used - - // exchange data with another proc - // if other proc is self, just copy - // if comm_x_only set, exchange or copy directly to x, don't unpack - - for (int iswap = 0; iswap < nswap; iswap++) { - if (sendproc[iswap] != me) - { - if (comm_x_only) - { - - -my_gettime(CLOCK_REALTIME,&time1); - - // n = Cuda_CommCuda_PackComm(&cuda->shared_data,sendnum[iswap],iswap,(void*) cuda->shared_data.comm.buf_send[iswap],pbc[iswap],pbc_flag[iswap]); - n = Cuda_CommCuda_PackComm(&cuda->shared_data,sendnum[iswap],iswap,(void*)buf_send,pbc[iswap],pbc_flag[iswap]); - -my_gettime(CLOCK_REALTIME,&time2); - - if((sizeof(X_CFLOAT)!=sizeof(double)) && n) //some complicated way to safe some transfer size if single precision is used - n=(n+1)*sizeof(X_CFLOAT)/sizeof(double); - cuda->shared_data.comm.send_size[iswap]=n; - } - else if (ghost_velocity) - { -my_gettime(CLOCK_REALTIME,&time1); - - // n = Cuda_CommCuda_PackComm_Vel(&cuda->shared_data,sendnum[iswap],iswap,(void*) &buf_send[iswap*maxsend],pbc[iswap],pbc_flag[iswap]); - -my_gettime(CLOCK_REALTIME,&time2); - - if((sizeof(X_CFLOAT)!=sizeof(double)) && n) //some complicated way to safe some transfer size if single precision is used - n=(n+1)*sizeof(X_CFLOAT)/sizeof(double); - cuda->shared_data.comm.send_size[iswap]=n; - } - else - { - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - - if(avec->cudable) - n = avec->pack_comm(sendnum[iswap],&iswap, - cuda->shared_data.comm.buf_send[iswap],pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - cuda->shared_data.comm.buf_send[iswap],pbc_flag[iswap],pbc[iswap]); - - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_recv); - } - - } - else //sendproc == me - { - if (comm_x_only) - { - if (sendnum[iswap]) - { - n = Cuda_CommCuda_PackComm_Self(&cuda->shared_data,sendnum[iswap],iswap,firstrecv[iswap],pbc[iswap],pbc_flag[iswap]); - if(n<0) error->all(FLERR," # CUDA ERRROR on PackComm_Self"); - if((sizeof(X_CFLOAT)!=sizeof(double)) && n) - n=(n+1)*sizeof(X_CFLOAT)/sizeof(double); - } - } - else if (ghost_velocity) - { - n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_send); - } - else - { - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_send); - } - } - } - if(not comm_x_only && not avec->cudable) cuda->uploadAll(); -} - -void CommCuda::forward_comm_transfer_cuda() -{ - my_times time1,time2,time3; - int n; - MPI_Request request; - AtomVec *avec = atom->avec; - cuda->shared_data.domain.xy=domain->xy; - cuda->shared_data.domain.xz=domain->xz; - cuda->shared_data.domain.yz=domain->yz; - cuda->shared_data.domain.prd[0]=domain->prd[0]; - cuda->shared_data.domain.prd[1]=domain->prd[1]; - cuda->shared_data.domain.prd[2]=domain->prd[2]; - cuda->shared_data.domain.triclinic=domain->triclinic; - if(not comm_x_only && not avec->cudable) cuda->downloadAll(); //if not comm_x_only the communication routine of the atom_vec style class is used -//printf("A\n"); - // exchange data with another proc - // if other proc is self, just copy - // if comm_x_only set, exchange or copy directly to x, don't unpack - - for (int iswap = 0; iswap < nswap; iswap++) { - if (sendproc[iswap] != me) - { - if (comm_x_only) - { - - int size_forward_recv_now=0; - - if((sizeof(X_CFLOAT)!=sizeof(double)) && size_forward_recv[iswap]) //some complicated way to safe some transfer size if single precision is used - size_forward_recv_now=(size_forward_recv[iswap]+1)*sizeof(X_CFLOAT)/sizeof(double); - else - size_forward_recv_now=size_forward_recv[iswap]; - - //printf("A: %i \n",size_forward_recv_now/1024*4); - //MPI_Irecv(cuda->shared_data.comm.buf_recv[iswap],size_forward_recv_now,MPI_DOUBLE, - // recvproc[iswap],0,world,&request); - MPI_Irecv(buf_recv,size_forward_recv_now,MPI_DOUBLE, - recvproc[iswap],0,world,&request); - //printf("%p %p %i\n",buf_send, cuda->shared_data.comm.buf_send_dev[iswap], cuda->shared_data.comm.send_size[iswap]*sizeof(double)); - //memcpy(buf_send,cuda->shared_data.comm.buf_send[iswap],cuda->shared_data.comm.send_size[iswap]*sizeof(double)); - // CudaWrapper_SyncStream(1); - //printf("B: %i \n",cuda->shared_data.comm.send_size[iswap]/1024*4); - CudaWrapper_DownloadCudaDataAsync((void*) buf_send, cuda->shared_data.comm.buf_send_dev[iswap], cuda->shared_data.comm.send_size[iswap]*sizeof(double),2); - //MPI_Send(cuda->shared_data.comm.buf_send[iswap],cuda->shared_data.comm.send_size[iswap],MPI_DOUBLE,sendproc[iswap],0,world); -my_gettime(CLOCK_REALTIME,&time1); - CudaWrapper_SyncStream(2); - //printf("C: %i \n",cuda->shared_data.comm.send_size[iswap]/1024*4); -my_gettime(CLOCK_REALTIME,&time2); -cuda->shared_data.cuda_timings.comm_forward_download+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - MPI_Send(buf_send,cuda->shared_data.comm.send_size[iswap],MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - //printf("D: %i \n",cuda->shared_data.comm.send_size[iswap]/1024*4); - CudaWrapper_UploadCudaDataAsync((void*) buf_recv,cuda->shared_data.comm.buf_recv_dev[iswap], size_forward_recv_now*sizeof(double),2); -my_gettime(CLOCK_REALTIME,&time1); - CudaWrapper_SyncStream(2); - //printf("E: %i \n",cuda->shared_data.comm.send_size[iswap]/1024*4); - //memcpy(cuda->shared_data.comm.buf_recv[iswap],buf_recv,size_forward_recv_now*sizeof(double)); - //printf("RecvSize: %i SendSize: %i\n",size_forward_recv_now*sizeof(double),cuda->shared_data.comm.send_size[iswap]*sizeof(double)); -my_gettime(CLOCK_REALTIME,&time3); -cuda->shared_data.cuda_timings.comm_forward_upload+= - time3.tv_sec-time1.tv_sec+1.0*(time3.tv_nsec-time1.tv_nsec)/1000000000; -cuda->shared_data.cuda_timings.comm_forward_mpi_lower+= - time3.tv_sec-time2.tv_sec+1.0*(time3.tv_nsec-time2.tv_nsec)/1000000000; -my_gettime(CLOCK_REALTIME,&time3); -cuda->shared_data.cuda_timings.comm_forward_mpi_upper+= - time3.tv_sec-time1.tv_sec+1.0*(time3.tv_nsec-time1.tv_nsec)/1000000000; - } - else if (ghost_velocity) - { - /* int size_forward_recv_now=0; - - if((sizeof(X_CFLOAT)!=sizeof(double)) && size_forward_recv[iswap]) //some complicated way to safe some transfer size if single precision is used - size_forward_recv_now=(size_forward_recv[iswap]+1)*sizeof(X_CFLOAT)/sizeof(double); - else - size_forward_recv_now=size_forward_recv[iswap]; - -my_gettime(CLOCK_REALTIME,&time1); - - MPI_Irecv(cuda->shared_data.comm.buf_recv[iswap],size_forward_recv_now,MPI_DOUBLE, - recvproc[iswap],0,world,&request); - -my_gettime(CLOCK_REALTIME,&time2); - - MPI_Send(cuda->shared_data.comm.buf_send[iswap],cuda->shared_data.comm.send_size[iswap],MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - -my_gettime(CLOCK_REALTIME,&time3); -cuda->shared_data.cuda_timings.comm_forward_mpi_upper+= - time3.tv_sec-time1.tv_sec+1.0*(time3.tv_nsec-time1.tv_nsec)/1000000000; -cuda->shared_data.cuda_timings.comm_forward_mpi_lower+= - time3.tv_sec-time2.tv_sec+1.0*(time3.tv_nsec-time2.tv_nsec)/1000000000;*/ - - } - else - { - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - - if(avec->cudable) - n = avec->pack_comm(sendnum[iswap],&iswap, - buf_send,pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_recv); - } - - } - else //sendproc == me - { - if (comm_x_only) - { - if (sendnum[iswap]) - { - } - } - else if (ghost_velocity) - { - } - else - { - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_send); - } - } - } - if(not comm_x_only && not avec->cudable) cuda->uploadAll(); -} - -void CommCuda::forward_comm_unpack_cuda() -{ - int n; - MPI_Request request; - AtomVec *avec = atom->avec; - - cuda->shared_data.domain.xy=domain->xy; - cuda->shared_data.domain.xz=domain->xz; - cuda->shared_data.domain.yz=domain->yz; - cuda->shared_data.domain.prd[0]=domain->prd[0]; - cuda->shared_data.domain.prd[1]=domain->prd[1]; - cuda->shared_data.domain.prd[2]=domain->prd[2]; - cuda->shared_data.domain.triclinic=domain->triclinic; - if(not comm_x_only && not avec->cudable) cuda->downloadAll(); //if not comm_x_only the communication routine of the atom_vec style class is used - - // exchange data with another proc - // if other proc is self, just copy - // if comm_x_only set, exchange or copy directly to x, don't unpack - - for (int iswap = 0; iswap < nswap; iswap++) { - if (sendproc[iswap] != me) - { - if (comm_x_only) - { - - //Cuda_CommCuda_UnpackComm(&cuda->shared_data,recvnum[iswap],firstrecv[iswap],cuda->shared_data.comm.buf_recv[iswap],iswap); //Unpack for cpu exchange happens implicitely since buf==x[firstrecv] - Cuda_CommCuda_UnpackComm(&cuda->shared_data,recvnum[iswap],firstrecv[iswap],buf_recv,iswap); //Unpack for cpu exchange happens implicitely since buf==x[firstrecv] - - } - else if (ghost_velocity) - { - //Cuda_CommCuda_UnpackComm_Vel(&cuda->shared_data,recvnum[iswap],firstrecv[iswap],(void*)&buf_recv[iswap*maxrecv]); //Unpack for cpu exchange happens implicitely since buf==x[firstrecv] - } - else - { - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - - if(avec->cudable) - n = avec->pack_comm(sendnum[iswap],&iswap, - buf_send,pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_recv); - } - - } - else //sendproc == me - { - if (comm_x_only) - { - if (sendnum[iswap]) - { - } - } - else if (ghost_velocity) - { - } - else - { - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_send); - } - } - } - if(not comm_x_only && not avec->cudable) cuda->uploadAll(); -} - -void CommCuda::forward_comm_pair(Pair *pair) -{ - if(not cuda->shared_data.pair.cudable_force) - { - return CommBrick::forward_comm_pair(pair); - } - - int iswap,n; - double *buf; - MPI_Request request; - - int nsize = pair->comm_forward; - - for (iswap = 0; iswap < nswap; iswap++) { - - // pack buffer - - n = pair->pack_forward_comm(sendnum[iswap],&iswap, - buf_send,pbc_flag[iswap],pbc[iswap]); - int nrecv = recvnum[iswap]*nsize; - if(nrecv<0) nrecv=-(nrecv+1)/2; - int nsend = n; - if(nsend<0) nsend=-(nsend+1)/2; - - // exchange with another proc - // if self, set recv buffer to send buffer - - if (sendproc[iswap] != me) { - MPI_Irecv(buf_recv,nrecv,MPI_DOUBLE,recvproc[iswap],0, - world,&request); - MPI_Send(buf_send,nsend,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - buf = buf_recv; - } else buf = buf_send; - - // unpack buffer - - pair->unpack_forward_comm(recvnum[iswap],firstrecv[iswap],buf); - } -} - -/* ---------------------------------------------------------------------- - reverse communication of forces on atoms every timestep - other per-atom attributes may also be sent via pack/unpack routines -------------------------------------------------------------------------- */ - -void CommCuda::reverse_comm() -{ - int n; - MPI_Request request; - AtomVec *avec = atom->avec; - double *buf; - - if(not comm_f_only && not avec->cudable) cuda->downloadAll(); //not yet implemented in CUDA but only needed for non standard atom styles - - // exchange data with another proc - // if other proc is self, just copy - // if comm_f_only set, exchange or copy directly from f, don't pack - - for (int iswap = nswap-1; iswap >= 0; iswap--) { - if (sendproc[iswap] != me) { - if (comm_f_only) { - - int size_recv_now=size_reverse_recv[iswap]; - if((sizeof(F_CFLOAT)!=sizeof(double))&& size_reverse_recv[iswap]) - size_recv_now=(size_recv_now+1)*sizeof(F_CFLOAT)/sizeof(double); - MPI_Irecv(buf_recv,size_recv_now,MPI_DOUBLE, - sendproc[iswap],0,world,&request); - - buf=buf_send; - if (size_reverse_send[iswap]) - { - Cuda_CommCuda_PackReverse(&cuda->shared_data,size_reverse_send[iswap]/3,firstrecv[iswap],buf); - } - else buf=NULL; - int size_reverse_send_now=size_reverse_send[iswap]; - if((sizeof(F_CFLOAT)!=sizeof(double))&& size_reverse_send[iswap]) - size_reverse_send_now=(size_reverse_send_now+1)*sizeof(F_CFLOAT)/sizeof(double); - MPI_Send(buf,size_reverse_send_now,MPI_DOUBLE, - recvproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - Cuda_CommCuda_UnpackReverse(&cuda->shared_data,sendnum[iswap],iswap,buf_recv); - - } else { - MPI_Irecv(buf_recv,size_reverse_recv[iswap],MPI_DOUBLE, - sendproc[iswap],0,world,&request); - n = avec->pack_reverse(recvnum[iswap],firstrecv[iswap],buf_send); - MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - - avec->unpack_reverse(sendnum[iswap],sendlist[iswap],buf_recv); - } - - } else { - if (comm_f_only) { - if (sendnum[iswap]) - Cuda_CommCuda_UnpackReverse_Self(&cuda->shared_data,sendnum[iswap],iswap,firstrecv[iswap]); - } else { - n = avec->pack_reverse(recvnum[iswap],firstrecv[iswap],buf_send); - avec->unpack_reverse(sendnum[iswap],sendlist[iswap],buf_send); - } - } - } - if(not comm_f_only && not avec->cudable) cuda->uploadAll(); //not yet implemented in CUDA but only needed for non standard atom styles -} - -/* ---------------------------------------------------------------------- - exchange: move atoms to correct processors - atoms exchanged with all 6 stencil neighbors - send out atoms that have left my box, receive ones entering my box - atoms will be lost if not inside some proc's box - can happen if atom moves outside of non-periodic bounary - or if atom moves more than one proc away - this routine called before every reneighboring - for triclinic, atoms must be in lamda coords (0-1) before exchange is called -------------------------------------------------------------------------- */ - -void CommCuda::exchange() -{ - AtomVec *avec = atom->avec; - - if(not cuda->oncpu && avec->cudable) - return exchange_cuda(); - - if(not cuda->oncpu) cuda->downloadAll(); - - CommBrick::exchange(); -} - - -void CommCuda::exchange_cuda() -{ - int nsend,nrecv,nrecv1,nrecv2,nlocal; - double *buf; - MPI_Request request; - AtomVec *avec = atom->avec; - my_times time1,time2; - - // clear global->local map for owned and ghost atoms - // b/c atoms migrate to new procs in exchange() and - // new ghosts are created in borders() - // map_set() is done at end of borders() - - - if(map_style) cuda->cu_tag->download(); - - if (map_style) atom->map_clear(); - - // loop over dimensions - - for (int dim = 0; dim < 3; dim++) { - // fill buffer with atoms leaving my box, using < and >= - // when atom is deleted, fill it in with last atom - - cuda->shared_data.exchange_dim=dim; - - nlocal = atom->nlocal; - avec->maxsend=&maxsend; - nsend=avec->pack_exchange(dim,(double*) &buf_send); - nlocal = atom->nlocal; - - - atom->nlocal = nlocal; - - // send/recv atoms in both directions - // if 1 proc in dimension, no send/recv, set recv buf to send buf - // if 2 procs in dimension, single send/recv - // if more than 2 procs in dimension, send/recv to both neighbors - - my_gettime(CLOCK_REALTIME,&time1); - - if (procgrid[dim] == 1) { - nrecv = nsend; - buf = buf_send; - - } else { - MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][0],0, - &nrecv1,1,MPI_INT,procneigh[dim][1],0,world,MPI_STATUS_IGNORE); - nrecv = nrecv1; - if (procgrid[dim] > 2) { - MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0, - &nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE); - nrecv += nrecv2; - } - if (nrecv+1 > maxrecv) grow_recv(nrecv+1); - - MPI_Irecv(buf_recv,nrecv1,MPI_DOUBLE,procneigh[dim][1],0, - world,&request); - MPI_Send(buf_send,nsend,MPI_DOUBLE,procneigh[dim][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - - if (procgrid[dim] > 2) { - MPI_Irecv(&buf_recv[nrecv1],nrecv2,MPI_DOUBLE,procneigh[dim][0],0, - world,&request); - MPI_Send(buf_send,nsend,MPI_DOUBLE,procneigh[dim][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - - if((nrecv1==0)||(nrecv2==0)) buf_recv[nrecv]=0; - } - - buf = buf_recv; - } - //printf("nsend: %i nrecv: %i\n",nsend,nrecv); - // check incoming atoms to see if they are in my box - // if so, add to my list -my_gettime(CLOCK_REALTIME,&time2); -cuda->shared_data.cuda_timings.comm_exchange_mpi+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - if(nrecv) - { - avec->maxsend=&maxsend; - avec->unpack_exchange(buf); - } - } - - if(atom->firstgroupname) cuda->downloadAll(); - - if(atom->firstgroupname) atom->first_reorder(); - - if(atom->firstgroupname) cuda->uploadAll(); -} - -/* ---------------------------------------------------------------------- - borders: list nearby atoms to send to neighboring procs at every timestep - one list is created for every swap that will be made - as list is made, actually do swaps - this does equivalent of a communicate (so don't need to explicitly - call communicate routine on reneighboring timestep) - this routine is called before every reneighboring - for triclinic, atoms must be in lamda coords (0-1) before borders is called -------------------------------------------------------------------------- */ - - -void CommCuda::borders() -{ - AtomVec *avec = atom->avec; - if(not cuda->oncpu && avec->cudable) - { - if(cuda->shared_data.overlap_comm&&cuda->finished_setup) - borders_cuda_overlap_forward_comm(); - else - borders_cuda(); - - return; - } - - CommBrick::borders(); - - cuda->setSystemParams(); - if(cuda->finished_setup) {cuda->checkResize(); cuda->uploadAll();} - cuda->shared_data.atom.nghost=atom->nghost; - cu_sendlist->upload(); -} - -void CommCuda::borders_cuda() -{ - int n,iswap,dim,ineed,twoneed,smax,rmax; - int nsend,nrecv,nfirst,nlast; - double *buf; - MPI_Request request; - AtomVec *avec = atom->avec; - my_times time1,time2; - - // clear old ghosts - - atom->nghost = 0; - - // do swaps over all 3 dimensions - - iswap = 0; - smax = rmax = 0; - - cuda->shared_data.comm.nsend=0; - for (dim = 0; dim < 3; dim++) { - nlast = 0; - twoneed = 2*maxneed[dim]; - for (ineed = 0; ineed < twoneed; ineed++) { - - // find atoms within slab boundaries lo/hi using <= and >= - // check atoms between nfirst and nlast - // for first swaps in a dim, check owned and ghost - // for later swaps in a dim, only check newly arrived ghosts - // store sent atom indices in list for use in future timesteps - - if (ineed % 2 == 0) { - nfirst = nlast; - nlast = atom->nlocal + atom->nghost; - } - - nsend = 0; - - // find send atoms according to SINGLE vs MULTI - // all atoms eligible versus atoms in bordergroup - // only need to limit loop to bordergroup for first sends (ineed < 2) - // on these sends, break loop in two: owned (in group) and ghost - do - { - if(nsend>=maxsendlist[iswap]) grow_list(iswap,static_cast (nsend*1.05)); - nsend=Cuda_CommCuda_BuildSendlist(&cuda->shared_data,bordergroup,ineed,style==SINGLE?1:0,atom->nfirst,nfirst,nlast,dim,iswap); - }while(nsend>=maxsendlist[iswap]); - // pack up list of border atoms - - if (nsend*size_border > maxsend) - grow_send(nsend*size_border,0); - - if (ghost_velocity) - n = avec->pack_border_vel(nsend,&iswap,buf_send, - pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_border(nsend,&iswap,buf_send, - pbc_flag[iswap],pbc[iswap]); - - // swap atoms with other proc - // put incoming ghosts at end of my atom arrays - // if swapping with self, simply copy, no messages - -my_gettime(CLOCK_REALTIME,&time1); - if (sendproc[iswap] != me) { - MPI_Sendrecv(&nsend,1,MPI_INT,sendproc[iswap],0, - &nrecv,1,MPI_INT,recvproc[iswap],0,world,MPI_STATUS_IGNORE); - if (nrecv*size_border > maxrecv) - grow_recv(nrecv*size_border); - MPI_Irecv(buf_recv,nrecv*size_border,MPI_DOUBLE, - recvproc[iswap],0,world,&request); - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - buf = buf_recv; - } else { - nrecv = nsend; - buf = buf_send; - } - -my_gettime(CLOCK_REALTIME,&time2); -cuda->shared_data.cuda_timings.comm_border_mpi+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - // unpack buffer - - if (ghost_velocity) - avec->unpack_border_vel(nrecv,atom->nlocal+atom->nghost,buf); - else - avec->unpack_border(nrecv,atom->nlocal+atom->nghost,buf); - - // set all pointers & counters - - smax = MAX(smax,nsend); - rmax = MAX(rmax,nrecv); - sendnum[iswap] = nsend; - recvnum[iswap] = nrecv; - size_forward_recv[iswap] = nrecv*size_forward; - size_reverse_send[iswap] = nrecv*size_reverse; - size_reverse_recv[iswap] = nsend*size_reverse; - firstrecv[iswap] = atom->nlocal + atom->nghost; - atom->nghost += nrecv; - iswap++; - } - } - - // insure send/recv buffers are long enough for all forward & reverse comm - - int max = MAX(maxforward*smax,maxreverse*rmax); - if (max > maxsend) grow_send(max,0); - max = MAX(maxforward*rmax,maxreverse*smax); - if (max > maxrecv) grow_recv(max); - - // reset global->local map - if(map_style) - { - cuda->cu_tag->download(); - atom->map_set(); - } - - cuda->setSystemParams(); - cuda->shared_data.atom.nghost+=n; -} - -void CommCuda::borders_cuda_overlap_forward_comm() -{ - int n,iswap,dim,ineed,twoneed,smax,rmax; - int nsend,nrecv,nfirst,nlast; - double *buf; - MPI_Request request; - AtomVec *avec = atom->avec; - my_times time1,time2; - - // clear old ghosts - - atom->nghost = 0; - - // do swaps over all 3 dimensions - - iswap = 0; - smax = rmax = 0; - - cuda->shared_data.comm.nsend=0; - for (dim = 0; dim < 3; dim++) { - nlast = 0; - twoneed = 2*maxneed[dim]; - for (ineed = 0; ineed < twoneed; ineed++) { - - // find atoms within slab boundaries lo/hi using <= and >= - // check atoms between nfirst and nlast - // for first swaps in a dim, check owned and ghost - // for later swaps in a dim, only check newly arrived ghosts - // store sent atom indices in list for use in future timesteps - - if (ineed % 2 == 0) { - nfirst = nlast; - nlast = atom->nlocal + atom->nghost; - } - - nsend = 0; - - // find send atoms according to SINGLE vs MULTI - // all atoms eligible versus atoms in bordergroup - // only need to limit loop to bordergroup for first sends (ineed < 2) - // on these sends, break loop in two: owned (in group) and ghost - do - { - if(nsend>=maxsendlist[iswap]) grow_list(iswap,static_cast (nsend*1.05)); - nsend=Cuda_CommCuda_BuildSendlist(&cuda->shared_data,bordergroup,ineed,style==SINGLE?1:0,atom->nfirst,nfirst,nlast,dim,iswap); - }while(nsend>=maxsendlist[iswap]); - cuda->shared_data.comm.nsend_swap[iswap]=nsend; - // pack up list of border atoms - - if (nsend*size_border > maxsend) - grow_send(nsend*size_border,0); - - if (ghost_velocity) - n = avec->pack_border_vel(nsend,&iswap,buf_send, - pbc_flag[iswap],pbc[iswap]); - else - n = avec->pack_border(nsend,&iswap,buf_send, - pbc_flag[iswap],pbc[iswap]); - - // swap atoms with other proc - // put incoming ghosts at end of my atom arrays - // if swapping with self, simply copy, no messages - -my_gettime(CLOCK_REALTIME,&time1); - if (sendproc[iswap] != me) { - MPI_Sendrecv(&nsend,1,MPI_INT,sendproc[iswap],0, - &nrecv,1,MPI_INT,recvproc[iswap],0,world,MPI_STATUS_IGNORE); - if (nrecv*size_border > maxrecv) - grow_recv(nrecv*size_border); - MPI_Irecv(buf_recv,nrecv*size_border,MPI_DOUBLE, - recvproc[iswap],0,world,&request); - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - buf = buf_recv; - } else { - nrecv = nsend; - buf = buf_send; - } - -my_gettime(CLOCK_REALTIME,&time2); -cuda->shared_data.cuda_timings.comm_border_mpi+= - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000; - - // unpack buffer - - if (ghost_velocity) - avec->unpack_border_vel(nrecv,atom->nlocal+atom->nghost,buf); - else - avec->unpack_border(nrecv,atom->nlocal+atom->nghost,buf); - - // set all pointers & counters - - smax = MAX(smax,nsend); - rmax = MAX(rmax,nrecv); - sendnum[iswap] = nsend; - recvnum[iswap] = nrecv; - size_forward_recv[iswap] = nrecv*size_forward; - size_reverse_send[iswap] = nrecv*size_reverse; - size_reverse_recv[iswap] = nsend*size_reverse; - firstrecv[iswap] = atom->nlocal + atom->nghost; - atom->nghost += nrecv; - iswap++; - } - } - - // insure send/recv buffers are long enough for all forward & reverse comm - - int max = MAX(maxforward*smax,maxreverse*rmax); - if (max > maxsend) grow_send(max,0); - max = MAX(maxforward*rmax,maxreverse*smax); - if (max > maxrecv) grow_recv(max); - - // reset global->local map - if(map_style) - { - cuda->cu_tag->download(); - atom->map_set(); - } - - cuda->setSystemParams(); - cuda->shared_data.atom.nghost+=n; -} - - - - -void CommCuda::forward_comm_fix(Fix *fix, int size) -{ - int iswap,n; - double *buf; - MPI_Request request; - - int nsize = fix->comm_forward; - - for (iswap = 0; iswap < nswap; iswap++) { - // pack buffer - if(fix->cudable_comm&&cuda->finished_setup) - { - int swap=iswap; - if(sendproc[iswap] == me) {swap=-iswap-1; buf=(double*)&(firstrecv[iswap]);} - else buf=buf_send; - - n = fix->pack_forward_comm(sendnum[iswap],&swap, - buf,pbc_flag[iswap],pbc[iswap]); - if(sendproc[iswap] == me) - { - continue; - } - } - else - n = fix->pack_forward_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); - - // exchange with another proc - // if self, set recv buffer to send buffer - - if (sendproc[iswap] != me) { - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0, - world,&request); - MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - buf = buf_recv; - } else buf = buf_send; - - // unpack buffer - - fix->unpack_forward_comm(recvnum[iswap],firstrecv[iswap],buf); - } -} - - -void CommCuda::grow_send(int n, int flag) -{ - int oldmaxsend = (maxsend+BUFEXTRA)*sizeof(double); - maxsend = static_cast (BUFFACTOR * n); - if (flag){ - if(cuda->pinned) - { - double* tmp = new double[oldmaxsend]; - memcpy((void*) tmp,(void*) buf_send,oldmaxsend*sizeof(double)); - if(buf_send) CudaWrapper_FreePinnedHostData((void*) (buf_send)); - buf_send = (double*) CudaWrapper_AllocPinnedHostData((maxsend+BUFEXTRA)*sizeof(double),false); - memcpy(buf_send,tmp,oldmaxsend*sizeof(double)); - delete [] tmp; - } - else - { - buf_send = (double *) - memory->srealloc(buf_send,(maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send");printf("srealloc\n"); - } - } - else { - if(cuda->pinned) - { - if(buf_send) CudaWrapper_FreePinnedHostData((void*) buf_send); - buf_send = (double*) CudaWrapper_AllocPinnedHostData((maxsend+BUFEXTRA)*sizeof(double),false); - } - else - { - memory->sfree(buf_send); - buf_send = (double *) memory->smalloc((maxsend+BUFEXTRA)*sizeof(double), - "comm:buf_send"); - } - for(int i=0;ishared_data.comm.buf_send_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_send_dev[i],oldmaxsend); - cuda->shared_data.comm.buf_send_dev[i]=CudaWrapper_AllocCudaData((maxsend+BUFEXTRA)*sizeof(double)); - } - } -} -/* ---------------------------------------------------------------------- - free/malloc the size of the recv buffer as needed with BUFFACTOR -------------------------------------------------------------------------- */ - - -void CommCuda::grow_recv(int n) -{ - int oldmaxrecv = maxrecv*sizeof(double); - maxrecv = static_cast (BUFFACTOR * n); - if(cuda->pinned) - { - if(buf_recv) CudaWrapper_FreePinnedHostData((void*)buf_recv); - buf_recv = (double*) CudaWrapper_AllocPinnedHostData(maxrecv*sizeof(double), false,true); - } - else - { - memory->sfree(buf_recv); - buf_recv = (double *) memory->smalloc(maxrecv*sizeof(double), - "comm:buf_recv"); - } - for(int i=0;ishared_data.comm.buf_recv_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_recv_dev[i],oldmaxrecv); - cuda->shared_data.comm.buf_recv_dev[i]=CudaWrapper_AllocCudaData((maxrecv)*sizeof(double)); - } -} - -/* ---------------------------------------------------------------------- - realloc the size of the iswap sendlist as needed with BUFFACTOR -------------------------------------------------------------------------- */ - -void CommCuda::grow_list(int iswap, int n) -{ - - MYDBG(printf(" # CUDA CommCuda::grow_list\n");) - if(cuda->finished_setup&&cu_sendlist) cu_sendlist->download(); - if(!cu_sendlist||n*BUFFACTOR>cu_sendlist->get_dim()[1]||n*BUFFACTOR>maxsendlist[iswap]) - { - for(int i=0;i (BUFFACTOR * n); - sendlist[i] = (int *) - memory->srealloc(sendlist[i],maxsendlist[i]*sizeof(int), - "comm:sendlist[iswap]"); - } - delete cu_sendlist; - cu_sendlist=new cCudaData ((int*)sendlist,maxswap,maxsendlist[iswap]); - cuda->shared_data.comm.sendlist.dev_data=cu_sendlist->dev_data(); - cuda->shared_data.comm.maxlistlength=maxsendlist[iswap]; - cu_sendlist->upload(); - } - } - -/* ---------------------------------------------------------------------- - realloc the buffers needed for swaps -------------------------------------------------------------------------- */ - -void CommCuda::grow_swap(int n) -{ - int oldmaxswap=maxswap; - CommBrick::grow_swap(n); - if(n>cu_sendlist->get_dim()[0]) - { - MYDBG(printf(" # CUDA CommCuda::grow_swap\n");) - - delete cu_sendlist; - cu_sendlist=new cCudaData ((int*)sendlist,n,BUFMIN); - cuda->shared_data.comm.sendlist.dev_data=cu_sendlist->dev_data(); - cuda->shared_data.comm.maxlistlength=BUFMIN; - cuda->shared_data.comm.maxswap=n; - cuda->shared_data.comm.nsend_swap=new int[n]; - cuda->shared_data.comm.send_size=new int[n]; - cuda->shared_data.comm.recv_size=new int[n]; - } - for(int i=0;ishared_data.comm.buf_recv_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_recv_dev[i],maxrecv*sizeof(double)); - if(cuda->shared_data.comm.buf_send_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_send_dev[i],maxsend*sizeof(double)); - cuda->shared_data.comm.buf_recv_dev[i]=NULL; - cuda->shared_data.comm.buf_send_dev[i]=NULL; - } - cuda->shared_data.comm.buf_send= new double*[n]; - cuda->shared_data.comm.buf_recv= new double*[n]; - cuda->shared_data.comm.buf_send_dev= new void*[n]; - cuda->shared_data.comm.buf_recv_dev= new void*[n]; - for(int i=0;ishared_data.comm.buf_recv[i]=NULL; - cuda->shared_data.comm.buf_send[i]=NULL; - cuda->shared_data.comm.buf_recv_dev[i]=NULL; - cuda->shared_data.comm.buf_send_dev[i]=NULL; - } - grow_send(maxsend,0); - grow_recv(maxrecv); - - maxswap=n; -} - -/* ---------------------------------------------------------------------- - allocation of swap info -------------------------------------------------------------------------- */ - -void CommCuda::allocate_swap(int n) -{ - CommBrick::allocate_swap(n); - - delete cu_pbc; - delete cu_slablo; - delete cu_slabhi; - - cuda->shared_data.comm.maxswap=n; - if(cu_sendlist) - { - cu_pbc=new cCudaData ((int*)pbc,n,6); - cu_slablo = new cCudaData(slablo,n); - cu_slabhi = new cCudaData(slabhi,n); - - cuda->shared_data.comm.pbc.dev_data=cu_pbc->dev_data(); - cuda->shared_data.comm.slablo.dev_data=cu_slablo->dev_data(); - cuda->shared_data.comm.slabhi.dev_data=cu_slabhi->dev_data(); - } - cuda->shared_data.comm.nsend_swap=new int[n]; - cuda->shared_data.comm.send_size=new int[n]; - cuda->shared_data.comm.recv_size=new int[n]; - cuda->shared_data.comm.buf_send= new double*[n]; - cuda->shared_data.comm.buf_recv= new double*[n]; - cuda->shared_data.comm.buf_send_dev= new void*[n]; - cuda->shared_data.comm.buf_recv_dev= new void*[n]; - for(int i=0;ishared_data.comm.buf_send_dev[i]=NULL; - for(int i=0;ishared_data.comm.buf_recv_dev[i]=NULL; -} - - -/* ---------------------------------------------------------------------- - allocation of multi-type swap info -------------------------------------------------------------------------- */ - -void CommCuda::allocate_multi(int n) -{ - CommBrick::allocate_multi(n); - - delete cu_multilo; - delete cu_multihi; - cu_multilo = new cCudaData(slablo,n,atom->ntypes+1); - cu_multihi = new cCudaData(slabhi,n,atom->ntypes+1); - - cuda->shared_data.comm.multilo.dev_data=cu_multilo->dev_data(); - cuda->shared_data.comm.multihi.dev_data=cu_multihi->dev_data(); -} - -/* ---------------------------------------------------------------------- - free memory for swaps -------------------------------------------------------------------------- */ - -void CommCuda::free_swap() -{ - - CommBrick::free_swap(); - - delete cuda->shared_data.comm.nsend_swap; cuda->shared_data.comm.nsend_swap=NULL; - delete cu_pbc; cu_pbc = NULL; - delete cu_slablo; cu_slablo = NULL; - delete cu_slabhi; cu_slabhi = NULL; - for(int i=0;ishared_data.comm.buf_recv_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_recv_dev[i],maxrecv*sizeof(double)); - if(cuda->shared_data.comm.buf_send_dev[i]) CudaWrapper_FreeCudaData(cuda->shared_data.comm.buf_send_dev[i],maxsend*sizeof(double)); - } - - -} - -/* ---------------------------------------------------------------------- - free memory for multi-type swaps -------------------------------------------------------------------------- */ - -void CommCuda::free_multi() -{ - CommBrick::free_multi(); - delete cu_multilo; cu_multilo = NULL; - delete cu_multihi; cu_multihi = NULL; -} diff --git a/src/USER-CUDA/comm_cuda.h b/src/USER-CUDA/comm_cuda.h deleted file mode 100644 index 5105018f32..0000000000 --- a/src/USER-CUDA/comm_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_COMM_CUDA_H -#define LMP_COMM_CUDA_H - -#include "pointers.h" - -#include "cuda_data.h" -#include "comm_brick.h" - -namespace LAMMPS_NS { - -class CommCuda : public CommBrick { -public: - CommCuda(class LAMMPS *); - ~CommCuda(); - - virtual void init(); - virtual void setup(); // setup 3d communication pattern - virtual void forward_comm(int mode=0); // forward communication of atom coords - virtual void forward_comm_cuda(); - virtual void forward_comm_pack_cuda(); - virtual void forward_comm_transfer_cuda(); - virtual void forward_comm_unpack_cuda(); - virtual void forward_comm_pair(Pair *pair); - virtual void reverse_comm(); // reverse communication of forces - virtual void exchange(); // move atoms to new procs - virtual void exchange_cuda(); // move atoms to new procs - virtual void borders(); // setup list of atoms to communicate - virtual void borders_cuda(); // setup list of atoms to communicate - virtual void borders_cuda_overlap_forward_comm(); - virtual void forward_comm_fix(class Fix *, int size=0); // forward comm from a Fix - - - - - protected: - class Cuda *cuda; - cCudaData* cu_pbc; - cCudaData* cu_slablo; - cCudaData* cu_slabhi; - cCudaData* cu_multilo; - cCudaData* cu_multihi; - - cCudaData* cu_sendlist; - virtual void grow_send(int,int); // reallocate send buffer - virtual void grow_recv(int); // free/allocate recv buffer - virtual void grow_list(int, int); // reallocate one sendlist - virtual void grow_swap(int); // grow swap and multi arrays - virtual void allocate_swap(int); // allocate swap arrays - virtual void allocate_multi(int); // allocate multi arrays - virtual void free_swap(); // free swap arrays - virtual void free_multi(); // free multi arrays -}; - -} - -#endif diff --git a/src/USER-CUDA/compute_pe_cuda.cpp b/src/USER-CUDA/compute_pe_cuda.cpp deleted file mode 100644 index b8661c9702..0000000000 --- a/src/USER-CUDA/compute_pe_cuda.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include "compute_pe_cuda.h" -#include "atom.h" -#include "update.h" -#include "force.h" -#include "pair.h" -#include "bond.h" -#include "angle.h" -#include "dihedral.h" -#include "improper.h" -#include "kspace.h" -#include "modify.h" -#include "domain.h" -#include "error.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -ComputePECuda::ComputePECuda(LAMMPS *lmp, int narg, char **arg) : - ComputePE(lmp, narg, arg) -{ - cudable = 1; -} diff --git a/src/USER-CUDA/compute_pe_cuda.h b/src/USER-CUDA/compute_pe_cuda.h deleted file mode 100644 index bc8b057762..0000000000 --- a/src/USER-CUDA/compute_pe_cuda.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef COMPUTE_CLASS - -ComputeStyle(pe/cuda,ComputePECuda) - -#else - -#ifndef LMP_COMPUTE_PE_CUDA_H -#define LMP_COMPUTE_PE_CUDA_H - -#include "compute_pe.h" - -namespace LAMMPS_NS { - -class ComputePECuda : public ComputePE { - public: - ComputePECuda(class LAMMPS *, int, char **); - ~ComputePECuda() {} -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/compute_pressure_cuda.cpp b/src/USER-CUDA/compute_pressure_cuda.cpp deleted file mode 100644 index c92e918ad0..0000000000 --- a/src/USER-CUDA/compute_pressure_cuda.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "compute_pressure_cuda.h" -#include "atom.h" -#include "update.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" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -enum{DUMMY0,INVOKED_SCALAR,INVOKED_VECTOR,DUMMMY3,INVOKED_PERATOM}; - -/* ---------------------------------------------------------------------- */ - -ComputePressureCuda::ComputePressureCuda(LAMMPS *lmp, int narg, char **arg) : - ComputePressure(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - cudable = 1; - - // store temperature ID used by pressure computation - // insure it is valid for temperature computation - - int n = strlen(arg[3]) + 1; - char* id_temp = new char[n]; - strcpy(id_temp,arg[3]); - - int icompute = modify->find_compute(id_temp); - delete [] id_temp; - if (modify->compute[icompute]->cudable == 0) - { - error->warning(FLERR,"Compute pressure/cuda temperature ID is not cudable! Try a temp/cuda style."); - cudable = 0; - } - -} - -double ComputePressureCuda::compute_scalar() -{ - if(not temperature->cudable && cuda->finished_setup) cuda->downloadAll(); - return ComputePressure::compute_scalar(); -} - -void ComputePressureCuda::compute_vector() -{ - if(not temperature->cudable && cuda->finished_setup) cuda->downloadAll(); - ComputePressure::compute_vector(); -} diff --git a/src/USER-CUDA/compute_pressure_cuda.h b/src/USER-CUDA/compute_pressure_cuda.h deleted file mode 100644 index af48091708..0000000000 --- a/src/USER-CUDA/compute_pressure_cuda.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ -#ifdef COMPUTE_CLASS - -ComputeStyle(pressure/cuda,ComputePressureCuda) - -#else - -#ifndef LMP_COMPUTE_PRESSURE_CUDA_H -#define LMP_COMPUTE_PRESSURE_CUDA_H - -#include "compute_pressure.h" - -namespace LAMMPS_NS { - -class ComputePressureCuda : public ComputePressure { - public: - ComputePressureCuda(class LAMMPS *, int, char **); - ~ComputePressureCuda() {} - double compute_scalar(); - void compute_vector(); - - private: - class Cuda *cuda; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/compute_temp_cuda.cpp b/src/USER-CUDA/compute_temp_cuda.cpp deleted file mode 100644 index 85afa07258..0000000000 --- a/src/USER-CUDA/compute_temp_cuda.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "compute_temp_cuda.h" -#include "compute_temp_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "force.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "group.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -ComputeTempCuda::ComputeTempCuda(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 3) error->all(FLERR,"Illegal compute temp/cuda command"); - - scalar_flag = vector_flag = 1; - size_vector = 6; - extscalar = 0; - extvector = 1; - tempflag = 1; - - vector = new double[6]; - cu_t_vector = 0; - cu_t_scalar = 0; - cudable=true; - -} - -/* ---------------------------------------------------------------------- */ - -ComputeTempCuda::~ComputeTempCuda() -{ - delete [] vector; - delete cu_t_vector; - delete cu_t_scalar; -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempCuda::setup() -{ - dynamic = 0; - if (dynamic_user || group->dynamic[igroup]) dynamic = 1; - - fix_dof = 0; - for (int i = 0; i < modify->nfix; i++) - fix_dof += modify->fix[i]->dof(igroup); - dof_compute(); -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempCuda::dof_compute() -{ - double natoms = group->count(igroup); - dof = domain->dimension * natoms; - dof -= extra_dof + fix_dof; - if (dof > 0.0) tfactor = force->mvv2e / (dof * force->boltz); - else tfactor = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -double ComputeTempCuda::compute_scalar() -{ - if(cuda->begin_setup) - { - if(not cu_t_vector) cu_t_vector = new cCudaData (t_vector,6); - if(not cu_t_scalar) cu_t_scalar = new cCudaData (&t_scalar,1); - invoked_scalar = update->ntimestep; - Cuda_ComputeTempCuda_Scalar(&cuda->shared_data,groupbit,(ENERGY_CFLOAT*) cu_t_scalar->dev_data()); - cu_t_scalar->download(); - } - else - { - invoked_scalar = update->ntimestep; - - 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 (rmass) { - 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]; - } 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]) * - mass[type[i]]; - } - t_scalar=t; - } - - MPI_Allreduce(&t_scalar,&scalar,1,MPI_DOUBLE,MPI_SUM,world); - if (dynamic) dof_compute(); - scalar *= tfactor; - if(scalar>1e15) - { - cuda->cu_v->download(); - cuda->cu_x->download(); - cuda->cu_type->download(); - double **v = atom->v; - double **x = atom->x; - printf("Out of v-range atoms: \n"); - for(int i=0;inlocal;i++) - if((v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2])>1e5) - printf("%i %i // %lf %lf %lf // %lf %lf %lf\n",atom->tag[i],atom->type[i],x[i][0], x[i][1], x[i][2],v[i][0], v[i][1], v[i][2]); - error->all(FLERR,"Temperature out of range. Simulations will be abortet.\n"); - } - return scalar; -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempCuda::compute_vector() -{ - int i; - if(cuda->begin_setup) - { - if(not cu_t_vector) cu_t_vector = new cCudaData (t_vector,6); - if(not cu_t_scalar) cu_t_scalar = new cCudaData (&t_scalar,1); - - invoked_vector = update->ntimestep; - - Cuda_ComputeTempCuda_Vector(&cuda->shared_data,groupbit,(ENERGY_CFLOAT*) cu_t_vector->dev_data()); - cu_t_vector->download(); - } - else - { - - invoked_vector = update->ntimestep; - - 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 (rmass) massone = rmass[i]; - else massone = mass[type[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]; - } - - for (i = 0; i < 6; i++) t_vector[i]=t[i]; - } - MPI_Allreduce(t_vector,vector,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; -} diff --git a/src/USER-CUDA/compute_temp_cuda.h b/src/USER-CUDA/compute_temp_cuda.h deleted file mode 100644 index 54b3338c08..0000000000 --- a/src/USER-CUDA/compute_temp_cuda.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef COMPUTE_CLASS - -ComputeStyle(temp/cuda,ComputeTempCuda) - -#else - -#ifndef LMP_COMPUTE_TEMP_CUDA_H -#define LMP_COMPUTE_TEMP_CUDA_H - -#include "compute.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class ComputeTempCuda : public Compute { - public: - ComputeTempCuda(class LAMMPS *, int, char **); - ~ComputeTempCuda(); - void init() {} - void setup(); - double compute_scalar(); - void compute_vector(); - - private: - class Cuda *cuda; - int fix_dof; - double tfactor; - - void dof_compute(); - double t_vector[6]; - double t_scalar; - cCudaData* cu_t_scalar; - cCudaData* cu_t_vector; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/compute_temp_partial_cuda.cpp b/src/USER-CUDA/compute_temp_partial_cuda.cpp deleted file mode 100644 index 6f5f007e3f..0000000000 --- a/src/USER-CUDA/compute_temp_partial_cuda.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "compute_temp_partial_cuda.h" -#include "compute_temp_partial_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "force.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "group.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -ComputeTempPartialCuda::ComputeTempPartialCuda(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 6) error->all(FLERR,"Illegal compute temp/partial command"); - - scalar_flag = vector_flag = 1; - size_vector = 6; - extscalar = 0; - extvector = 1; - tempflag = 1; - tempbias = 1; - - xflag = force->inumeric(FLERR,arg[3]); - yflag = force->inumeric(FLERR,arg[4]); - zflag = force->inumeric(FLERR,arg[5]); - if (zflag && domain->dimension == 2) - error->all(FLERR,"Compute temp/partial cannot use vz for 2d systemx"); - - maxbias = 0; - vbiasall = NULL; - - vector = new double[6]; - cu_t_vector = 0; - cu_t_scalar = 0; - cu_vbiasall=NULL; - cudable=true; - -} - -/* ---------------------------------------------------------------------- */ - -ComputeTempPartialCuda::~ComputeTempPartialCuda() -{ - memory->destroy(vbiasall); - delete [] vector; - delete cu_t_vector; - delete cu_t_scalar; - delete cu_vbiasall; -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::setup() -{ - dynamic = 0; - if (dynamic_user || group->dynamic[igroup]) dynamic = 1; - - fix_dof = 0; - for (int i = 0; i < modify->nfix; i++) - fix_dof += modify->fix[i]->dof(igroup); - dof_compute(); -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::dof_compute() -{ - double natoms = group->count(igroup); - int nper = xflag+yflag+zflag; - dof = nper * natoms; - dof -= (1.0*nper/domain->dimension)*fix_dof + extra_dof; - if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz); - else tfactor = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -int ComputeTempPartialCuda::dof_remove(int i) -{ - int nper = xflag+yflag+zflag; - return (domain->dimension - nper); -} - -/* ---------------------------------------------------------------------- */ - -double ComputeTempPartialCuda::compute_scalar() -{ - if(cuda->begin_setup) - { - if(not cu_t_vector) cu_t_vector = new cCudaData (t_vector,6); - if(not cu_t_scalar) cu_t_scalar = new cCudaData (&t_scalar,1); - invoked_scalar = update->ntimestep; - Cuda_ComputeTempPartialCuda_Scalar(&cuda->shared_data,groupbit,(ENERGY_CFLOAT*) cu_t_scalar->dev_data(),xflag,yflag,zflag); - cu_t_scalar->download(); - } - else - { - invoked_scalar = update->ntimestep; - - 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 (rmass) { - 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]; - } 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]) * - mass[type[i]]; - } - t_scalar=t; - } - - MPI_Allreduce(&t_scalar,&scalar,1,MPI_DOUBLE,MPI_SUM,world); - if (dynamic) dof_compute(); - scalar *= tfactor; - if(scalar>1e15) - { - cuda->cu_v->download(); - cuda->cu_x->download(); - cuda->cu_type->download(); - double **v = atom->v; - double **x = atom->x; - printf("Out of v-range atoms: \n"); - for(int i=0;inlocal;i++) - if((v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2])>1e5) - printf("%i %i // %lf %lf %lf // %lf %lf %lf\n",atom->tag[i],atom->type[i],x[i][0], x[i][1], x[i][2],v[i][0], v[i][1], v[i][2]); - error->all(FLERR,"Temperature out of range. Simulations will be abortet.\n"); - } - return scalar; -} - -/* ---------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::compute_vector() -{ - int i; - if(cuda->begin_setup) - { - if(not cu_t_vector) cu_t_vector = new cCudaData (t_vector,6); - if(not cu_t_scalar) cu_t_scalar = new cCudaData (&t_scalar,1); - - invoked_vector = update->ntimestep; - - Cuda_ComputeTempPartialCuda_Vector(&cuda->shared_data,groupbit,(ENERGY_CFLOAT*) cu_t_vector->dev_data(),xflag,yflag,zflag); - cu_t_vector->download(); - } - else - { - - invoked_vector = update->ntimestep; - - 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 (rmass) massone = rmass[i]; - else massone = mass[type[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]; - } - - for (i = 0; i < 6; i++) t_vector[i]=t[i]; - } - MPI_Allreduce(t_vector,vector,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; -} - -/* ---------------------------------------------------------------------- - remove velocity bias from atom I to leave thermal velocity -------------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::remove_bias(int i, double *v) -{ - if (!xflag) { - vbias[0] = v[0]; - v[0] = 0.0; - } - if (!yflag) { - vbias[1] = v[1]; - v[1] = 0.0; - } - if (!zflag) { - vbias[2] = v[2]; - v[2] = 0.0; - } -} - -/* ---------------------------------------------------------------------- - remove velocity bias from all atoms to leave thermal velocity -------------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::remove_bias_all() -{ - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - if (atom->nmax > maxbias) { - memory->destroy(vbiasall); - maxbias = atom->nmax; - memory->create(vbiasall,maxbias,3,"temp/partial:vbiasall"); - delete cu_vbiasall; - cu_vbiasall = new cCudaData ((double*)vbiasall, atom->nmax, 3); - } - if(cuda->begin_setup) - { - Cuda_ComputeTempPartialCuda_RemoveBiasAll(&cuda->shared_data,groupbit,xflag,yflag,zflag,cu_vbiasall->dev_data()); - } - else - { - if (!xflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - vbiasall[i][0] = v[i][0]; - v[i][0] = 0.0; - } - } - if (!yflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - vbiasall[i][1] = v[i][1]; - v[i][1] = 0.0; - } - } - if (!zflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - vbiasall[i][2] = v[i][2]; - v[i][2] = 0.0; - } - } - } -} - -/* ---------------------------------------------------------------------- - add back in velocity bias to atom I removed by remove_bias() - assume remove_bias() was previously called -------------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::restore_bias(int i, double *v) -{ - if (!xflag) v[0] += vbias[0]; - if (!yflag) v[1] += vbias[1]; - if (!zflag) v[2] += vbias[2]; -} - -/* ---------------------------------------------------------------------- - add back in velocity bias to all atoms removed by remove_bias_all() - assume remove_bias_all() was previously called -------------------------------------------------------------------------- */ - -void ComputeTempPartialCuda::restore_bias_all() -{ - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if(cuda->begin_setup) - { - Cuda_ComputeTempPartialCuda_RestoreBiasAll(&cuda->shared_data,groupbit,xflag,yflag,zflag,cu_vbiasall->dev_data()); - } - else - { - - if (!xflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - v[i][0] += vbiasall[i][0]; - } - if (!yflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - v[i][1] += vbiasall[i][1]; - } - if (!zflag) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - v[i][2] += vbiasall[i][2]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -double ComputeTempPartialCuda::memory_usage() -{ - double bytes = maxbias * sizeof(double); - return bytes; -} diff --git a/src/USER-CUDA/compute_temp_partial_cuda.h b/src/USER-CUDA/compute_temp_partial_cuda.h deleted file mode 100644 index 320bf17858..0000000000 --- a/src/USER-CUDA/compute_temp_partial_cuda.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef COMPUTE_CLASS - -ComputeStyle(temp/partial/cuda,ComputeTempPartialCuda) - -#else - -#ifndef LMP_COMPUTE_TEMP_PARTIAL_CUDA_H -#define LMP_COMPUTE_TEMP_PARTIAL_CUDA_H - -#include "compute.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class ComputeTempPartialCuda : public Compute { - public: - ComputeTempPartialCuda(class LAMMPS *, int, char **); - ~ComputeTempPartialCuda(); - void init() {} - void setup(); - double compute_scalar(); - void compute_vector(); - - int dof_remove(int); - void remove_bias(int, double *); - void remove_bias_all(); - void restore_bias(int, double *); - void restore_bias_all(); - double memory_usage(); - - private: - class Cuda *cuda; - int xflag,yflag,zflag; - int fix_dof; - double tfactor; - - void dof_compute(); - double t_vector[6]; - double t_scalar; - cCudaData* cu_t_scalar; - cCudaData* cu_t_vector; - cCudaData* cu_vbiasall; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/cuda.cpp b/src/USER-CUDA/cuda.cpp deleted file mode 100644 index 995289a792..0000000000 --- a/src/USER-CUDA/cuda.cpp +++ /dev/null @@ -1,1067 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "user_cuda.h" -#include "atom.h" -#include "domain.h" -#include "force.h" -#include "pair.h" -#include "update.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "universe.h" -#include "input.h" -#include "atom_masks.h" -#include "error.h" - -#include "cuda_neigh_list.h" -//#include "pre_binning_cu.h" -//#include "reverse_binning_cu.h" -#include -#include -#include "cuda_pair_cu.h" -#include "cuda_cu.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -Cuda::Cuda(LAMMPS* lmp) : Pointers(lmp) -{ - cuda_exists = true; - lmp->cuda = this; - - if (universe->me == 0) printf("# Using LAMMPS_CUDA \n"); - - shared_data.me = universe->me; - - device_set = false; - devicelist = NULL; - - Cuda_Cuda_GetCompileSettings(&shared_data); - - if (universe->me == 0) { - - if(shared_data.compile_settings.prec_glob != sizeof(CUDA_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: Global Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_glob, (int) sizeof(CUDA_CFLOAT) / 4); - - if(shared_data.compile_settings.prec_x != sizeof(X_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: X Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_x, (int) sizeof(X_CFLOAT) / 4); - - if(shared_data.compile_settings.prec_v != sizeof(V_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: V Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_v, (int) sizeof(V_CFLOAT) / 4); - - if(shared_data.compile_settings.prec_f != sizeof(F_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: F Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_f, (int) sizeof(F_CFLOAT) / 4); - - if(shared_data.compile_settings.prec_pppm != sizeof(PPPM_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: PPPM Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_pppm, (int) sizeof(PPPM_CFLOAT) / 4); - - if(shared_data.compile_settings.prec_fft != sizeof(FFT_CFLOAT) / 4) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: FFT Precision: cuda %i cpp %i\n\n", - shared_data.compile_settings.prec_fft, (int) sizeof(FFT_CFLOAT) / 4); - -#ifdef FFT_CUFFT - if(shared_data.compile_settings.cufft != 1) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: cufft: cuda %i cpp %i\n\n", - shared_data.compile_settings.cufft, 1); -#else - if(shared_data.compile_settings.cufft != 0) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: cufft: cuda %i cpp %i\n\n", - shared_data.compile_settings.cufft, 0); -#endif - - if(shared_data.compile_settings.arch != CUDA_ARCH) - printf("\n\n # CUDA WARNING: Compile Settings of cuda and cpp code differ! \n" - " # CUDA WARNING: arch: cuda %i cpp %i\n\n", - shared_data.compile_settings.cufft, CUDA_ARCH); - } - - cu_x = 0; - cu_v = 0; - cu_f = 0; - cu_tag = 0; - cu_type = 0; - cu_mask = 0; - cu_image = 0; - cu_xhold = 0; - cu_q = 0; - cu_rmass = 0; - cu_mass = 0; - cu_virial = 0; - cu_eatom = 0; - cu_vatom = 0; - cu_radius = 0; - cu_density = 0; - cu_omega = 0; - cu_torque = 0; - - cu_special = 0; - cu_nspecial = 0; - - cu_molecule = 0; - - cu_x_type = 0; - x_type = 0; - cu_v_radius = 0; - v_radius = 0; - cu_omega_rmass = 0; - omega_rmass = 0; - - binned_id = 0; - cu_binned_id = 0; - binned_idnew = 0; - cu_binned_idnew = 0; - - cu_map_array = 0; - - copy_buffer = 0; - copy_buffersize = 0; - - neighbor_decide_by_integrator = 0; - pinned = true; - - debugdata = 0; - - finished_setup = false; - begin_setup = false; - finished_run = false; - - setSharedDataZero(); - - uploadtime = 0; - downloadtime = 0; - dotiming = false; - - dotestatom = false; - testatom = 0; - oncpu = true; - - self_comm = 0; - MYDBG(printf("# CUDA: Cuda::Cuda Done...\n");) - //cCudaData -} - -/* ---------------------------------------------------------------------- */ - -Cuda::~Cuda() -{ - print_timings(); - - if (universe->me == 0) printf("# CUDA: Free memory...\n"); - - delete [] devicelist; - - delete cu_q; - delete cu_x; - delete cu_v; - delete cu_f; - delete cu_tag; - delete cu_type; - delete cu_mask; - delete cu_image; - delete cu_xhold; - delete cu_mass; - delete cu_rmass; - delete cu_virial; - delete cu_eng_vdwl; - delete cu_eng_coul; - delete cu_extent; - delete cu_eatom; - delete cu_vatom; - delete cu_radius; - delete cu_density; - delete cu_omega; - delete cu_torque; - delete cu_molecule; - - delete cu_x_type; - delete [] x_type; - delete cu_v_radius; - delete [] v_radius; - delete cu_omega_rmass; - delete [] omega_rmass; - - delete cu_debugdata; - delete[] debugdata; - - delete cu_map_array; - - std::map::iterator p = neigh_lists.begin(); - - while(p != neigh_lists.end()) { - delete p->second; - ++p; - } -} - -/* ---------------------------------------------------------------------- - package cuda command - can be invoked multiple times: -c on, -pk, package command - can only init GPUs once in activate(), so just store params here -------------------------------------------------------------------------- */ - -void Cuda::accelerator(int narg, char **arg) -{ - // this error should not happen - - if (device_set) error->all(FLERR,"USER-CUDA device is already activated"); - - // pppn = # of GPUs/node - - pppn = force->inumeric(FLERR,arg[0]); - if (pppn <= 0) error->all(FLERR,"Illegal package cuda command"); - - // optional args - - delete [] devicelist; - devicelist = NULL; - int newtonflag = 0; - - int iarg = 1; - while (iarg < narg) { - if (strcmp(arg[iarg],"newton") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal package cuda command"); - if (strcmp(arg[iarg+1],"off") == 0) newtonflag = 0; - else if (strcmp(arg[iarg+1],"on") == 0) newtonflag = 1; - else error->all(FLERR,"Illegal package cuda command"); - } else if (strcmp(arg[iarg],"gpuID") == 0) { - if (iarg+pppn+1 > narg) error->all(FLERR,"Illegal package cuda command"); - devicelist = new int[pppn]; - for (int k = 0; k < pppn; k++) - devicelist[k] = force->inumeric(FLERR,arg[iarg+k+1]); - iarg += pppn + 1; - } else if (strcmp(arg[iarg],"timing") == 0) { - dotiming = true; - iarg++; - } else if (strcmp(arg[iarg],"test") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal package cuda command"); - testatom = force->numeric(FLERR,arg[iarg+1]); - dotestatom = true; - iarg += 2; - } else if (strcmp(arg[iarg],"thread") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal package cuda command"); - if (strcmp(arg[iarg+1],"auto") == 0) - shared_data.pair.override_block_per_atom = -1; - else if (strcmp(arg[iarg+1],"tpa") == 0) - shared_data.pair.override_block_per_atom = 0; - else if (strcmp(arg[iarg+1],"bpa") == 0) - shared_data.pair.override_block_per_atom = 1; - else error->all(FLERR,"Illegal package cuda command"); - iarg += 2; - } - - // undocumented options - - else if (strcmp(arg[iarg],"suffix") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal package cuda command"); - strcpy(lmp->suffix,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"overlap_comm") == 0) { - shared_data.overlap_comm = 1; - iarg++; - } else if (strcmp(arg[iarg],"pinned") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal package cuda command"); - pinned = force->inumeric(FLERR,arg[iarg+1]) == 0 ? false : true; - if ((pinned == false) && (universe->me == 0)) - printf(" #CUDA: Pinned memory is not used for communication\n"); - iarg += 2; - } else error->all(FLERR,"Illegal package cuda command"); - } - - // set newton flags - - force->newton = force->newton_pair = force->newton_bond = newtonflag; -} - -/* ---------------------------------------------------------------------- - activate the GPUs - only done once with whatever settings used by the last package command -------------------------------------------------------------------------- */ - -void Cuda::activate() -{ - if (device_set) return; - device_set = true; - - if (universe->me == 0) printf("# CUDA: Activate GPU \n"); - - CudaWrapper_Init(0, (char**)0, universe->me, pppn, devicelist); - //if(shared_data.overlap_comm) - CudaWrapper_AddStreams(3); - cu_x = 0; - cu_v = 0; - cu_f = 0; - cu_tag = 0; - cu_type = 0; - cu_mask = 0; - cu_image = 0; - cu_xhold = 0; - cu_q = 0; - cu_rmass = 0; - cu_mass = 0; - cu_virial = 0; - cu_eatom = 0; - cu_vatom = 0; - cu_radius = 0; - cu_density = 0; - cu_omega = 0; - cu_torque = 0; - - cu_special = 0; - cu_nspecial = 0; - - cu_molecule = 0; - - cu_x_type = 0; - cu_v_radius = 0; - cu_omega_rmass = 0; - - cu_binned_id = 0; - cu_binned_idnew = 0; - allocate(); -} - -/* ---------------------------------------------------------------------- */ - -void Cuda::setSharedDataZero() -{ - MYDBG(printf("# CUDA: Cuda::setSharedDataZero ...\n");) - shared_data.atom.nlocal = 0; - shared_data.atom.nghost = 0; - shared_data.atom.nall = 0; - shared_data.atom.nmax = 0; - shared_data.atom.ntypes = 0; - shared_data.atom.q_flag = 0; - shared_data.atom.need_eatom = 0; - shared_data.atom.need_vatom = 0; - shared_data.atom.update_nmax = 1; - shared_data.atom.update_nlocal = 1; - shared_data.atom.update_neigh = 1; - - shared_data.pair.cudable_force = 0; - shared_data.pair.collect_forces_later = 0; - shared_data.pair.use_block_per_atom = 0; - shared_data.pair.override_block_per_atom = -1; - shared_data.pair.cut = 0; - shared_data.pair.cutsq = 0; - shared_data.pair.cut_inner = 0; - shared_data.pair.cut_coul = 0; - shared_data.pair.special_lj = 0; - shared_data.pair.special_coul = 0; - - shared_data.pair.neighall = false; - - shared_data.pppm.cudable_force = 0; - - shared_data.buffersize = 0; - shared_data.buffer_new = 1; - shared_data.buffer = NULL; - - shared_data.comm.comm_phase = 0; - shared_data.overlap_comm = 0; - - shared_data.comm.buffer = NULL; - shared_data.comm.buffer_size = 0; - shared_data.comm.overlap_split_ratio = 0; - // setTimingsZero(); -} - -void Cuda::allocate() -{ - MYDBG(printf("# CUDA: Cuda::allocate ...\n");) - - if(not cu_virial) { - cu_virial = new cCudaData (NULL, & shared_data.pair.virial , 6); - cu_eng_vdwl = new cCudaData (NULL, & shared_data.pair.eng_vdwl , 1); - cu_eng_coul = new cCudaData (NULL, & shared_data.pair.eng_coul , 1); - cu_extent = new cCudaData (extent, 6); - shared_data.flag = CudaWrapper_AllocCudaData(sizeof(int)); - int size = 2 * CUDA_MAX_DEBUG_SIZE; - debugdata = new int[size]; - cu_debugdata = new cCudaData (debugdata , size); - shared_data.debugdata = cu_debugdata->dev_data(); - } - - checkResize(); - setSystemParams(); - MYDBG(printf("# CUDA: Cuda::allocate done...\n");) -} - -void Cuda::setSystemParams() -{ - MYDBG(printf("# CUDA: Cuda::setSystemParams ...\n");) - shared_data.atom.nlocal = atom->nlocal; - shared_data.atom.nghost = atom->nghost; - shared_data.atom.nall = atom->nlocal + atom->nghost; - shared_data.atom.ntypes = atom->ntypes; - shared_data.atom.q_flag = atom->q_flag; - shared_data.atom.rmass_flag = atom->rmass_flag; - MYDBG(printf("# CUDA: Cuda::setSystemParams done ...\n");) -} - -void Cuda::setDomainParams() -{ - MYDBG(printf("# CUDA: Cuda::setDomainParams ...\n");) - cuda_shared_domain* cu_domain = &shared_data.domain; - - cu_domain->triclinic = domain->triclinic; - - for(short i = 0; i < 3; ++i) { - cu_domain->periodicity[i] = domain->periodicity[i]; - cu_domain->sublo[i] = domain->sublo[i]; - cu_domain->subhi[i] = domain->subhi[i]; - cu_domain->boxlo[i] = domain->boxlo[i]; - cu_domain->boxhi[i] = domain->boxhi[i]; - cu_domain->prd[i] = domain->prd[i]; - } - - if(domain->triclinic) { - for(short i = 0; i < 3; ++i) { - cu_domain->boxlo_lamda[i] = domain->boxlo_lamda[i]; - cu_domain->boxhi_lamda[i] = domain->boxhi_lamda[i]; - cu_domain->prd_lamda[i] = domain->prd_lamda[i]; - cu_domain->sublo[i] = domain->sublo_lamda[i]; - cu_domain->subhi[i] = domain->subhi_lamda[i]; - } - - cu_domain->xy = domain->xy; - cu_domain->xz = domain->xz; - cu_domain->yz = domain->yz; - } - - for(int i = 0; i < 6; i++) { - cu_domain->h[i] = domain->h[i]; - cu_domain->h_inv[i] = domain->h_inv[i]; - cu_domain->h_rate[i] = domain->h_rate[i]; - } - - cu_domain->update = 2; - MYDBG(printf("# CUDA: Cuda::setDomainParams done ...\n");) -} - -void Cuda::checkResize() -{ - MYDBG(printf("# CUDA: Cuda::checkResize ...\n");) - cuda_shared_atom* cu_atom = & shared_data.atom; - cu_atom->q_flag = atom->q_flag; - cu_atom->rmass_flag = atom->rmass ? 1 : 0; - cu_atom->nall = atom->nlocal + atom->nghost; - cu_atom->nlocal = atom->nlocal; - cu_atom->nghost = atom->nghost; - - // do we have more atoms to upload than currently allocated memory on device? (also true if nothing yet allocated) - if(atom->nmax > cu_atom->nmax || cu_tag == NULL) { - delete cu_x; - cu_x = new cCudaData ((double*)atom->x , & cu_atom->x , atom->nmax, 3, 0, true); //cu_x->set_buffer(&(shared_data.buffer),&(shared_data.buffersize),true); - delete cu_v; - cu_v = new cCudaData ((double*)atom->v, & cu_atom->v , atom->nmax, 3); - delete cu_f; - cu_f = new cCudaData ((double*)atom->f, & cu_atom->f , atom->nmax, 3, 0, true); - delete cu_tag; - cu_tag = new cCudaData (atom->tag , & cu_atom->tag , atom->nmax, 0, true); - delete cu_type; - cu_type = new cCudaData (atom->type , & cu_atom->type , atom->nmax, 0, true); - delete cu_mask; - cu_mask = new cCudaData (atom->mask , & cu_atom->mask , atom->nmax, 0, true); - delete cu_image; - cu_image = new cCudaData (atom->image , & cu_atom->image , atom->nmax, 0, true); - - if(atom->rmass) { - delete cu_rmass; - cu_rmass = new cCudaData (atom->rmass , & cu_atom->rmass , atom->nmax); - } - - if(cu_atom->q_flag) { - delete cu_q; - cu_q = new cCudaData ((double*)atom->q, & cu_atom->q , atom->nmax, 0 , true); - }// cu_q->set_buffer(&(copy_buffer),&(copy_buffersize),true);} - - if(atom->radius) { - delete cu_radius; - cu_radius = new cCudaData (atom->radius , & cu_atom->radius , atom->nmax); - delete cu_v_radius; - cu_v_radius = new cCudaData (v_radius , & cu_atom->v_radius , atom->nmax * 4); - delete cu_omega_rmass; - cu_omega_rmass = new cCudaData (omega_rmass , & cu_atom->omega_rmass , atom->nmax * 4); - } - - if(atom->omega) { - delete cu_omega; - cu_omega = new cCudaData (((double*) atom->omega) , & cu_atom->omega , atom->nmax, 3); - } - - if(atom->torque) { - delete cu_torque; - cu_torque = new cCudaData (((double*) atom->torque) , & cu_atom->torque , atom->nmax, 3); - } - - if(atom->special) { - delete cu_special; - cu_special = new cCudaData (((int*) & (atom->special[0][0])) , & cu_atom->special , atom->nmax, atom->maxspecial, 0 , true); - shared_data.atom.maxspecial = atom->maxspecial; - } - - if(atom->nspecial) { - delete cu_nspecial; - cu_nspecial = new cCudaData (((int*) atom->nspecial) , & cu_atom->nspecial , atom->nmax, 3, 0, true); - } - - if(atom->molecule) { - delete cu_molecule; - cu_molecule = new cCudaData (((int*) atom->molecule) , & cu_atom->molecule , atom->nmax, 0 , true); - } - - shared_data.atom.special_flag = neighbor->special_flag; - shared_data.atom.molecular = atom->molecular; - - cu_atom->update_nmax = 2; - cu_atom->nmax = atom->nmax; - - delete cu_x_type; - cu_x_type = new cCudaData (x_type , & cu_atom->x_type , atom->nmax * 4); - } - - if(((cu_xhold == NULL) || (cu_xhold->get_dim()[0] < neighbor->maxhold)) && neighbor->xhold) { - delete cu_xhold; - cu_xhold = new cCudaData ((double*)neighbor->xhold, & cu_atom->xhold , neighbor->maxhold, 3); - shared_data.atom.maxhold = neighbor->maxhold; - } - - if(atom->mass && !cu_mass) { - cu_mass = new cCudaData (atom->mass , & cu_atom->mass , atom->ntypes + 1); - } - - cu_atom->mass_host = atom->mass; - - if(atom->map_style == 1) { - if(cu_map_array == NULL) { - cu_map_array = new cCudaData (atom->get_map_array() , & cu_atom->map_array , atom->get_map_size()); - } else if(cu_map_array->dev_size() / sizeof(int) < atom->get_map_size()) { - delete cu_map_array; - cu_map_array = new cCudaData (atom->get_map_array() , & cu_atom->map_array , atom->get_map_size()); - } - } - - - // if any of the host pointers have changed (e.g. re-allocated somewhere else), set to correct pointer - if(cu_x ->get_host_data() != atom->x) cu_x ->set_host_data((double*)(atom->x)); - - if(cu_v ->get_host_data() != atom->v) cu_v ->set_host_data((double*)(atom->v)); - - if(cu_f ->get_host_data() != atom->f) cu_f ->set_host_data((double*)(atom->f)); - - if(cu_tag ->get_host_data() != atom->tag) cu_tag ->set_host_data(atom->tag); - - if(cu_type->get_host_data() != atom->type) cu_type->set_host_data(atom->type); - - if(cu_mask->get_host_data() != atom->mask) cu_mask->set_host_data(atom->mask); - - if(cu_image->get_host_data() != atom->image) cu_mask->set_host_data(atom->image); - - if(cu_xhold) - if(cu_xhold->get_host_data() != neighbor->xhold) cu_xhold->set_host_data((double*)(neighbor->xhold)); - - if(atom->rmass) - if(cu_rmass->get_host_data() != atom->rmass) cu_rmass->set_host_data((double*)(atom->rmass)); - - if(cu_atom->q_flag) - if(cu_q->get_host_data() != atom->q) cu_q->set_host_data((double*)(atom->q)); - - if(atom->radius) - if(cu_radius->get_host_data() != atom->radius) cu_radius->set_host_data((double*)(atom->radius)); - - if(atom->omega) - if(cu_omega->get_host_data() != atom->omega) cu_omega->set_host_data((double*)(atom->omega)); - - if(atom->torque) - if(cu_torque->get_host_data() != atom->torque) cu_torque->set_host_data((double*)(atom->torque)); - - if(atom->special) - if(cu_special->get_host_data() != atom->special) { - delete cu_special; - cu_special = new cCudaData (((int*) atom->special) , & cu_atom->special , atom->nmax, atom->maxspecial); - shared_data.atom.maxspecial = atom->maxspecial; - } - - if(atom->nspecial) - if(cu_nspecial->get_host_data() != atom->nspecial) cu_nspecial->set_host_data((int*)(atom->nspecial)); - - if(atom->molecule) - if(cu_molecule->get_host_data() != atom->molecule) cu_molecule->set_host_data((int*)(atom->molecule)); - - if(force) - if(cu_virial ->get_host_data() != force->pair->virial) cu_virial ->set_host_data(force->pair->virial); - - if(force) - if(cu_eng_vdwl ->get_host_data() != &force->pair->eng_vdwl) cu_eng_vdwl ->set_host_data(&force->pair->eng_vdwl); - - if(force) - if(cu_eng_coul ->get_host_data() != &force->pair->eng_coul) cu_eng_coul ->set_host_data(&force->pair->eng_coul); - - cu_atom->update_nlocal = 2; - MYDBG(printf("# CUDA: Cuda::checkResize done...\n");) -} - -void Cuda::evsetup_eatom_vatom(int eflag_atom, int vflag_atom) -{ - if(eflag_atom) { - if(not cu_eatom) - cu_eatom = new cCudaData (force->pair->eatom, & (shared_data.atom.eatom) , atom->nmax); // cu_eatom->set_buffer(&(copy_buffer),&(copy_buffersize),true);} - - if(cu_eatom->get_dim()[0] != atom->nmax) { - //delete cu_eatom; - //cu_eatom = new cCudaData (force->pair->eatom, & (shared_data.atom.eatom) , atom->nmax );// cu_eatom->set_buffer(&(copy_buffer),&(copy_buffersize),true);} - shared_data.atom.update_nmax = 2; - } - - cu_eatom->set_host_data(force->pair->eatom); - cu_eatom->memset_device(0); - } - - if(vflag_atom) { - if(not cu_vatom) - cu_vatom = new cCudaData ((double*)force->pair->vatom, & (shared_data.atom.vatom) , atom->nmax , 6);// cu_vatom->set_buffer(&(copy_buffer),&(copy_buffersize),true);} - - if(cu_vatom->get_dim()[0] != atom->nmax) { - //delete cu_vatom; - //cu_vatom = new cCudaData ((double*)force->pair->vatom, & (shared_data.atom.vatom) , atom->nmax ,6 );// cu_vatom->set_buffer(&(copy_buffer),&(copy_buffersize),true);} - shared_data.atom.update_nmax = 2; - } - - cu_vatom->set_host_data((double*)force->pair->vatom); - cu_vatom->memset_device(0); - } -} - -void Cuda::uploadAll() -{ - MYDBG(printf("# CUDA: Cuda::uploadAll() ... start\n");) - my_times starttime; - my_times endtime; - - if(atom->nmax != shared_data.atom.nmax) checkResize(); - - my_gettime(CLOCK_REALTIME, &starttime); - cu_x ->upload(); - cu_v ->upload(); - cu_f ->upload(); - cu_tag ->upload(); - cu_type->upload(); - cu_mask->upload(); - cu_image->upload(); - - if(shared_data.atom.q_flag) cu_q ->upload(); - - if(atom->rmass) cu_rmass->upload(); - - if(atom->radius) cu_radius->upload(); - - if(atom->omega) cu_omega->upload(); - - if(atom->torque) cu_torque->upload(); - - if(atom->special) cu_special->upload(); - - if(atom->nspecial) cu_nspecial->upload(); - - if(atom->molecule) cu_molecule->upload(); - - if(cu_eatom) cu_eatom->upload(); - - if(cu_vatom) cu_vatom->upload(); - - my_gettime(CLOCK_REALTIME, &endtime); - uploadtime += (endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); - CUDA_IF_BINNING(Cuda_PreBinning(& shared_data);) - CUDA_IF_BINNING(Cuda_Binning(& shared_data);) - - shared_data.atom.triggerneighsq = neighbor->triggersq; - MYDBG(printf("# CUDA: Cuda::uploadAll() ... end\n");) -} - -void Cuda::downloadAll() -{ - MYDBG(printf("# CUDA: Cuda::downloadAll() ... start\n");) - my_times starttime; - my_times endtime; - - if(atom->nmax != shared_data.atom.nmax) checkResize(); - - CUDA_IF_BINNING(Cuda_ReverseBinning(& shared_data);) - my_gettime(CLOCK_REALTIME, &starttime); - cu_x ->download(); - cu_v ->download(); - cu_f ->download(); - cu_type->download(); - cu_tag ->download(); - cu_mask->download(); - cu_image->download(); - - //if(shared_data.atom.need_eatom) cu_eatom->download(); - //if(shared_data.atom.need_vatom) cu_vatom->download(); - - if(shared_data.atom.q_flag) cu_q ->download(); - - if(atom->rmass) cu_rmass->download(); - - if(atom->radius) cu_radius->download(); - - if(atom->omega) cu_omega->download(); - - if(atom->torque) cu_torque->download(); - - if(atom->special) cu_special->download(); - - if(atom->nspecial) cu_nspecial->download(); - - if(atom->molecule) cu_molecule->download(); - - if(cu_eatom) cu_eatom->download(); - - if(cu_vatom) cu_vatom->download(); - - my_gettime(CLOCK_REALTIME, &endtime); - downloadtime += (endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); - MYDBG(printf("# CUDA: Cuda::downloadAll() ... end\n");) -} - -void Cuda::upload(int datamask) -{ - MYDBG(printf("# CUDA: Cuda::upload() ... start\n");) - my_times starttime; - my_times endtime; - - if(atom->nmax != shared_data.atom.nmax) checkResize(); - - my_gettime(CLOCK_REALTIME, &starttime); - if(X_MASK & datamask) cu_x ->upload(); - if(V_MASK & datamask) cu_v ->upload(); - if(F_MASK & datamask) cu_f ->upload(); - if(TYPE_MASK & datamask) cu_type->upload(); - if(TAG_MASK & datamask) cu_tag ->upload(); - if(MASK_MASK & datamask) cu_mask->upload(); - if(IMAGE_MASK & datamask) cu_image->upload(); - - //if(shared_data.atom.need_eatom) cu_eatom->upload(); - //if(shared_data.atom.need_vatom) cu_vatom->upload(); - - if(shared_data.atom.q_flag) - if(Q_MASK & datamask) cu_q ->upload(); - - if(atom->rmass) - if(RMASS_MASK & datamask) cu_rmass->upload(); - - if(atom->radius) - if(RADIUS_MASK & datamask) cu_radius->upload(); - - if(atom->omega) - if(OMEGA_MASK & datamask) cu_omega->upload(); - - if(atom->torque) - if(TORQUE_MASK & datamask) cu_torque->upload(); - - if(atom->special) - if(SPECIAL_MASK & datamask) cu_special->upload(); - - if(atom->nspecial) - if(SPECIAL_MASK & datamask) cu_nspecial->upload(); - - if(atom->molecule) - if(MOLECULE_MASK & datamask) cu_molecule->upload(); - - if(cu_eatom) cu_eatom->upload(); - - if(cu_vatom) cu_vatom->upload(); - - my_gettime(CLOCK_REALTIME, &endtime); - uploadtime += (endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); - MYDBG(printf("# CUDA: Cuda::upload() ... end\n");) -} - -void Cuda::download(int datamask) -{ - MYDBG(printf("# CUDA: Cuda::download() ... start\n");) - my_times starttime; - my_times endtime; - - if(atom->nmax != shared_data.atom.nmax) checkResize(); - - CUDA_IF_BINNING(Cuda_ReverseBinning(& shared_data);) - my_gettime(CLOCK_REALTIME, &starttime); - if(X_MASK & datamask) cu_x ->download(); - if(V_MASK & datamask) cu_v ->download(); - if(F_MASK & datamask) cu_f ->download(); - if(TYPE_MASK & datamask) cu_type->download(); - if(TAG_MASK & datamask) cu_tag ->download(); - if(MASK_MASK & datamask) cu_mask->download(); - if(IMAGE_MASK & datamask) cu_image->download(); - - //if(shared_data.atom.need_eatom) cu_eatom->download(); - //if(shared_data.atom.need_vatom) cu_vatom->download(); - - if(shared_data.atom.q_flag) - if(Q_MASK & datamask) cu_q ->download(); - - if(atom->rmass) - if(RMASS_MASK & datamask) cu_rmass->download(); - - if(atom->radius) - if(RADIUS_MASK & datamask) cu_radius->download(); - - if(atom->omega) - if(OMEGA_MASK & datamask) cu_omega->download(); - - if(atom->torque) - if(TORQUE_MASK & datamask) cu_torque->download(); - - if(atom->special) - if(SPECIAL_MASK & datamask) cu_special->download(); - - if(atom->nspecial) - if(SPECIAL_MASK & datamask) cu_nspecial->download(); - - if(atom->molecule) - if(MOLECULE_MASK & datamask) cu_molecule->download(); - - if(cu_eatom) cu_eatom->download(); - - if(cu_vatom) cu_vatom->download(); - - my_gettime(CLOCK_REALTIME, &endtime); - downloadtime += (endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); - MYDBG(printf("# CUDA: Cuda::download() ... end\n");) -} - -void Cuda::downloadX() -{ - Cuda_Pair_RevertXType(& this->shared_data); - cu_x->download(); -} - -CudaNeighList* Cuda::registerNeighborList(class NeighList* neigh_list) -{ - MYDBG(printf("# CUDA: Cuda::registerNeighborList() ... start a\n");) - std::map::iterator p = neigh_lists.find(neigh_list); - - if(p != neigh_lists.end()) return p->second; - else { - CudaNeighList* neigh_list_cuda = new CudaNeighList(lmp, neigh_list); - neigh_lists.insert(std::pair(neigh_list, neigh_list_cuda)); - return neigh_list_cuda; - } - - MYDBG(printf("# CUDA: Cuda::registerNeighborList() ... end b\n");) -} - -void Cuda::uploadAllNeighborLists() -{ - MYDBG(printf("# CUDA: Cuda::uploadAllNeighborList() ... start\n");) - std::map::iterator p = neigh_lists.begin(); - - while(p != neigh_lists.end()) { - p->second->nl_upload(); - - if(not(p->second->neigh_list->cuda_list->build_cuda)) - for(int i = 0; i < atom->nlocal; i++) - p->second->sneighlist.maxneighbors = MAX(p->second->neigh_list->numneigh[i], p->second->sneighlist.maxneighbors) ; - - ++p; - } - - MYDBG(printf("# CUDA: Cuda::uploadAllNeighborList() ... done\n");) -} - -void Cuda::downloadAllNeighborLists() -{ - MYDBG(printf("# CUDA: Cuda::downloadAllNeighborList() ... start\n");) - std::map::iterator p = neigh_lists.begin(); - - while(p != neigh_lists.end()) { - p->second->nl_download(); - ++p; - } -} - -void Cuda::update_xhold(int &maxhold, double* xhold) -{ - if(this->shared_data.atom.maxhold < atom->nmax) { - maxhold = atom->nmax; - delete this->cu_xhold; - this->cu_xhold = new cCudaData ((double*)xhold, & this->shared_data.atom.xhold , maxhold, 3); - } - - this->shared_data.atom.maxhold = maxhold; - CudaWrapper_CopyData(this->cu_xhold->dev_data(), this->cu_x->dev_data(), 3 * atom->nmax * sizeof(X_CFLOAT)); -} - -void Cuda::setTimingsZero() -{ - shared_data.cuda_timings.test1 = 0; - shared_data.cuda_timings.test2 = 0; - - //communication - shared_data.cuda_timings.comm_forward_total = 0; - shared_data.cuda_timings.comm_forward_mpi_upper = 0; - shared_data.cuda_timings.comm_forward_mpi_lower = 0; - shared_data.cuda_timings.comm_forward_kernel_pack = 0; - shared_data.cuda_timings.comm_forward_kernel_unpack = 0; - shared_data.cuda_timings.comm_forward_upload = 0; - shared_data.cuda_timings.comm_forward_download = 0; - - shared_data.cuda_timings.comm_exchange_total = 0; - shared_data.cuda_timings.comm_exchange_mpi = 0; - shared_data.cuda_timings.comm_exchange_kernel_pack = 0; - shared_data.cuda_timings.comm_exchange_kernel_unpack = 0; - shared_data.cuda_timings.comm_exchange_kernel_fill = 0; - shared_data.cuda_timings.comm_exchange_cpu_pack = 0; - shared_data.cuda_timings.comm_exchange_upload = 0; - shared_data.cuda_timings.comm_exchange_download = 0; - - shared_data.cuda_timings.comm_border_total = 0; - shared_data.cuda_timings.comm_border_mpi = 0; - shared_data.cuda_timings.comm_border_kernel_pack = 0; - shared_data.cuda_timings.comm_border_kernel_unpack = 0; - shared_data.cuda_timings.comm_border_kernel_buildlist = 0; - shared_data.cuda_timings.comm_border_kernel_self = 0; - shared_data.cuda_timings.comm_border_upload = 0; - shared_data.cuda_timings.comm_border_download = 0; - - //pair forces - shared_data.cuda_timings.pair_xtype_conversion = 0; - shared_data.cuda_timings.pair_kernel = 0; - shared_data.cuda_timings.pair_virial = 0; - shared_data.cuda_timings.pair_force_collection = 0; - - //neighbor - shared_data.cuda_timings.neigh_bin = 0; - shared_data.cuda_timings.neigh_build = 0; - shared_data.cuda_timings.neigh_special = 0; - - //PPPM - shared_data.cuda_timings.pppm_particle_map = 0; - shared_data.cuda_timings.pppm_make_rho = 0; - shared_data.cuda_timings.pppm_brick2fft = 0; - shared_data.cuda_timings.pppm_poisson = 0; - shared_data.cuda_timings.pppm_fillbrick = 0; - shared_data.cuda_timings.pppm_fieldforce = 0; - shared_data.cuda_timings.pppm_compute = 0; - - CudaWrapper_CheckUploadTime(true); - CudaWrapper_CheckDownloadTime(true); - CudaWrapper_CheckCPUBufUploadTime(true); - CudaWrapper_CheckCPUBufDownloadTime(true); -} - -void Cuda::print_timings() -{ - if(universe->me != 0) return; - - if(not dotiming) return; - - printf("\n # CUDA: Special timings\n\n"); - printf("\n Transfer Times\n"); - printf(" PCIe Upload: \t %lf s\n", CudaWrapper_CheckUploadTime()); - printf(" PCIe Download:\t %lf s\n", CudaWrapper_CheckDownloadTime()); - printf(" CPU Tempbbuf Upload: \t %lf \n", CudaWrapper_CheckCPUBufUploadTime()); - printf(" CPU Tempbbuf Download: \t %lf \n", CudaWrapper_CheckCPUBufDownloadTime()); - - printf("\n Communication \n"); - - printf(" Forward Total \t %lf \n", shared_data.cuda_timings.comm_forward_total); - printf(" Forward MPI Upper Bound \t %lf \n", shared_data.cuda_timings.comm_forward_mpi_upper); - printf(" Forward MPI Lower Bound \t %lf \n", shared_data.cuda_timings.comm_forward_mpi_lower); - printf(" Forward Kernel Pack \t %lf \n", shared_data.cuda_timings.comm_forward_kernel_pack); - printf(" Forward Kernel Unpack \t %lf \n", shared_data.cuda_timings.comm_forward_kernel_unpack); - printf(" Forward Kernel Self \t %lf \n", shared_data.cuda_timings.comm_forward_kernel_self); - printf(" Forward Upload \t %lf \n", shared_data.cuda_timings.comm_forward_upload); - printf(" Forward Download \t %lf \n", shared_data.cuda_timings.comm_forward_download); - printf(" Forward Overlap Split Ratio\t %lf \n", shared_data.comm.overlap_split_ratio); - printf("\n"); - - printf(" Exchange Total \t %lf \n", shared_data.cuda_timings.comm_exchange_total); - printf(" Exchange MPI \t %lf \n", shared_data.cuda_timings.comm_exchange_mpi); - printf(" Exchange Kernel Pack \t %lf \n", shared_data.cuda_timings.comm_exchange_kernel_pack); - printf(" Exchange Kernel Unpack \t %lf \n", shared_data.cuda_timings.comm_exchange_kernel_unpack); - printf(" Exchange Kernel Fill \t %lf \n", shared_data.cuda_timings.comm_exchange_kernel_fill); - printf(" Exchange CPU Pack \t %lf \n", shared_data.cuda_timings.comm_exchange_cpu_pack); - printf(" Exchange Upload \t %lf \n", shared_data.cuda_timings.comm_exchange_upload); - printf(" Exchange Download \t %lf \n", shared_data.cuda_timings.comm_exchange_download); - printf("\n"); - - printf(" Border Total \t %lf \n", shared_data.cuda_timings.comm_border_total); - printf(" Border MPI \t %lf \n", shared_data.cuda_timings.comm_border_mpi); - printf(" Border Kernel Pack \t %lf \n", shared_data.cuda_timings.comm_border_kernel_pack); - printf(" Border Kernel Unpack \t %lf \n", shared_data.cuda_timings.comm_border_kernel_unpack); - printf(" Border Kernel Self \t %lf \n", shared_data.cuda_timings.comm_border_kernel_self); - printf(" Border Kernel BuildList \t %lf \n", shared_data.cuda_timings.comm_border_kernel_buildlist); - printf(" Border Upload \t %lf \n", shared_data.cuda_timings.comm_border_upload); - printf(" Border Download \t %lf \n", shared_data.cuda_timings.comm_border_download); - printf("\n"); - - //pair forces - printf(" Pair XType Conversion \t %lf \n", shared_data.cuda_timings.pair_xtype_conversion); - printf(" Pair Kernel \t %lf \n", shared_data.cuda_timings.pair_kernel); - printf(" Pair Virial \t %lf \n", shared_data.cuda_timings.pair_virial); - printf(" Pair Force Collection \t %lf \n", shared_data.cuda_timings.pair_force_collection); - printf("\n"); - - //neighbor - printf(" Neighbor Binning \t %lf \n", shared_data.cuda_timings.neigh_bin); - printf(" Neighbor Build \t %lf \n", shared_data.cuda_timings.neigh_build); - printf(" Neighbor Special \t %lf \n", shared_data.cuda_timings.neigh_special); - printf("\n"); - - //pppm - if(force->kspace) { - printf(" PPPM Total \t %lf \n", shared_data.cuda_timings.pppm_compute); - printf(" PPPM Particle Map \t %lf \n", shared_data.cuda_timings.pppm_particle_map); - printf(" PPPM Make Rho \t %lf \n", shared_data.cuda_timings.pppm_make_rho); - printf(" PPPM Brick2fft \t %lf \n", shared_data.cuda_timings.pppm_brick2fft); - printf(" PPPM Poisson \t %lf \n", shared_data.cuda_timings.pppm_poisson); - printf(" PPPM Fillbrick \t %lf \n", shared_data.cuda_timings.pppm_fillbrick); - printf(" PPPM Fieldforce \t %lf \n", shared_data.cuda_timings.pppm_fieldforce); - printf("\n"); - } - - printf(" Debug Test 1 \t %lf \n", shared_data.cuda_timings.test1); - printf(" Debug Test 2 \t %lf \n", shared_data.cuda_timings.test2); - - printf("\n"); -} diff --git a/src/USER-CUDA/cuda_data.h b/src/USER-CUDA/cuda_data.h deleted file mode 100644 index bb778c12d3..0000000000 --- a/src/USER-CUDA/cuda_data.h +++ /dev/null @@ -1,796 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifndef _CUDA_DATA_H_ -#define _CUDA_DATA_H_ - - -enum copy_mode {x, xx, xy, yx, xyz, xzy}; // yxz, yzx, zxy, zyx not yet implemented since they were not needed yet -//xx==x in atom_vec x is a member therefore copymode x produces compile errors -#include "cuda_shared.h" -#include "cuda_wrapper_cu.h" -#include "cuda_data_cu.h" -#include - -#include -#include -template -class cCudaData -{ - protected: - void** buffer; - int* buf_size; - host_type* host_data; - dev_array* dev_data_array; - dev_type* temp_data; - unsigned nbytes; - bool owns_dev_array; - bool current_data_on_device; //this is not yet working as intended and therefore deactivated - bool current_data_on_host; - bool is_continues; - bool pinned; - - public: - cCudaData(host_type* host_data, dev_array* dev_data_array, unsigned dim_x, unsigned dim_y=0, unsigned dim_z=0, bool is_pinned=false); - cCudaData(host_type* host_data, unsigned dim_x, unsigned dim_y=0, unsigned dim_z=0, bool is_pinned=false); - ~cCudaData(); - void* dev_data() {if(dev_data_array!=NULL) return dev_data_array->dev_data; else return NULL;}; - void set_dev_data(void* adev_data) {dev_data_array->dev_data=adev_data;}; - void set_dev_array(dev_array* adev_array) {dev_data_array=adev_array;}; - void set_host_data(host_type* host_data); - void* get_host_data() { return host_data;}; - void set_buffer(void** buffer,int* buf_size,bool ais_continues); - unsigned int* get_dim() {return dev_data_array->dim;}; - // if you want to upload data to the gpu, which will not change there, then set will_be_changed=false - // if you want to upload data to the gpu and update it there, then set will_be_changed=true (default) - void upload(bool will_be_changed=true); - void uploadAsync(int stream, bool will_be_changed=true ); - // if you want to download data just to have a look at it, then set will_be_changed=false - // if you are going to modify the downloaded data, then set will_be_changed=true (default) - void download(bool will_be_changed=true); - void downloadAsync(int stream); - void memset_device(int value); - void device_data_has_changed() {current_data_on_device=false;} - void host_data_has_changed() {current_data_on_host=false;} - int dev_size() { - int size = dev_data_array->dim[0]*sizeof(dev_type); - if(dev_data_array->dim[1]) size*=dev_data_array->dim[1]; - if(dev_data_array->dim[2]) size*=dev_data_array->dim[2]; - return size;} -}; - - -template -cCudaData -::cCudaData(host_type* host_data, dev_array* dev_data_array, unsigned dim_x, unsigned dim_y, unsigned dim_z, bool is_pinned) -{ - pinned=is_pinned; - owns_dev_array = false; - current_data_on_device = false; - current_data_on_host = false; - is_continues = false; - this->host_data = host_data; - this->dev_data_array = dev_data_array; - unsigned ndev; - if((mode == x)||(mode==xx)) - { - ndev = dim_x; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = 0; - dev_data_array->dim[2] = 0; - } - else if(mode == xy || mode == yx ) - { - ndev = dim_x * dim_y; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = dim_y; - dev_data_array->dim[2] = 0; - } - else - { - ndev = dim_x * dim_y * dim_z; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = dim_y; - dev_data_array->dim[2] = dim_z; - } - nbytes = ndev * sizeof(dev_type); - if(nbytes<=0) - { - host_data=NULL; - temp_data=NULL; - dev_data_array->dev_data=NULL; - return; - } - - dev_data_array->dev_data = CudaWrapper_AllocCudaData(nbytes); - if(((mode!=x)&&(mode!=xx)) || typeid(host_type) != typeid(dev_type)) - { - if(not pinned) - temp_data = new dev_type[ndev]; - else - { - temp_data = (dev_type*) CudaWrapper_AllocPinnedHostData(ndev*sizeof(dev_type)); - } - } -} - -template -cCudaData -::cCudaData(host_type* host_data, unsigned dim_x, unsigned dim_y, unsigned dim_z, bool is_pinned) -{ - pinned=is_pinned; - this->dev_data_array = new dev_array; - this->owns_dev_array = true; - current_data_on_device = false; - current_data_on_host = false; - is_continues = false; - this->host_data = host_data; - unsigned ndev; - if((mode == x)||(mode==xx)) - { - ndev = dim_x; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = 0; - dev_data_array->dim[2] = 0; - } - else if(mode == xy || mode == yx ) - { - ndev = dim_x * dim_y; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = dim_y; - dev_data_array->dim[2] = 0; - } - else - { - ndev = dim_x * dim_y * dim_z; - dev_data_array->dim[0] = dim_x; - dev_data_array->dim[1] = dim_y; - dev_data_array->dim[2] = dim_z; - } - nbytes = ndev * sizeof(dev_type); - if(nbytes<=0) - { - host_data=NULL; - temp_data=NULL; - dev_data_array->dev_data=NULL; - return; - } - - dev_data_array->dev_data = CudaWrapper_AllocCudaData(nbytes); - if(((mode!=x)&&(mode!=xx)) || (typeid(host_type) != typeid(dev_type))) - { - if(not pinned) - temp_data = new dev_type[ndev]; - else - { - temp_data = (dev_type*) CudaWrapper_AllocPinnedHostData(ndev*sizeof(dev_type)); - } - } -} - -template -cCudaData -::~cCudaData() -{ - if(((mode!=x)&&(mode!=xx)) || typeid(host_type) != typeid(dev_type)) - { - if(not pinned) - delete [] temp_data; - else - { - CudaWrapper_FreePinnedHostData((void*)temp_data); - } - } - if((dev_data_array->dev_data)&&(nbytes>0)) - CudaWrapper_FreeCudaData(dev_data_array->dev_data,nbytes); - if(owns_dev_array) delete dev_data_array; -} - -template -void cCudaData -::set_host_data(host_type* host_data) -{ - this->host_data = host_data; -} - -template -void cCudaData -::upload(bool will_be_changed) -{ - // if current data is already up, do not re-upload it -// if(current_data_on_device) return; - if(buffer&&is_continues) - { - printf("Actual Buffer: %p %i\n",*buffer,*buf_size); - if(typeid(host_type)==typeid(double)) - { - if(typeid(dev_type)==typeid(double)) - { - CudaData_Upload_DoubleDouble((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - else if(typeid(dev_type)==typeid(float)) - { - CudaData_Upload_DoubleFloat((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - else if(typeid(host_type)==typeid(float)) - { - if(typeid(dev_type)==typeid(double)) - { - CudaData_Upload_FloatDouble((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - else if(typeid(dev_type)==typeid(float)) - { - CudaData_Upload_FloatFloat((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - else if(typeid(host_type)==typeid(int)) - { - if(typeid(dev_type)==typeid(int)) - { - CudaData_Upload_IntInt((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - } - switch(mode) - { - case x: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_UploadCudaData(host_data, dev_data_array->dev_data, nbytes); - else - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) temp_data[i] = static_cast(host_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - } - break; - } - - case xx: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_UploadCudaData(host_data, dev_data_array->dev_data, nbytes); - else - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) temp_data[i] = static_cast(host_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - } - break; - } - - case xy: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - { - dev_type* temp = &temp_data[i * dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - temp[j] = static_cast((reinterpret_cast(host_data))[i][j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - break; - } - - case yx: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[j*dev_data_array->dim[0]]; - for(unsigned i=0; idim[0]; ++i) - { - temp[i] = static_cast(reinterpret_cast(host_data)[i][j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - break; - } - case xyz: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[(i*dev_data_array->dim[1]+j)*dev_data_array->dim[2]]; - for(unsigned k=0; kdim[2]; ++k) - { - temp[k] = static_cast(reinterpret_cast(host_data)[i][j][k]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - break; - } - - case xzy: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned k=0; kdim[2]; ++k) - { - dev_type* temp = &temp_data[(i*dev_data_array->dim[2]+k)*dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - temp[j] = static_cast(reinterpret_cast(host_data)[i][j][k]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaData(temp_data, dev_data_array->dev_data, nbytes); - break; - } - } - // we have uploaded the data to the device, i.e.: - current_data_on_device = true; - // the data is going to change on the device, making the host data out-dated - if(will_be_changed) current_data_on_host = false; -} - -template -void cCudaData -::uploadAsync(int stream,bool will_be_changed) -{ - // if current data is already up, do not re-upload it -// if(current_data_on_device) return; - if(buffer&&is_continues) - { - printf("Actual Buffer: %p %i\n",*buffer,*buf_size); - if(typeid(host_type)==typeid(double)) - { - if(typeid(dev_type)==typeid(double)) - { - CudaData_Upload_DoubleDouble((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - else if(typeid(dev_type)==typeid(float)) - { - CudaData_Upload_DoubleFloat((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - else if(typeid(host_type)==typeid(float)) - { - if(typeid(dev_type)==typeid(double)) - { - CudaData_Upload_FloatDouble((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - else if(typeid(dev_type)==typeid(float)) - { - CudaData_Upload_FloatFloat((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - else if(typeid(host_type)==typeid(int)) - { - if(typeid(dev_type)==typeid(int)) - { - CudaData_Upload_IntInt((void*) host_data,dev_data_array->dev_data, - dev_data_array->dim,mode,*buffer); - current_data_on_device = true; - if(will_be_changed) current_data_on_host = false; - return; - } - } - } - switch(mode) - { - case x: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_UploadCudaDataAsync(host_data, dev_data_array->dev_data, nbytes,stream); - else - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) temp_data[i] = static_cast(host_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - } - break; - } - - case xx: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_UploadCudaDataAsync(host_data, dev_data_array->dev_data, nbytes,stream); - else - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) temp_data[i] = static_cast(host_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - } - break; - } - - case xy: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - { - dev_type* temp = &temp_data[i * dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - temp[j] = static_cast((reinterpret_cast(host_data))[i][j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - break; - } - - case yx: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[j*dev_data_array->dim[0]]; - for(unsigned i=0; idim[0]; ++i) - { - temp[i] = static_cast(reinterpret_cast(host_data)[i][j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - break; - } - case xyz: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[(i*dev_data_array->dim[1]+j)*dev_data_array->dim[2]]; - for(unsigned k=0; kdim[2]; ++k) - { - temp[k] = static_cast(reinterpret_cast(host_data)[i][j][k]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - break; - } - - case xzy: - { - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned k=0; kdim[2]; ++k) - { - dev_type* temp = &temp_data[(i*dev_data_array->dim[2]+k)*dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - temp[j] = static_cast(reinterpret_cast(host_data)[i][j][k]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufUploadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - CudaWrapper_UploadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes,stream); - break; - } - } - // we have uploaded the data to the device, i.e.: - current_data_on_device = true; - // the data is going to change on the device, making the host data out-dated - if(will_be_changed) current_data_on_host = false; -} - -template -void cCudaData -::download(bool will_be_changed) -{ - // if current data is already down, do not re-download it -// if(current_data_on_host) return; - switch(mode) - { - case x: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_DownloadCudaData(host_data, dev_data_array->dev_data, nbytes); - else - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) host_data[i] = static_cast(temp_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - } - break; - } - - case xx: - { - if(typeid(host_type) == typeid(dev_type)) - CudaWrapper_DownloadCudaData(host_data, dev_data_array->dev_data, nbytes); - else - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) host_data[i] = static_cast(temp_data[i]); - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - } - break; - } - - case xy: - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - { - dev_type* temp = &temp_data[i * dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - reinterpret_cast(host_data)[i][j] = static_cast(temp[j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - break; - } - - case yx: - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[j*dev_data_array->dim[0]]; - for(unsigned i=0; idim[0]; ++i) - { - reinterpret_cast(host_data)[i][j] = static_cast(temp[i]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - break; - } - - case xyz: - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[(i * dev_data_array->dim[1]+j)*dev_data_array->dim[2]]; - for(unsigned k=0; kdim[2]; ++k) - { - reinterpret_cast(host_data)[i][j][k] = static_cast(temp[k]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - break; - } - - case xzy: - { - CudaWrapper_DownloadCudaData(temp_data, dev_data_array->dev_data, nbytes); - timespec time1,time2; - my_gettime(CLOCK_REALTIME,&time1); - for(unsigned i=0; idim[0]; ++i) - for(unsigned k=0; kdim[2]; ++k) - { - dev_type* temp = &temp_data[(i * dev_data_array->dim[2]+k)*dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - reinterpret_cast(host_data)[i][j][k] = static_cast(temp[j]); - } - } - my_gettime(CLOCK_REALTIME,&time2); - CudaWrapper_AddCPUBufDownloadTime( - time2.tv_sec-time1.tv_sec+1.0*(time2.tv_nsec-time1.tv_nsec)/1000000000); - break; - } - } - // we have downloaded the data to the host, i.e.: - current_data_on_host = true; - // the data is going to change on the host, making the device data out-dated - if(will_be_changed) current_data_on_device = false; -} - -template -void cCudaData -::downloadAsync(int stream) -{ - switch(mode) - { - case x: - { - if(typeid(host_type) == typeid(dev_type)) - { - CudaWrapper_DownloadCudaDataAsync(host_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - } - else - { - CudaWrapper_DownloadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - for(unsigned i=0; idim[0]; ++i) host_data[i] = static_cast(temp_data[i]); - } - break; - } - - case xx: - { - if(typeid(host_type) == typeid(dev_type)) - { - CudaWrapper_DownloadCudaDataAsync(host_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - } - else - { - CudaWrapper_DownloadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - for(unsigned i=0; idim[0]; ++i) host_data[i] = static_cast(temp_data[i]); - } - break; - } - - case xy: - { - CudaWrapper_DownloadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - for(unsigned i=0; idim[0]; ++i) - { - dev_type* temp = &temp_data[i * dev_data_array->dim[1]]; - for(unsigned j=0; jdim[1]; ++j) - { - reinterpret_cast(host_data)[i][j] = static_cast(temp[j]); - } - } - break; - } - - case yx: - { - CudaWrapper_DownloadCudaDataAsync(temp_data, dev_data_array->dev_data, nbytes, stream); - CudaWrapper_SyncStream(stream); - for(unsigned j=0; jdim[1]; ++j) - { - dev_type* temp = &temp_data[j*dev_data_array->dim[0]]; - for(unsigned i=0; idim[0]; ++i) - { - reinterpret_cast(host_data)[i][j] = static_cast(temp[i]); - } - } - break; - } - } -} - - -template -void cCudaData -::memset_device(int value) -{ - CudaWrapper_Memset(dev_data_array->dev_data,value, nbytes); -} - -template -void cCudaData -::set_buffer(void** abuffer,int* abuf_size,bool ais_continues) -{ - buffer = abuffer; - buf_size = abuf_size; - unsigned nbytes_buf=(nbytes/sizeof(dev_type))*sizeof(host_type); - if(buffer!=NULL) - if(not((typeid(host_type) == typeid(dev_type))&&(mode == x || mode == xx))) - { - printf("Allocate Buffer: %p %i\n",*buffer,*buf_size); - if(((*buffer)!=NULL)&&(*buf_size -#include -#include -#include -#include "user_cuda.h" -#include "atom.h" -#include "error.h" - -using namespace LAMMPS_NS; - -CudaNeighList::CudaNeighList(LAMMPS *lmp, class NeighList* neigh_list) : Pointers(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - MYDBG(printf("# CUDA: CudaNeighList::cudaNeighList() ... start\n");) - this->neigh_list = neigh_list; - neigh_list->cuda_list=this; - sneighlist.maxlocal = neigh_list->get_maxlocal(); - sneighlist.maxneighbors = 32; - sneighlist.maxcut = 0.0; - sneighlist.cutneighsq = NULL; - cu_neighbors = NULL; - cu_neighbors_border = NULL; - cu_neighbors_inner = NULL; - cu_numneigh_border = NULL; - cu_numneigh_inner = NULL; - cu_numneigh = NULL; - cu_ilist = NULL; - cu_ilist_border = NULL; - cu_inum_border = NULL; - inum_border = 0; - neighbors = NULL; - neighbors_inner = NULL; - neighbors_border = NULL; - numneigh_border = NULL; - numneigh_inner = NULL; - ilist_border = NULL; - - build_cuda = false; - sneighlist.binned_id=NULL; - sneighlist.bin_dim=new int[3]; - sneighlist.bin_dim[0]=0; - sneighlist.bin_dim[1]=0; - sneighlist.bin_dim[2]=0; - - cu_ex_type = NULL; - cu_ex1_bit = NULL; - cu_ex2_bit = NULL; - cu_ex_mol_bit = NULL; - sneighlist.nex_type=0; - sneighlist.nex_group=0; - sneighlist.nex_mol=0; - - sneighlist.bin_nmax=0; - sneighlist.bin_extraspace=0.05; - MYDBG(printf("# CUDA: CudaNeighList::cudaNeighList() ... end\n");) - -} - -CudaNeighList::~CudaNeighList() -{ - dev_free(); -} - -void CudaNeighList::dev_alloc() -{ - MYDBG( printf("# CUDA: CudaNeighList::dev_alloc() ... start\n"); ) - cu_ilist = new cCudaData (neigh_list->ilist , & sneighlist.ilist , sneighlist.maxlocal ); - cu_numneigh = new cCudaData (neigh_list->numneigh, & sneighlist.numneigh , sneighlist.maxlocal ); - neighbors = new int[atom->nmax*sneighlist.maxneighbors]; - cu_neighbors= new cCudaData (neighbors , & sneighlist.neighbors, atom->nmax*sneighlist.maxneighbors ); - - if(cuda->shared_data.overlap_comm) - { - ilist_border = new int[sneighlist.maxlocal]; - numneigh_border = new int[sneighlist.maxlocal]; - numneigh_inner = new int[sneighlist.maxlocal]; - cu_inum_border = new cCudaData (&inum_border , & sneighlist.inum_border , 1 ); - cu_ilist_border = new cCudaData (ilist_border , & sneighlist.ilist_border , sneighlist.maxlocal ); - cu_numneigh_border = new cCudaData (numneigh_border , & sneighlist.numneigh_border , sneighlist.maxlocal ); - cu_numneigh_inner = new cCudaData (numneigh_inner , & sneighlist.numneigh_inner , sneighlist.maxlocal ); - neighbors_border = new int[sneighlist.maxlocal*sneighlist.maxneighbors]; - cu_neighbors_border= new cCudaData (neighbors_border , & sneighlist.neighbors_border, sneighlist.maxlocal*sneighlist.maxneighbors ); - neighbors_inner = new int[sneighlist.maxlocal*sneighlist.maxneighbors]; - cu_neighbors_inner = new cCudaData (neighbors_inner , & sneighlist.neighbors_inner , sneighlist.maxlocal*sneighlist.maxneighbors ); - } - cuda->shared_data.atom.update_neigh=2; - MYDBG( printf("# CUDA: CudaNeighList::dev_alloc() ... end\n"); ) -} - -void CudaNeighList::dev_free() -{ - MYDBG( printf("# CUDA: CudaNeighList::dev_free() ... start\n"); ) - delete cu_numneigh; - delete cu_ilist; - delete [] neighbors; - delete cu_neighbors; - - if(cuda->shared_data.overlap_comm) - { - delete [] ilist_border; - delete [] numneigh_border; - delete [] numneigh_inner; - delete [] neighbors_border; - delete [] neighbors_inner; - delete cu_inum_border; - delete cu_neighbors_border; - delete cu_neighbors_inner; - delete cu_numneigh_border; - delete cu_numneigh_inner; - delete cu_ilist_border; - } - MYDBG( printf("# CUDA: CudaNeighList::dev_free() ... end\n"); ) -} - -void CudaNeighList::grow_device() -{ - MYDBG(printf("# CUDA: CudaNeighList::grow_device() ... start\n");) - // if host has allocated more memory for atom arrays than device has, then allocate more memory on device - int new_maxlocal = neigh_list->get_maxlocal(); - if(sneighlist.maxlocal < new_maxlocal) - { - sneighlist.maxlocal = new_maxlocal; - dev_free(); - dev_alloc(); - } - - if(!cu_ilist || !cu_numneigh) dev_alloc(); - - // check, if hosts data has been allocated somewhere else - if(cu_ilist ->get_host_data() != neigh_list->ilist) cu_ilist ->set_host_data(neigh_list->ilist); - if(cu_numneigh->get_host_data() != neigh_list->numneigh) cu_numneigh->set_host_data(neigh_list->numneigh); - - MYDBG(printf("# CUDA: CudaNeighList::grow_device() ... end\n");) -} - - -void CudaNeighList::nl_upload(bool will_be_changed) -{ - //return; - MYDBG(printf("# CUDA: CudaNeighList::nl_upload() ... start\n");) - if(cu_ilist) - cu_ilist->upload(); - if(cu_numneigh) - cu_numneigh->upload(); - MYDBG(printf("# CUDA: CudaNeighList::nl_upload() ... end\n");) -} - -void CudaNeighList::nl_download(bool will_be_changed) -{ - MYDBG(printf("# CUDA: CudaNeighList::nl_download() ... start\n");) - if(cu_ilist) - cu_ilist->download(); - if(cu_numneigh) - cu_numneigh->download(); - MYDBG(printf("# CUDA: CudaNeighList::nl_download() ... end\n");) -} diff --git a/src/USER-CUDA/cuda_neigh_list.h b/src/USER-CUDA/cuda_neigh_list.h deleted file mode 100644 index f733cdfd61..0000000000 --- a/src/USER-CUDA/cuda_neigh_list.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifndef LMP_NEIGH_LIST_CUDA_H -#define LMP_NEIGH_LIST_CUDA_H - -#include "pointers.h" -#include "cuda_data.h" -#include "neigh_list.h" - -namespace LAMMPS_NS -{ - -class CudaNeighList : protected Pointers -{ - public: - cCudaData* cu_ilist; - cCudaData* cu_numneigh; - cCudaData* cu_inum_border; - cCudaData* cu_ilist_border; - cCudaData* cu_numneigh_border; - cCudaData* cu_numneigh_inner; - cCudaData* cu_neighbors; - cCudaData* cu_neighbors_border; - cCudaData* cu_neighbors_inner; - cCudaData* cu_ex_type; - cCudaData* cu_ex1_bit; - cCudaData* cu_ex2_bit; - cCudaData* cu_ex_mol_bit; - - - cuda_shared_neighlist sneighlist; - - int* neighbors; - int* neighbors_inner; - int* neighbors_border; - int inum_border; - int* ilist_border; - int* numneigh_border; - int* numneigh_inner; - int nex_type; - int nex_group; - int nex_mol; - - bool build_cuda; - - CudaNeighList(class LAMMPS *, class NeighList* neigh_list); - ~CudaNeighList(); - void grow_device(); // will grow pages memory on device, keeping old pages. will grow lists memory on device, deleting old lists - void nl_upload(bool will_be_changed=true); - void nl_download(bool will_be_changed=true); - NeighList* neigh_list; - - void dev_alloc(); - void dev_free(); - - private: - class Cuda *cuda; -}; - -} - -#endif diff --git a/src/USER-CUDA/domain_cuda.cpp b/src/USER-CUDA/domain_cuda.cpp deleted file mode 100644 index 997a42a681..0000000000 --- a/src/USER-CUDA/domain_cuda.cpp +++ /dev/null @@ -1,345 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author (triclinic) : Pieter in 't Veld (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include "domain_cuda.h" -#include "style_region.h" -#include "atom.h" -#include "force.h" -#include "update.h" -#include "modify.h" -#include "fix.h" -#include "fix_deform.h" -#include "region.h" -#include "lattice.h" -#include "comm.h" -#include "memory.h" -#include "error.h" - -#include "user_cuda.h" -#include "domain_cu.h" - -using namespace LAMMPS_NS; - -#define BIG 1.0e20 -#define SMALL 1.0e-4 -#define DELTA 1 - -enum {NO_REMAP, X_REMAP, V_REMAP}; // same as fix_deform.cpp - -/* ---------------------------------------------------------------------- - default is periodic -------------------------------------------------------------------------- */ - -DomainCuda::DomainCuda(LAMMPS* lmp) : Domain(lmp) -{ - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR, "You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); -} - -/* ---------------------------------------------------------------------- */ - -void DomainCuda::init() -{ - Domain::init(); - - if(not cuda->finished_run) { - cuda->setDomainParams(); - Cuda_Domain_Init(&cuda->shared_data); - } -} - -/* ---------------------------------------------------------------------- - set global box params - assumes boxlo/hi and triclinic tilts are already set -------------------------------------------------------------------------- */ - -void DomainCuda::set_global_box() -{ - // one-time activation of CUDA - // do it here, b/c is now too late for further package commands - // activation must occur before any USER-CUDA class communicates with GPUs - - cuda->activate(); - - Domain::set_global_box(); - - if(not cuda->finished_run) { - cuda->setDomainParams(); - } -} - -/* ---------------------------------------------------------------------- - set lamda box params, only need be done one time - assumes global box is defined and proc assignment has been made by comm - for uppermost proc, insure subhi = 1.0 (in case round-off occurs) -------------------------------------------------------------------------- */ - -void DomainCuda::set_lamda_box() -{ - Domain::set_lamda_box(); - - if(not cuda->finished_run) { - cuda->setDomainParams(); - } -} - -/* ---------------------------------------------------------------------- - set local subbox params - assumes global box is defined and proc assignment has been made - for uppermost proc, insure subhi = boxhi (in case round-off occurs) -------------------------------------------------------------------------- */ - -void DomainCuda::set_local_box() -{ - Domain::set_local_box(); - - if(not cuda->finished_run) { - // cuda->setDomainParams(); - //Cuda_Domain_Init(&cuda->shared_data); - } -} - -/* ---------------------------------------------------------------------- - reset global & local boxes due to global box boundary changes - if shrink-wrapped, determine atom extent and reset boxlo/hi - if shrink-wrapped and triclinic, perform shrink-wrap in box coords -------------------------------------------------------------------------- */ - -void DomainCuda::reset_box() -{ - if(nonperiodic == 2) { - - // convert back to box coords for shrink-wrap operation - - if(triclinic) lamda2x(atom->nlocal); - - // compute extent of atoms on this proc - - double extent[3][2], all[3][2]; - - extent[2][0] = extent[1][0] = extent[0][0] = BIG; - extent[2][1] = extent[1][1] = extent[0][1] = -BIG; - - double** x = atom->x; - int nlocal = atom->nlocal; - - if(cuda->finished_setup && (!cuda->oncpu)) { - extent[0][0] = cuda->extent[0]; - extent[0][1] = cuda->extent[1]; - extent[1][0] = cuda->extent[2]; - extent[1][1] = cuda->extent[3]; - extent[2][0] = cuda->extent[4]; - extent[2][1] = cuda->extent[5]; - } else - for(int i = 0; i < nlocal; i++) { - extent[0][0] = MIN(extent[0][0], x[i][0]); - extent[0][1] = MAX(extent[0][1], x[i][0]); - extent[1][0] = MIN(extent[1][0], x[i][1]); - extent[1][1] = MAX(extent[1][1], x[i][1]); - extent[2][0] = MIN(extent[2][0], x[i][2]); - extent[2][1] = MAX(extent[2][1], x[i][2]); - } - - // compute extent across all procs - // flip sign of MIN to do it in one Allreduce MAX - - extent[0][0] = -extent[0][0]; - extent[1][0] = -extent[1][0]; - extent[2][0] = -extent[2][0]; - - MPI_Allreduce(extent, all, 6, MPI_DOUBLE, MPI_MAX, world); - - // in shrink-wrapped dims, set box by atom extent - // if minimum set, enforce min box size settings - - if(triclinic == 0) { - if(xperiodic == 0) { - if(boundary[0][0] == 2) boxlo[0] = -all[0][0] - small[0]; - else if(boundary[0][0] == 3) - boxlo[0] = MIN(-all[0][0] - small[0], minxlo); - - if(boundary[0][1] == 2) boxhi[0] = all[0][1] + small[0]; - else if(boundary[0][1] == 3) boxhi[0] = MAX(all[0][1] + small[0], minxhi); - - if(boxlo[0] > boxhi[0]) error->all(FLERR, "Illegal simulation box"); - } - - if(yperiodic == 0) { - if(boundary[1][0] == 2) boxlo[1] = -all[1][0] - small[1]; - else if(boundary[1][0] == 3) - boxlo[1] = MIN(-all[1][0] - small[1], minylo); - - if(boundary[1][1] == 2) boxhi[1] = all[1][1] + small[1]; - else if(boundary[1][1] == 3) boxhi[1] = MAX(all[1][1] + small[1], minyhi); - - if(boxlo[1] > boxhi[1]) error->all(FLERR, "Illegal simulation box"); - } - - if(zperiodic == 0) { - if(boundary[2][0] == 2) boxlo[2] = -all[2][0] - small[2]; - else if(boundary[2][0] == 3) - boxlo[2] = MIN(-all[2][0] - small[2], minzlo); - - if(boundary[2][1] == 2) boxhi[2] = all[2][1] + small[2]; - else if(boundary[2][1] == 3) boxhi[2] = MAX(all[2][1] + small[2], minzhi); - - if(boxlo[2] > boxhi[2]) error->all(FLERR, "Illegal simulation box"); - } - - } else { - double lo[3], hi[3]; - - if(xperiodic == 0) { - lo[0] = -all[0][0]; - lo[1] = 0.0; - lo[2] = 0.0; - Domain::lamda2x(lo, lo); - hi[0] = all[0][1]; - hi[1] = 0.0; - hi[2] = 0.0; - Domain::lamda2x(hi, hi); - - if(boundary[0][0] == 2) boxlo[0] = lo[0] - small[0]; - else if(boundary[0][0] == 3) boxlo[0] = MIN(lo[0] - small[0], minxlo); - - if(boundary[0][1] == 2) boxhi[0] = hi[0] + small[0]; - else if(boundary[0][1] == 3) boxhi[0] = MAX(hi[0] + small[0], minxhi); - - if(boxlo[0] > boxhi[0]) error->all(FLERR, "Illegal simulation box"); - } - - if(yperiodic == 0) { - lo[0] = 0.0; - lo[1] = -all[1][0]; - lo[2] = 0.0; - Domain::lamda2x(lo, lo); - hi[0] = 0.0; - hi[1] = all[1][1]; - hi[2] = 0.0; - Domain::lamda2x(hi, hi); - - if(boundary[1][0] == 2) boxlo[1] = lo[1] - small[1]; - else if(boundary[1][0] == 3) boxlo[1] = MIN(lo[1] - small[1], minylo); - - if(boundary[1][1] == 2) boxhi[1] = hi[1] + small[1]; - else if(boundary[1][1] == 3) boxhi[1] = MAX(hi[1] + small[1], minyhi); - - if(boxlo[1] > boxhi[1]) error->all(FLERR, "Illegal simulation box"); - - //xy *= (boxhi[1]-boxlo[1]) / yprd; - } - - if(zperiodic == 0) { - lo[0] = 0.0; - lo[1] = 0.0; - lo[2] = -all[2][0]; - Domain::lamda2x(lo, lo); - hi[0] = 0.0; - hi[1] = 0.0; - hi[2] = all[2][1]; - Domain::lamda2x(hi, hi); - - if(boundary[2][0] == 2) boxlo[2] = lo[2] - small[2]; - else if(boundary[2][0] == 3) boxlo[2] = MIN(lo[2] - small[2], minzlo); - - if(boundary[2][1] == 2) boxhi[2] = hi[2] + small[2]; - else if(boundary[2][1] == 3) boxhi[2] = MAX(hi[2] + small[2], minzhi); - - if(boxlo[2] > boxhi[2]) error->all(FLERR, "Illegal simulation box"); - - //xz *= (boxhi[2]-boxlo[2]) / xprd; - //yz *= (boxhi[2]-boxlo[2]) / yprd; - } - } - } - - set_global_box(); - set_local_box(); - - if(not cuda->finished_run) { - cuda->setDomainParams(); - Cuda_Domain_Init(&cuda->shared_data); - } - - // if shrink-wrapped, convert to lamda coords for new box - // must re-invoke pbc() b/c x2lamda result can be outside 0,1 due to roundoff - - if(nonperiodic == 2 && triclinic) { - x2lamda(atom->nlocal); - pbc(); - } -} - -/* ---------------------------------------------------------------------- - enforce PBC and modify box image flags for each atom - called every reneighboring and by other commands that change atoms - resulting coord must satisfy lo <= coord < hi - MAX is important since coord - prd < lo can happen when coord = hi - if fix deform, remap velocity of fix group atoms by box edge velocities - for triclinic, atoms must be in lamda coords (0-1) before pbc is called - image = 10 bits for each dimension - increment/decrement in wrap-around fashion -------------------------------------------------------------------------- */ - -void DomainCuda::pbc() -{ - if(cuda->finished_setup && (!cuda->oncpu)) { - cuda->setDomainParams(); - Cuda_Domain_PBC(&cuda->shared_data, deform_vremap, deform_groupbit, cuda->extent); - return; - } - - Domain::pbc(); -} - - -/* ---------------------------------------------------------------------- - convert triclinic 0-1 lamda coords to box coords for all N atoms - x = H lamda + x0; -------------------------------------------------------------------------- */ - -void DomainCuda::lamda2x(int n) -{ - if(cuda->finished_setup && (!cuda->oncpu)) { - Cuda_Domain_lamda2x(&cuda->shared_data, n); - return; - } - - Domain::lamda2x(n); -} - -/* ---------------------------------------------------------------------- - convert box coords to triclinic 0-1 lamda coords for all N atoms - lamda = H^-1 (x - x0) -------------------------------------------------------------------------- */ - -void DomainCuda::x2lamda(int n) -{ - if(cuda->finished_setup && (!cuda->oncpu)) { - Cuda_Domain_x2lamda(&cuda->shared_data, n); - return; - } - - Domain::x2lamda(n); -} diff --git a/src/USER-CUDA/domain_cuda.h b/src/USER-CUDA/domain_cuda.h deleted file mode 100644 index ede402ffba..0000000000 --- a/src/USER-CUDA/domain_cuda.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_DOMAIN_CUDA_H -#define LMP_DOMAIN_CUDA_H - -#include "pointers.h" -#include "domain.h" - -namespace LAMMPS_NS { - -class DomainCuda : public Domain { - public: - DomainCuda(class LAMMPS *); - void init(); - void set_global_box(); - void set_lamda_box(); - void set_local_box(); - void reset_box(); - void pbc(); - - virtual void lamda2x(int); - virtual void x2lamda(int); - - protected: - class Cuda *cuda; -}; - -} - -#endif diff --git a/src/USER-CUDA/fft3d_cuda.cpp b/src/USER-CUDA/fft3d_cuda.cpp deleted file mode 100644 index 42ec4b16ee..0000000000 --- a/src/USER-CUDA/fft3d_cuda.cpp +++ /dev/null @@ -1,609 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - 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: Jim Shepherd (GA Tech) added SGI SCSL support -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "fft3d_cuda.h" -#include "fft3d_cuda_cu.h" -#include "remap.h" -#include -#include "cuda_wrapper_cu.h" - -#ifdef FFT_CUFFT -#endif - -#define MIN(A,B) ((A) < (B)) ? (A) : (B) -#define MAX(A,B) ((A) > (B)) ? (A) : (B) - -/* ---------------------------------------------------------------------- - Data layout for 3d FFTs: - - data set of Nfast x Nmid x Nslow elements is owned by P procs - on input, each proc owns a subsection of the elements - on output, each proc will own a (possibly different) subsection - my subsection must not overlap with any other proc's subsection, - i.e. the union of all proc's input (or output) subsections must - exactly tile the global Nfast x Nmid x Nslow data set - when called from C, all subsection indices are - C-style from 0 to N-1 where N = Nfast or Nmid or Nslow - when called from F77, all subsection indices are - F77-style from 1 to N where N = Nfast or Nmid or Nslow - a proc can own 0 elements on input or output - by specifying hi index < lo index - on both input and output, data is stored contiguously on a processor - with a fast-varying, mid-varying, and slow-varying index -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Perform 3d FFT - - Arguments: - in starting address of input data on this proc - out starting address of where output data for this proc - will be placed (can be same as in) - flag 1 for forward FFT, -1 for inverse FFT - plan plan returned by previous call to fft_3d_create_plan -------------------------------------------------------------------------- */ - -void fft_3d_cuda(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) -{ -#ifdef FFT_CUFFT - plan->iterate++; - my_times starttime,starttime2; - my_times endtime,endtime2; - - int i,total,length,offset,num; - double norm; - FFT_DATA *data,*copy; - // system specific constants - - - // pre-remap to prepare for 1st FFTs if needed - // copy = loc for remap result - int nprocs=plan->nprocs; -if(nprocs>1) -{ - if(plan->init) - my_gettime(CLOCK_REALTIME,&starttime); - if (plan->pre_plan) { - if (plan->pre_target == 0) copy = out; - else copy = plan->copy; - if(plan->init) remap_3d((double *) in, (double *) out, (double *) plan->scratch,plan->pre_plan); - data = out; - } - else - data = in; -} - cufftResult retvalc; - if(plan->init) - { - if(nprocs>1) - { - if(sizeof(FFT_CFLOAT)==sizeof(double))cudaMemcpy((void*) (plan->cudata2), (void*) data, plan->cudatasize/2,cudaMemcpyHostToDevice); - if(sizeof(FFT_CFLOAT)==sizeof(float)) cudaMemcpy((void*) (plan->cudata2), (void*) data, plan->cudatasize,cudaMemcpyHostToDevice); - initfftdata((double*)plan->cudata2,(FFT_CFLOAT*)plan->cudata,plan->nfast,plan->nmid,plan->nslow); - } - } - if (flag == -1) - { - retvalc=cufft(plan->plan_3d, plan->cudata, plan->cudata2,CUFFT_FORWARD); - } - else - { - retvalc=cufft(plan->plan_3d, plan->cudata, plan->cudata2,CUFFT_INVERSE); - } - if(retvalc!=CUFFT_SUCCESS) {printf("ErrorCUFFT: %i\n",retvalc);exit(EXIT_FAILURE);} - - FFTsyncthreads(); -#endif -} -/* ---------------------------------------------------------------------- - Create plan for performing a 3d FFT - - Arguments: - comm MPI communicator for the P procs which own the data - nfast,nmid,nslow size of global 3d matrix - in_ilo,in_ihi input bounds of data I own in fast index - in_jlo,in_jhi input bounds of data I own in mid index - in_klo,in_khi input bounds of data I own in slow index - out_ilo,out_ihi output bounds of data I own in fast index - out_jlo,out_jhi output bounds of data I own in mid index - out_klo,out_khi output bounds of data I own in slow index - scaled 0 = no scaling of result, 1 = scaling - permute permutation in storage order of indices on output - 0 = no permutation - 1 = permute once = mid->fast, slow->mid, fast->slow - 2 = permute twice = slow->fast, fast->mid, mid->slow - nbuf returns size of internal storage buffers used by FFT -------------------------------------------------------------------------- */ - -struct fft_plan_3d *fft_3d_create_plan_cuda( - MPI_Comm comm, int nfast, int nmid, int nslow, - int in_ilo, int in_ihi, int in_jlo, int in_jhi, - int in_klo, int in_khi, - int out_ilo, int out_ihi, int out_jlo, int out_jhi, - int out_klo, int out_khi, - int scaled, int permute, int *nbuf,bool ainit) -{ -#ifdef FFT_CUFFT - struct fft_plan_3d *plan; - int me,nprocs; - int i,num,flag,remapflag,fftflag; - int first_ilo,first_ihi,first_jlo,first_jhi,first_klo,first_khi; - int second_ilo,second_ihi,second_jlo,second_jhi,second_klo,second_khi; - int third_ilo,third_ihi,third_jlo,third_jhi,third_klo,third_khi; - int out_size,first_size,second_size,third_size,copy_size,scratch_size; - int np1,np2,ip1,ip2; - int list[50]; - - // system specific variables - - // query MPI info - - MPI_Comm_rank(comm,&me); - MPI_Comm_size(comm,&nprocs); - -#ifndef FFT_CUFFT - error->all(FLERR,"ERROR: Trying to use cuda fft without FFT_CUFFT set. Recompile with make option 'cufft=1'."); -#endif - // compute division of procs in 2 dimensions not on-processor - bifactor_cuda(nprocs,&np1,&np2); - ip1 = me % np1; - ip2 = me/np1; - - // in case of CUDA FFT every proc does the full FFT in order to avoid data transfers (the problem is other wise heavily bandwidth limited) - - int ip1out = ip1; - int ip2out = ip2; - int np1out = np1; - int np2out = np2; - - ip1 = 0; - ip2 = 0; - np1 = 1; - np2 = 1; - - // allocate memory for plan data struct - - plan = (struct fft_plan_3d *) malloc(sizeof(struct fft_plan_3d)); - if (plan == NULL) return NULL; - plan->init=ainit; - - // remap from initial distribution to layout needed for 1st set of 1d FFTs - // not needed if all procs own entire fast axis initially - // first indices = distribution after 1st set of FFTs - - if (in_ilo == 0 && in_ihi == nfast-1) - flag = 0; - else - flag = 1; - - if(nprocs>1)flag=1; - - MPI_Allreduce(&flag,&remapflag,1,MPI_INT,MPI_MAX,comm); - - if (remapflag == 0) { - first_ilo = in_ilo; - first_ihi = in_ihi; - first_jlo = in_jlo; - first_jhi = in_jhi; - first_klo = in_klo; - first_khi = in_khi; - plan->pre_plan = NULL; - } - else { - first_ilo = 0; - first_ihi = nfast - 1; - first_jlo = ip1*nmid/np1; - first_jhi = (ip1+1)*nmid/np1 - 1; - first_klo = ip2*nslow/np2; - first_khi = (ip2+1)*nslow/np2 - 1; - int members=2; - if(plan->init) members=1; - plan->pre_plan = - remap_3d_create_plan(comm,in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, - first_ilo,first_ihi,first_jlo,first_jhi, - first_klo,first_khi, - members,0,0,2,0); - if (plan->pre_plan == NULL) return NULL; - } - - // 1d FFTs along fast axis - - plan->length1 = nfast; - plan->total1 = nfast * nmid * nslow; - - // remap from 1st to 2nd FFT - // choose which axis is split over np1 vs np2 to minimize communication - // second indices = distribution after 2nd set of FFTs - - second_ilo = ip1*nfast/np1; - second_ihi = (ip1+1)*nfast/np1 - 1; - second_jlo = 0; - second_jhi = nmid - 1; - second_klo = ip2*nslow/np2; - second_khi = (ip2+1)*nslow/np2 - 1; - plan->mid1_plan = - remap_3d_create_plan(comm, - first_ilo,first_ihi,first_jlo,first_jhi, - first_klo,first_khi, - second_ilo,second_ihi,second_jlo,second_jhi, - second_klo,second_khi, - 2,1,0,2,0); - if (plan->mid1_plan == NULL) return NULL; - - // 1d FFTs along mid axis - - plan->length2 = nmid; - plan->total2 = nfast * nmid * nslow; - - // remap from 2nd to 3rd FFT - // if final distribution is permute=2 with all procs owning entire slow axis - // then this remapping goes directly to final distribution - // third indices = distribution after 3rd set of FFTs - - flag=1; - - MPI_Allreduce(&flag,&remapflag,1,MPI_INT,MPI_MAX,comm); - - if (remapflag == 0) { - third_ilo = out_ilo; - third_ihi = out_ihi; - third_jlo = out_jlo; - third_jhi = out_jhi; - third_klo = out_klo; - third_khi = out_khi; - } - else { - third_ilo = ip1*nfast/np1; - third_ihi = (ip1+1)*nfast/np1 - 1; - third_jlo = ip2*nmid/np2; - third_jhi = (ip2+1)*nmid/np2 - 1; - third_klo = 0; - third_khi = nslow - 1; - } - - plan->mid2_plan = - remap_3d_create_plan(comm, - second_jlo,second_jhi,second_klo,second_khi, - second_ilo,second_ihi, - third_jlo,third_jhi,third_klo,third_khi, - third_ilo,third_ihi, - 2,1,0,2,0); - if (plan->mid2_plan == NULL) return NULL; - - // 1d FFTs along slow axis - - plan->length3 = nslow; - plan->total3 = nfast * nmid * nslow; - - // remap from 3rd FFT to final distribution - // not needed if permute = 2 and third indices = out indices on all procs - - flag=1; - - MPI_Allreduce(&flag,&remapflag,1,MPI_INT,MPI_MAX,comm); - - if (remapflag == 0) - plan->post_plan = NULL; - else { - plan->post_plan = - remap_3d_create_plan(comm, - third_klo,third_khi,third_ilo,third_ihi, - third_jlo,third_jhi, - out_klo,out_khi,out_ilo,out_ihi, - out_jlo,out_jhi, - 2,(permute+1)%3,0,2,0); - if (plan->post_plan == NULL) return NULL; - } - - // configure plan memory pointers and allocate work space - // out_size = amount of memory given to FFT by user - // first/second/third_size = amount of memory needed after pre,mid1,mid2 remaps - // copy_size = amount needed internally for extra copy of data - // scratch_size = amount needed internally for remap scratch space - // for each remap: - // out space used for result if big enough, else require copy buffer - // accumulate largest required remap scratch space - - out_size = (out_ihi-out_ilo+1) * (out_jhi-out_jlo+1) * (out_khi-out_klo+1); - first_size = (first_ihi-first_ilo+1) * (first_jhi-first_jlo+1) * - (first_khi-first_klo+1); - second_size = (second_ihi-second_ilo+1) * (second_jhi-second_jlo+1) * - (second_khi-second_klo+1); - third_size = (third_ihi-third_ilo+1) * (third_jhi-third_jlo+1) * - (third_khi-third_klo+1); - - plan->ihi_out=out_ihi; - plan->ilo_out=out_ilo; - plan->jhi_out=out_jhi; - plan->jlo_out=out_jlo; - plan->khi_out=out_khi; - plan->klo_out=out_klo; - - copy_size = 0; - scratch_size = 0; - - if (plan->pre_plan) { - if (first_size <= out_size) - plan->pre_target = 0; - else { - plan->pre_target = 1; - copy_size = MAX(copy_size,first_size); - } - scratch_size = MAX(scratch_size,first_size); - } - - if (plan->mid1_plan) { - if (second_size <= out_size) - plan->mid1_target = 0; - else { - plan->mid1_target = 1; - copy_size = MAX(copy_size,second_size); - } - scratch_size = MAX(scratch_size,second_size); - } - - if (plan->mid2_plan) { - if (third_size <= out_size) - plan->mid2_target = 0; - else { - plan->mid2_target = 1; - copy_size = MAX(copy_size,third_size); - } - scratch_size = MAX(scratch_size,third_size); - } - - if (plan->post_plan) - scratch_size = MAX(scratch_size,out_size); - - *nbuf = copy_size + scratch_size; - - if (copy_size) { - plan->copy = (FFT_DATA *) malloc(copy_size*sizeof(FFT_DATA)); - if (plan->copy == NULL) return NULL; - } - else plan->copy = NULL; - - if (scratch_size) { - plan->scratch = (FFT_DATA *) malloc(scratch_size*sizeof(FFT_DATA)); - if (plan->scratch == NULL) return NULL; - } - else plan->scratch = NULL; - - // system specific pre-computation of 1d FFT coeffs - // and scaling normalization - - cufftResult retvalc; - int nfft = (in_ihi-in_ilo+1) * (in_jhi-in_jlo+1) * - (in_khi-in_klo+1); - int nfft_brick = (out_ihi-out_ilo+1) * (out_jhi-out_jlo+1) * - (out_khi-out_klo+1); - - int nfft_both = MAX(nfft,nfft_brick); - nfft_both=nfast*nmid*nslow; - - plan->cudatasize=nfft_both*sizeof(FFT_DATA); - - //retvalc=cufftPlan1d(&(plan->plan_fast), nfast, CUFFT_PLAN,plan->total1/nfast); - //if(retvalc!=CUFFT_SUCCESS) printf("ErrorCUFFT1: %i\n",retvalc); - plan->nfast=nfast; - - //retvalc=cufftPlan1d(&(plan->plan_mid), nmid, CUFFT_PLAN,plan->total2/nmid); - //if(retvalc!=CUFFT_SUCCESS) printf("ErrorCUFFT2: %i\n",retvalc); - plan->nmid=nmid; - - //retvalc=cufftPlan1d(&(plan->plan_slow), nslow, CUFFT_PLAN,plan->total3/nslow); - //if(retvalc!=CUFFT_SUCCESS) printf("ErrorCUFFT3: %i\n",retvalc); - plan->nslow=nslow; - - retvalc=cufftPlan3d(&(plan->plan_3d), nslow,nmid,nfast, CUFFT_PLAN); - if(retvalc!=CUFFT_SUCCESS) printf("ErrorCUFFT3: %i\n",retvalc); - - plan->nprocs=nprocs; - plan->me=me; - if (scaled == 0) - plan->scaled = 0; - else { - plan->scaled = 1; - plan->norm = 1.0/(nfast*nmid*nslow); - plan->normnum = (out_ihi-out_ilo+1) * (out_jhi-out_jlo+1) * - (out_khi-out_klo+1); - } - - plan->coretime=0; - plan->iterate=0; - plan->ffttime=0; - return plan; - #endif -} - -/* ---------------------------------------------------------------------- - Destroy a 3d fft plan -------------------------------------------------------------------------- */ - -void fft_3d_destroy_plan_cuda(struct fft_plan_3d *plan) -{ -#ifdef FFT_CUFFT - if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan); - if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan); - if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan); - if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan); - - if (plan->copy) free(plan->copy); - if (plan->scratch) free(plan->scratch); - - - //cufftDestroy(plan->plan_fast); - //cufftDestroy(plan->plan_mid); - //cufftDestroy(plan->plan_slow); - cufftDestroy(plan->plan_3d); - free(plan); -#endif -} - -/* ---------------------------------------------------------------------- - recursively divide n into small factors, return them in list -------------------------------------------------------------------------- */ - -void factor_cuda(int n, int *num, int *list) -{ - if (n == 1) { - return; - } - else if (n % 2 == 0) { - *list = 2; - (*num)++; - factor_cuda(n/2,num,list+1); - } - else if (n % 3 == 0) { - *list = 3; - (*num)++; - factor_cuda(n/3,num,list+1); - } - else if (n % 5 == 0) { - *list = 5; - (*num)++; - factor_cuda(n/5,num,list+1); - } - else if (n % 7 == 0) { - *list = 7; - (*num)++; - factor_cuda(n/7,num,list+1); - } - else if (n % 11 == 0) { - *list = 11; - (*num)++; - factor_cuda(n/11,num,list+1); - } - else if (n % 13 == 0) { - *list = 13; - (*num)++; - factor_cuda(n/13,num,list+1); - } - else { - *list = n; - (*num)++; - return; - } -} - -/* ---------------------------------------------------------------------- - divide n into 2 factors of as equal size as possible -------------------------------------------------------------------------- */ - -void bifactor_cuda(int n, int *factor1, int *factor2) -{ - int n1,n2,facmax; - - facmax = static_cast (sqrt((double) n)); - - for (n1 = facmax; n1 > 0; n1--) { - n2 = n/n1; - if (n1*n2 == n) { - *factor1 = n1; - *factor2 = n2; - return; - } - } -} - -/* ---------------------------------------------------------------------- - perform just the 1d FFTs needed by a 3d FFT, no data movement - used for timing purposes - - Arguments: - in starting address of input data on this proc, all set to 0.0 - nsize size of in - flag 1 for forward FFT, -1 for inverse FFT - plan plan returned by previous call to fft_3d_create_plan -------------------------------------------------------------------------- */ - -void fft_1d_only_cuda(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan) -{ -#ifdef FFT_CUFFT - int i,total,length,offset,num; - double norm; - - // system specific constants - - - - // total = size of data needed in each dim - // length = length of 1d FFT in each dim - // total/length = # of 1d FFTs in each dim - // if total > nsize, limit # of 1d FFTs to available size of data - - int total1 = plan->total1; - int length1 = plan->length1; - int total2 = plan->total2; - int length2 = plan->length2; - int total3 = plan->total3; - int length3 = plan->length3; - - if (total1 > nsize) total1 = (nsize/length1) * length1; - if (total2 > nsize) total2 = (nsize/length2) * length2; - if (total3 > nsize) total3 = (nsize/length3) * length3; - - // perform 1d FFTs in each of 3 dimensions - // data is just an array of 0.0 - - - cudaMemcpy((void**) &(plan->cudata), (void*) data, plan->cudatasize,cudaMemcpyHostToDevice); - if (flag == -1) { - cufft(plan->plan_3d, plan->cudata, plan->cudata,CUFFT_FORWARD); - /*cufft(plan->plan_fast, plan->cudata, plan->cudata,CUFFT_FORWARD); - cufft(plan->plan_mid, plan->cudata, plan->cudata,CUFFT_FORWARD); - cufft(plan->plan_slow, plan->cudata, plan->cudata,CUFFT_FORWARD);*/ - } else { - cufft(plan->plan_3d, plan->cudata, plan->cudata,CUFFT_FORWARD); - /*cufft(plan->plan_fast, plan->cudata, plan->cudata,CUFFT_INVERSE); - cufft(plan->plan_mid,plan->cudata, plan->cudata,CUFFT_INVERSE); - cufft(plan->plan_slow, plan->cudata, plan->cudata,CUFFT_INVERSE);*/ - } - cudaMemcpy((void*) data, (void**) &(plan->cudata), plan->cudatasize,cudaMemcpyDeviceToHost); - - // scaling if required - // limit num to size of data - -#endif -} diff --git a/src/USER-CUDA/fft3d_cuda.h b/src/USER-CUDA/fft3d_cuda.h deleted file mode 100644 index 059ac977f7..0000000000 --- a/src/USER-CUDA/fft3d_cuda.h +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - 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. -------------------------------------------------------------------------- */ - -// User-settable FFT precision - -// FFT_PRECISION = 1 is single-precision complex (4-byte real, 4-byte imag) -// FFT_PRECISION = 2 is double-precision complex (8-byte real, 8-byte imag) -#include "cuda_precision.h" -//#define FFT_PRECISION 2 - -// ------------------------------------------------------------------------- - -// Data types for single-precision complex - -#if FFT_PRECISION_CU == 1 - -#ifdef FFT_CUFFT -#include "cuda_runtime.h" -#include "cufft.h" -typedef struct { - float re; - float im; -} FFT_DATA; -typedef cufftComplex cufftData; -typedef cufftReal cufftDataInit; -#define cufft cufftExecC2C -#define cufftinit cufftExecR2C -#define CUFFT_PLAN CUFFT_C2C -#define CUFFT_PLAN_INIT CUFFT_R2C -#else -typedef struct { - float re; - float im; -} FFT_DATA; -#endif - -#endif - -// ------------------------------------------------------------------------- - -// Data types for double-precision complex - -#if FFT_PRECISION_CU == 2 - - -#ifdef FFT_CUFFT -#include "cuda_runtime.h" -#include "cufft.h" -typedef cufftDoubleComplex cufftData; -typedef cufftDoubleReal cufftDataInit; -typedef struct { - double re; - double im; -} FFT_DATA; -#define cufft cufftExecZ2Z -#define cufftinit cufftExecD2Z -#define CUFFT_PLAN CUFFT_Z2Z -#define CUFFT_PLAN_INIT CUFFT_D2Z -#endif - -#endif - -// ------------------------------------------------------------------------- - -// details of how to do a 3d FFT - -struct fft_plan_3d { - struct remap_plan_3d *pre_plan; // remap from input -> 1st FFTs - struct remap_plan_3d *mid1_plan; // remap from 1st -> 2nd FFTs - struct remap_plan_3d *mid2_plan; // remap from 2nd -> 3rd FFTs - struct remap_plan_3d *post_plan; // remap from 3rd FFTs -> output - FFT_DATA *copy; // memory for remap results (if needed) - FFT_DATA *scratch; // scratch space for remaps - int total1,total2,total3; // # of 1st,2nd,3rd FFTs (times length) - int length1,length2,length3; // length of 1st,2nd,3rd FFTs - int pre_target; // where to put remap results - int mid1_target,mid2_target; - int scaled; // whether to scale FFT results - int normnum; // # of values to rescale - double norm; // normalization factor for rescaling - - double coretime; - double ffttime; - int iterate; - // system specific 1d FFT info - -#ifdef FFT_CUFFT - //CUdeviceptr cudata; - cufftData* cudata; - cufftData* cudata2; - unsigned int cudatasize; - cufftHandle plan_fast; - cufftHandle plan_mid; - cufftHandle plan_slow; - cufftHandle plan_3d; - int nfast; - int nmid; - int nslow; - int ihi_out,ilo_out,jhi_out,jlo_out,khi_out,klo_out; - int me,nprocs; -#endif - int init; -}; - -// function prototypes - -void fft_3d_destroy_plan_cuda(struct fft_plan_3d *); -void factor_cuda(int, int *, int *); -void bifactor_cuda(int, int *, int *); -void fft_1d_only_cuda(FFT_DATA *, int, int, struct fft_plan_3d *); -void fft_3d_cudaA(FFT_DATA *, FFT_DATA *, int, struct fft_plan_3d *); -void fft_3d_cuda(FFT_DATA *, FFT_DATA *, int, struct fft_plan_3d *); -struct fft_plan_3d *fft_3d_create_plan_cuda(MPI_Comm, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int *,bool init); diff --git a/src/USER-CUDA/fft3d_wrap_cuda.cpp b/src/USER-CUDA/fft3d_wrap_cuda.cpp deleted file mode 100644 index f02c38d831..0000000000 --- a/src/USER-CUDA/fft3d_wrap_cuda.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include "fft3d_wrap_cuda.h" -#include "error.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -FFT3dCuda::FFT3dCuda(LAMMPS *lmp, MPI_Comm comm, int nfast, int nmid, int nslow, - int in_ilo, int in_ihi, int in_jlo, int in_jhi, - int in_klo, int in_khi, - int out_ilo, int out_ihi, int out_jlo, int out_jhi, - int out_klo, int out_khi, - int scaled, int permute, int *nbuf,bool init) : Pointers(lmp) -{ -#ifdef FFT_CUFFT - plan = fft_3d_create_plan_cuda(comm,nfast,nmid,nslow, - in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, - out_ilo,out_ihi,out_jlo,out_jhi,out_klo,out_khi, - scaled,permute,nbuf,init); -#endif -#ifndef FFT_CUFFT - plan = fft_3d_create_plan(comm,nfast,nmid,nslow, - in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, - out_ilo,out_ihi,out_jlo,out_jhi,out_klo,out_khi, - scaled,permute,nbuf,0); -#endif - if (plan == NULL) error->one(FLERR,"Could not create 3d FFT plan"); -} - -/* ---------------------------------------------------------------------- */ - -FFT3dCuda::~FFT3dCuda() -{ -#ifdef FFT_CUFFT - fft_3d_destroy_plan_cuda(plan); -#endif -#ifndef FFT_CUFFT - fft_3d_destroy_plan(plan); -#endif -} - -/* ---------------------------------------------------------------------- */ - -void FFT3dCuda::compute(double *in, double *out, int flag) -{ -#ifdef FFT_CUFFT - fft_3d_cuda((FFT_DATA *) in,(FFT_DATA *) out,flag,plan); -#endif -#ifndef FFT_CUFFT - fft_3d((FFT_DATA *) in,(FFT_DATA *) out,flag,plan); -#endif -} - -/* ---------------------------------------------------------------------- */ - -void FFT3dCuda::timing1d(double *in, int nsize, int flag) -{ -#ifdef FFT_CUFFT - fft_1d_only_cuda((FFT_DATA *) in,nsize,flag,plan); -#endif -#ifndef FFT_CUFFT - fft_1d_only((FFT_DATA *) in,nsize,flag,plan); -#endif -} - -#ifdef FFT_CUFFT -void FFT3dCuda::set_cudata(void* cudata,void* cudata2) -{ - - plan->cudata=(cufftData*) cudata; - plan->cudata2=(cufftData*) cudata2; - -} -#endif diff --git a/src/USER-CUDA/fft3d_wrap_cuda.h b/src/USER-CUDA/fft3d_wrap_cuda.h deleted file mode 100644 index cc6baa9ebe..0000000000 --- a/src/USER-CUDA/fft3d_wrap_cuda.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - 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 FFT3D_WRAP_CUDA_H_ -#define FFT3D_WRAP_CUDA_H_ - -#include "pointers.h" - -#ifdef FFT_CUFFT - #include "fft3d_cuda.h" -#endif -#ifndef FFT_CUFFT - #include "fft3d.h" -#endif - -namespace LAMMPS_NS { - -class FFT3dCuda : protected Pointers { - public: - FFT3dCuda(class LAMMPS *, MPI_Comm,int,int,int,int,int,int,int,int,int, - int,int,int,int,int,int,int,int,int *,bool); - ~FFT3dCuda(); - void compute(double *, double *, int); - void timing1d(double *, int, int); - -#ifdef FFT_CUFFT - void set_cudata(void* cudata,void* cudata2); -#endif - private: - struct fft_plan_3d *plan; -}; - -} - -#endif /*FFT3D_WRAP_CUDA_H_*/ diff --git a/src/USER-CUDA/fix_addforce_cuda.cpp b/src/USER-CUDA/fix_addforce_cuda.cpp deleted file mode 100644 index 5462668f4f..0000000000 --- a/src/USER-CUDA/fix_addforce_cuda.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - - -#include -#include -#include "fix_addforce_cuda.h" -#include "fix_addforce_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "error.h" -#include "force.h" -#include "domain.h" -#include "user_cuda.h" -#include "memory.h" -#include "cuda_modify_flags.h" - - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixAddForceCuda::FixAddForceCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg < 6) error->all(FLERR,"Illegal fix addforce/cuda command"); - - scalar_flag = 1; - vector_flag = 1; - size_vector = 3; - global_freq = 1; - extscalar = 1; - extvector = 1; - - xvalue = force->numeric(FLERR,arg[3]); - yvalue = force->numeric(FLERR,arg[4]); - zvalue = force->numeric(FLERR,arg[5]); - - // optional args - - iregion = -1; - - int iarg = 6; - while (iarg < narg) { - if (strcmp(arg[iarg],"region") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce/cuda command"); - iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all(FLERR,"Fix addforce/cuda region ID does not exist"); - iarg += 2; - } else error->all(FLERR,"Illegal fix addforce/cuda command"); - } - - if(iregion!=-1) error->all(FLERR,"Error: fix addforce/cuda does not currently support 'region' option"); - - force_flag = 0; - foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0; - cu_foriginal = NULL; -} - -/* ---------------------------------------------------------------------- */ - -int FixAddForceCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - mask |= THERMO_ENERGY_CUDA; - mask |= POST_FORCE_RESPA; - mask |= MIN_POST_FORCE_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::init() -{ - if(not cu_foriginal) - cu_foriginal = new cCudaData (foriginal,4); - if (strstr(update->integrate_style,"respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::setup(int vflag) -{ - MYDBG( printf("# CUDA: FixAddForceCuda::setup\n"); ) - - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixAddForceCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - post_force(vflag); - cuda->cu_f->download(); - - } - else { - ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); - cuda->cu_f->download(); - post_force_respa(vflag,nlevels_respa-1,0); - cuda->cu_f->upload(); - ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); - } - MYDBG( printf("# CUDA: FixAddForceCuda::setup done\n"); ) -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::min_setup(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::post_force(int vflag) -{ - MYDBG( printf("# CUDA: FixAddForceCuda::postforce start\n"); ) - force_flag = 0; - cu_foriginal->memset_device(0); - Cuda_FixAddForceCuda_PostForce(&cuda->shared_data, groupbit, xvalue, yvalue,zvalue,(F_CFLOAT*) cu_foriginal->dev_data()); - cu_foriginal->download(); -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::post_force_respa(int vflag, int ilevel, int iloop) -{ - if (ilevel == nlevels_respa-1) post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixAddForceCuda::min_post_force(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- - potential energy of added force -------------------------------------------------------------------------- */ - -double FixAddForceCuda::compute_scalar() -{ - // only sum across procs one time - - if (force_flag == 0) { - MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world); - force_flag = 1; - } - return foriginal_all[0]; -} - -/* ---------------------------------------------------------------------- - return components of total force on fix group before force was changed -------------------------------------------------------------------------- */ - -double FixAddForceCuda::compute_vector(int n) -{ - // only sum across procs one time - - if (force_flag == 0) { - MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world); - force_flag = 1; - } - return foriginal_all[n+1]; -} diff --git a/src/USER-CUDA/fix_addforce_cuda.h b/src/USER-CUDA/fix_addforce_cuda.h deleted file mode 100644 index 043cae6d21..0000000000 --- a/src/USER-CUDA/fix_addforce_cuda.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(addforce/cuda,FixAddForceCuda) - -#else - -#ifndef LMP_FIX_ADD_FORCE_CUDA_H -#define LMP_FIX_ADD_FORCE_CUDA_H - -#include "fix.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixAddForceCuda : public Fix { - public: - FixAddForceCuda(class LAMMPS *, int, char **); - int setmask(); - void init(); - void setup(int); - void min_setup(int); - void post_force(int); - void post_force_respa(int, int, int); - void min_post_force(int); - double compute_scalar(); - double compute_vector(int); - - private: - class Cuda *cuda; - int iregion; - double xvalue,yvalue,zvalue; - double foriginal[4],foriginal_all[4]; - cCudaData* cu_foriginal; - int force_flag; - int nlevels_respa; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_aveforce_cuda.cpp b/src/USER-CUDA/fix_aveforce_cuda.cpp deleted file mode 100644 index 9b4ceaa67c..0000000000 --- a/src/USER-CUDA/fix_aveforce_cuda.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - - -#include -#include -#include -#include "fix_aveforce_cuda.h" -#include "fix_aveforce_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "domain.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" -#include "variable.h" -#include "input.h" -#include "modify.h" -#include "atom_masks.h" -#include "error.h" -#include "force.h" - - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -enum{NONE,CONSTANT,EQUAL}; - -/* ---------------------------------------------------------------------- */ - -FixAveForceCuda::FixAveForceCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 6) error->all(FLERR,"Illegal fix aveforce command"); - - vector_flag = 1; - size_vector = 3; - global_freq = 1; - extvector = 1; - - xstr = ystr = zstr = NULL; - xvalue = yvalue = zvalue = 0; - - if (strstr(arg[3],"v_") == arg[3]) { - int n = strlen(&arg[3][2]) + 1; - xstr = new char[n]; - strcpy(xstr,&arg[3][2]); - } else if (strcmp(arg[3],"NULL") == 0) { - xstyle = NONE; - } else { - xvalue = force->numeric(FLERR,arg[3]); - xstyle = CONSTANT; - } - if (strstr(arg[4],"v_") == arg[4]) { - int n = strlen(&arg[4][2]) + 1; - ystr = new char[n]; - strcpy(ystr,&arg[4][2]); - } else if (strcmp(arg[4],"NULL") == 0) { - ystyle = NONE; - } else { - yvalue = force->numeric(FLERR,arg[4]); - ystyle = CONSTANT; - } - if (strstr(arg[5],"v_") == arg[5]) { - int n = strlen(&arg[5][2]) + 1; - zstr = new char[n]; - strcpy(zstr,&arg[5][2]); - } else if (strcmp(arg[5],"NULL") == 0) { - zstyle = NONE; - } else { - zvalue = force->numeric(FLERR,arg[5]); - zstyle = CONSTANT; - } - - // optional args - - iregion = -1; - - int iarg = 6; - while (iarg < narg) { - if (strcmp(arg[iarg],"region") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix aveforce command"); - iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all(FLERR,"Fix aveforce region ID does not exist"); - iarg += 2; - } else error->all(FLERR,"Illegal fix aveforce command"); - - } - - if(iregion!=-1) error->all(FLERR,"Error: fix aveforce/cuda does not currently support 'region' option"); - - foriginal_all[0] = foriginal_all[1] = foriginal_all[2] = foriginal_all[3] = 0.0; - foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0; - cu_foriginal = NULL; - -} - -FixAveForceCuda::~FixAveForceCuda() -{ - delete [] xstr; - delete [] ystr; - delete [] zstr; -} - -/* ---------------------------------------------------------------------- */ - -int FixAveForceCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - mask |= POST_FORCE_RESPA; - mask |= MIN_POST_FORCE_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::init() -{ - if(not cu_foriginal) - cu_foriginal = new cCudaData (foriginal,4); - - if (xstr) { - xvar = input->variable->find(xstr); - if (xvar < 0) - error->all(FLERR,"Variable name for fix aveforce does not exist"); - if (input->variable->equalstyle(xvar)) xstyle = EQUAL; - else error->all(FLERR,"Variable for fix aveforce is invalid style"); - } - if (ystr) { - yvar = input->variable->find(ystr); - if (yvar < 0) - error->all(FLERR,"Variable name for fix aveforce does not exist"); - if (input->variable->equalstyle(yvar)) ystyle = EQUAL; - else error->all(FLERR,"Variable for fix aveforce is invalid style"); - } - if (zstr) { - zvar = input->variable->find(zstr); - if (zvar < 0) - error->all(FLERR,"Variable name for fix aveforce does not exist"); - if (input->variable->equalstyle(zvar)) zstyle = EQUAL; - else error->all(FLERR,"Variable for fix aveforce is invalid style"); - } - - if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) varflag = EQUAL; - else varflag = CONSTANT; - -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::setup(int vflag) -{ - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixAveForceCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - post_force(vflag); - cuda->cu_f->download(); - - } - else - { - } -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::min_setup(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::post_force(int vflag) -{ - // sum forces on participating atoms - - cu_foriginal->memset_device(0); - Cuda_FixAveForceCuda_PostForce_FOrg(&cuda->shared_data, groupbit,(F_CFLOAT*) cu_foriginal->dev_data()); - cu_foriginal->download(); - - // average the force on participating atoms - // add in requested amount - - MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world); - int ncount = static_cast (foriginal_all[3]); - if (ncount == 0) return; - - if (varflag == EQUAL) { - unsigned int datamask = EMPTY_MASK; - if (xstyle == EQUAL) datamask &= input->variable->data_mask(xstr); - if (ystyle == EQUAL) datamask &= input->variable->data_mask(ystr); - if (zstyle == EQUAL) datamask &= input->variable->data_mask(zstr); - - cuda->download(datamask); - modify->clearstep_compute(); - if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar); - if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar); - if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar); - modify->addstep_compute(update->ntimestep + 1); - } - - double fave[3]; - fave[0] = foriginal_all[0]/ncount + xvalue; - fave[1] = foriginal_all[1]/ncount + yvalue; - fave[2] = foriginal_all[2]/ncount + zvalue; - - // set force of all participating atoms to same value - // only for active dimensions - - Cuda_FixAveForceCuda_PostForce_Set(&cuda->shared_data, groupbit,!(xstyle==NONE),!(ystyle==NONE),!(zstyle==NONE),fave[0],fave[1],fave[2]); -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::post_force_respa(int vflag, int ilevel, int iloop) -{ - -} - -/* ---------------------------------------------------------------------- */ - -void FixAveForceCuda::min_post_force(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- - return components of total force on fix group before force was changed -------------------------------------------------------------------------- */ - -double FixAveForceCuda::compute_vector(int n) -{ - return foriginal_all[n]; -} diff --git a/src/USER-CUDA/fix_aveforce_cuda.h b/src/USER-CUDA/fix_aveforce_cuda.h deleted file mode 100644 index c22e702ee2..0000000000 --- a/src/USER-CUDA/fix_aveforce_cuda.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(aveforce/cuda,FixAveForceCuda) - -#else - - -#ifndef LMP_FIX_AVE_FORCE_CUDA_H -#define LMP_FIX_AVE_FORCE_CUDA_H - -#include "fix.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixAveForceCuda : public Fix { - public: - FixAveForceCuda(class LAMMPS *, int, char **); - ~FixAveForceCuda(); - int setmask(); - void init(); - void setup(int); - void min_setup(int); - void post_force(int); - void post_force_respa(int, int, int); - void min_post_force(int); - double compute_vector(int); - - private: - class Cuda *cuda; - char *xstr,*ystr,*zstr; - int iregion; - double xvalue,yvalue,zvalue; - double foriginal_all[4]; - double foriginal[4]; - cCudaData* cu_foriginal; - int varflag; - int xvar,yvar,zvar,xstyle,ystyle,zstyle; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_enforce2d_cuda.cpp b/src/USER-CUDA/fix_enforce2d_cuda.cpp deleted file mode 100644 index d10edf1cce..0000000000 --- a/src/USER-CUDA/fix_enforce2d_cuda.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include "fix_enforce2d_cuda.h" -#include "fix_enforce2d_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "domain.h" -#include "respa.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixEnforce2DCuda::FixEnforce2DCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 3) error->all(FLERR,"Illegal fix enforce2d command"); -} - -/* ---------------------------------------------------------------------- */ - -int FixEnforce2DCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - mask |= POST_FORCE_RESPA; - mask |= MIN_POST_FORCE_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::init() -{ - if (domain->dimension == 3) - error->all(FLERR,"Cannot use fix enforce2d/cuda with 3d simulation"); - if (atom->omega_flag) - error->warning(FLERR,"Enforce2d/cuda does not support omega_flag on gpu yet. Will be handled on cpu."); - - if (atom->angmom_flag) - error->warning(FLERR,"Enforce2d/cuda does not support angmom_flag (angular momentum) on gpu yet. Will be handled on cpu."); - - if (atom->torque_flag) - error->warning(FLERR,"Enforce2d/cuda does not support torque_flag on gpu yet. Will be handled on cpu."); -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::setup(int vflag) -{ - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixEnforce2dCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - cuda->cu_v->upload(); - post_force(vflag); - cuda->cu_f->download(); - cuda->cu_v->download(); - } - else { - int nlevels_respa = ((Respa *) update->integrate)->nlevels; - for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) { - ((Respa *) update->integrate)->copy_flevel_f(ilevel); - post_force_respa(vflag,ilevel,0); - ((Respa *) update->integrate)->copy_f_flevel(ilevel); - } - } -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::min_setup(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::post_force(int vflag) -{ - Cuda_FixEnforce2dCuda_PostForce(&cuda->shared_data, groupbit); - - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - if (atom->omega_flag) { - double **omega = atom->omega; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - omega[i][0] = 0.0; - omega[i][1] = 0.0; - } - } - - if (atom->angmom_flag) { - double **angmom = atom->angmom; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - angmom[i][0] = 0.0; - angmom[i][1] = 0.0; - } - } - - if (atom->torque_flag) { - double **torque = atom->torque; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - torque[i][0] = 0.0; - torque[i][1] = 0.0; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::post_force_respa(int vflag, int ilevel, int iloop) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixEnforce2DCuda::min_post_force(int vflag) -{ - post_force(vflag); -} diff --git a/src/USER-CUDA/fix_enforce2d_cuda.h b/src/USER-CUDA/fix_enforce2d_cuda.h deleted file mode 100644 index 63bf289d9e..0000000000 --- a/src/USER-CUDA/fix_enforce2d_cuda.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(enforce2d/cuda,FixEnforce2DCuda) - -#else - -#ifndef LMP_FIX_ENFORCE2D_CUDA_H -#define LMP_FIX_ENFORCE2D_CUDA_H - -#include "fix.h" - -namespace LAMMPS_NS { - -class FixEnforce2DCuda : public Fix { - public: - FixEnforce2DCuda(class LAMMPS *, int, char **); - int setmask(); - void init(); - void setup(int); - void min_setup(int); - void post_force(int); - void post_force_respa(int, int, int); - void min_post_force(int); - - private: - class Cuda *cuda; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_freeze_cuda.cpp b/src/USER-CUDA/fix_freeze_cuda.cpp deleted file mode 100644 index c4a04af564..0000000000 --- a/src/USER-CUDA/fix_freeze_cuda.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ -#include -#include -#include "fix_freeze_cuda.h" -#include "fix_freeze_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "error.h" -#include "user_cuda.h" -#include "memory.h" -#include "modify.h" -#include "cuda_modify_flags.h" - - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixFreezeCuda::FixFreezeCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 3) error->all(FLERR,"Illegal fix freeze command"); - - if (!atom->torque_flag) - error->all(FLERR,"Fix freeze requires atom attribute torque"); - - vector_flag = 1; - size_vector = 3; - global_freq = 1; - extvector = 1; - - - - force_flag = 0; - foriginal[0] = foriginal[1] = foriginal[2] = 0.0; - cu_foriginal=NULL; -} - -/* ---------------------------------------------------------------------- */ - -int FixFreezeCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - mask |= THERMO_ENERGY_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixFreezeCuda::init() -{ - if(not cu_foriginal) - cu_foriginal = new cCudaData (foriginal,3); - int count = 0; - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"freeze") == 0) count++; - if (count > 1) error->all(FLERR,"More than one fix freeze"); -} - -/* ---------------------------------------------------------------------- */ - -void FixFreezeCuda::setup(int vflag) -{ - MYDBG( printf("# CUDA: FixFreezeCuda::setup\n"); ) - - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixFreezeCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - post_force(vflag); - cuda->cu_f->download(); - - } - - MYDBG( printf("# CUDA: FixFreezeCuda::setup done\n"); ) -} - -/* ---------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- */ - -void FixFreezeCuda::post_force(int vflag) -{ - MYDBG( printf("# CUDA: FixFreezeCuda::postforce start\n"); ) - force_flag = 0; - cu_foriginal->memset_device(0); - Cuda_FixFreezeCuda_PostForce(&cuda->shared_data, groupbit, (F_CFLOAT*) cu_foriginal->dev_data()); - cu_foriginal->download(); -} - -/* ---------------------------------------------------------------------- */ - - - -/* ---------------------------------------------------------------------- - return components of total force on fix group before force was changed -------------------------------------------------------------------------- */ - -double FixFreezeCuda::compute_vector(int n) -{ - // only sum across procs one time - - if (force_flag == 0) { - MPI_Allreduce(foriginal,foriginal_all,3,MPI_DOUBLE,MPI_SUM,world); - force_flag = 1; - } - return foriginal_all[n+1]; -} diff --git a/src/USER-CUDA/fix_freeze_cuda.h b/src/USER-CUDA/fix_freeze_cuda.h deleted file mode 100644 index 9f6a1a99f0..0000000000 --- a/src/USER-CUDA/fix_freeze_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(freeze/cuda,FixFreezeCuda) - -#else - -#ifndef LMP_FIX_FREEZE_CUDA_H -#define LMP_FIX_FREEZE_CUDA_H - -#include "fix.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixFreezeCuda : public Fix { - public: - FixFreezeCuda(class LAMMPS *, int, char **); - int setmask(); - void init(); - void setup(int); - void post_force(int); - double compute_vector(int); - - private: - class Cuda *cuda; - double foriginal[3],foriginal_all[3]; - cCudaData* cu_foriginal; - int force_flag; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_gravity_cuda.cpp b/src/USER-CUDA/fix_gravity_cuda.cpp deleted file mode 100644 index 34107ed593..0000000000 --- a/src/USER-CUDA/fix_gravity_cuda.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ -#include -#include -#include -#include -#include "fix_gravity_cuda.h" -#include "fix_gravity_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "domain.h" -#include "respa.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" -#include "math_const.h" -#include "error.h" -#include "force.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; -using namespace MathConst; - -enum{CHUTE,SPHERICAL,GRADIENT,VECTOR}; - -/* ---------------------------------------------------------------------- */ - -FixGravityCuda::FixGravityCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg < 5) error->all(FLERR,"Illegal fix gravity command"); - - magnitude = force->numeric(FLERR,arg[3]); - - if (strcmp(arg[4],"chute") == 0) { - if (narg != 6) error->all(FLERR,"Illegal fix gravity command"); - style = CHUTE; - phi = 0.0; - theta = 180.0 - force->numeric(FLERR,arg[5]); - } else if (strcmp(arg[4],"spherical") == 0) { - if (narg != 7) error->all(FLERR,"Illegal fix gravity command"); - style = SPHERICAL; - phi = force->numeric(FLERR,arg[5]); - theta = force->numeric(FLERR,arg[6]); - } else if (strcmp(arg[4],"gradient") == 0) { - if (narg != 9) error->all(FLERR,"Illegal fix gravity command"); - style = GRADIENT; - phi = force->numeric(FLERR,arg[5]); - theta = force->numeric(FLERR,arg[6]); - phigrad = force->numeric(FLERR,arg[7]); - thetagrad = force->numeric(FLERR,arg[8]); - } else if (strcmp(arg[4],"vector") == 0) { - if (narg != 8) error->all(FLERR,"Illegal fix gravity command"); - style = VECTOR; - xdir = force->numeric(FLERR,arg[5]); - ydir = force->numeric(FLERR,arg[6]); - zdir = force->numeric(FLERR,arg[7]); - } else error->all(FLERR,"Illegal fix gravity command"); - - degree2rad = MY_PI/180.0; - - if (style == CHUTE || style == SPHERICAL || style == GRADIENT) { - if (domain->dimension == 3) { - xgrav = sin(degree2rad * theta) * cos(degree2rad * phi); - ygrav = sin(degree2rad * theta) * sin(degree2rad * phi); - zgrav = cos(degree2rad * theta); - } else { - xgrav = sin(degree2rad * theta); - ygrav = cos(degree2rad * theta); - zgrav = 0.0; - } - } else if (style == VECTOR) { - if (domain->dimension == 3) { - double length = sqrt(xdir*xdir + ydir*ydir + zdir*zdir); - xgrav = xdir/length; - ygrav = ydir/length; - zgrav = zdir/length; - } else { - double length = sqrt(xdir*xdir + ydir*ydir); - xgrav = xdir/length; - ygrav = ydir/length; - zgrav = 0.0; - } - } - - time_origin = update->ntimestep; -} - -/* ---------------------------------------------------------------------- */ - -int FixGravityCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixGravityCuda::init() -{ - dt = update->dt; - - xacc = magnitude*xgrav; - yacc = magnitude*ygrav; - zacc = magnitude*zgrav; -} - -/* ---------------------------------------------------------------------- */ - -void FixGravityCuda::setup(int vflag) -{ - MYDBG( printf("# CUDA: FixGravityCuda::setup\n"); ) - - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixGravityCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - post_force(vflag); - cuda->cu_f->download(); - - } - else { - } - MYDBG( printf("# CUDA: FixGravityCuda::setup done\n"); ) -} - -/* ---------------------------------------------------------------------- */ - -void FixGravityCuda::post_force(int vflag) -{ - // update direction of gravity vector if gradient style - - if (style == GRADIENT) { - if (domain->dimension == 3) { - double phi_current = degree2rad * - (phi + (update->ntimestep - time_origin)*dt*phigrad*360.0); - double theta_current = degree2rad * - (theta + (update->ntimestep - time_origin)*dt*thetagrad*360.0); - xgrav = sin(theta_current) * cos(phi_current); - ygrav = sin(theta_current) * sin(phi_current); - zgrav = cos(theta_current); - } else { - double theta_current = degree2rad * - (theta + (update->ntimestep - time_origin)*dt*thetagrad*360.0); - xgrav = sin(theta_current); - ygrav = cos(theta_current); - } - xacc = magnitude*xgrav; - yacc = magnitude*ygrav; - zacc = magnitude*zgrav; - } - - MYDBG( printf("# CUDA: FixGravityCuda::postforce start\n"); ) - Cuda_FixGravityCuda_PostForce(&cuda->shared_data, groupbit, xacc,yacc,zacc); -} diff --git a/src/USER-CUDA/fix_gravity_cuda.h b/src/USER-CUDA/fix_gravity_cuda.h deleted file mode 100644 index 98d2586660..0000000000 --- a/src/USER-CUDA/fix_gravity_cuda.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(gravity/cuda,FixGravityCuda) - -#else - -#ifndef LMP_FIX_GRAVITY_CUDA_H -#define LMP_FIX_GRAVITY_CUDA_H - -#include "fix.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixGravityCuda : public Fix { - public: - FixGravityCuda(class LAMMPS *, int, char **); - int setmask(); - void init(); - void setup(int); - void post_force(int); - - private: - class Cuda *cuda; - int style; - double magnitude,dt; - double phi,theta,phigrad,thetagrad; - double xdir,ydir,zdir; - double xgrav,ygrav,zgrav,xacc,yacc,zacc; - double degree2rad; - int time_origin; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_nh_cuda.cpp b/src/USER-CUDA/fix_nh_cuda.cpp deleted file mode 100644 index 1a5092a68f..0000000000 --- a/src/USER-CUDA/fix_nh_cuda.cpp +++ /dev/null @@ -1,2072 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing authors: Mark Stevens (SNL), Aidan Thompson (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_nh_cuda.h" -#include "atom.h" -#include "force.h" -#include "comm.h" -#include "modify.h" -#include "fix_deform.h" -#include "compute.h" -#include "kspace.h" -#include "update.h" -#include "respa.h" -#include "domain.h" -#include "memory.h" -#include "error.h" -#include "math_extra.h" -#include "user_cuda.h" -#include "fix_nh_cuda_cu.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -enum{NOBIAS,BIAS}; -enum{NONE,XYZ,XY,YZ,XZ}; -enum{ISO,ANISO,TRICLINIC}; - -/* ---------------------------------------------------------------------- - NVT,NPH,NPT integrators for improved Nose-Hoover equations of motion - ---------------------------------------------------------------------- */ - -FixNHCuda::FixNHCuda(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg < 4) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - - restart_global = 1; - time_integrate = 1; - scalar_flag = 1; - vector_flag = 1; - global_freq = 1; - extscalar = 1; - extvector = 0; - - triggerneighsq = -1; - // default values - - pcouple = NONE; - drag = 0.0; - allremap = 1; - mtchain = mpchain = 3; - nc_tchain = nc_pchain = 1; - mtk_flag = 1; - deviatoric_flag = 0; - nreset_h0 = 0; - - // Used by FixNVTSllod to preserve non-default value - - mtchain_default_flag = 1; - - tstat_flag = 0; - double t_period = 0.0; - - double p_period[6]; - for (int i = 0; i < 6; i++) { - p_start[i] = p_stop[i] = p_period[i] = 0.0; - p_flag[i] = 0; - } - - // process keywords - - dimension = domain->dimension; - - int iarg = 3; - - while (iarg < narg) { - if (strcmp(arg[iarg],"temp") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - tstat_flag = 1; - t_start = force->numeric(FLERR,arg[iarg+1]); - t_stop = force->numeric(FLERR,arg[iarg+2]); - t_period = force->numeric(FLERR,arg[iarg+3]); - if (t_start < 0.0 || t_stop <= 0.0) - error->all(FLERR,"Target T for fix nvt/npt/nph cannot be 0.0"); - iarg += 4; - - } else if (strcmp(arg[iarg],"iso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - pcouple = XYZ; - p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]); - p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]); - p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]); - p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { - p_start[2] = p_stop[2] = p_period[2] = 0.0; - p_flag[2] = 0; - } - iarg += 4; - } else if (strcmp(arg[iarg],"aniso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - pcouple = NONE; - p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]); - p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]); - p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]); - p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { - p_start[2] = p_stop[2] = p_period[2] = 0.0; - p_flag[2] = 0; - } - iarg += 4; - } else if (strcmp(arg[iarg],"tri") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - pcouple = NONE; - p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]); - p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]); - p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]); - p_flag[0] = p_flag[1] = p_flag[2] = 1; - p_start[3] = p_start[4] = p_start[5] = 0.0; - p_stop[3] = p_stop[4] = p_stop[5] = 0.0; - p_period[3] = p_period[4] = p_period[5] = force->numeric(FLERR,arg[iarg+3]); - p_flag[3] = p_flag[4] = p_flag[5] = 1; - if (dimension == 2) { - p_start[2] = p_stop[2] = p_period[2] = 0.0; - p_flag[2] = 0; - p_start[3] = p_stop[3] = p_period[3] = 0.0; - p_flag[3] = 0; - p_start[4] = p_stop[4] = p_period[4] = 0.0; - p_flag[4] = 0; - } - iarg += 4; - - } else if (strcmp(arg[iarg],"x") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[0] = force->numeric(FLERR,arg[iarg+1]); - p_stop[0] = force->numeric(FLERR,arg[iarg+2]); - p_period[0] = force->numeric(FLERR,arg[iarg+3]); - p_flag[0] = 1; - deviatoric_flag = 1; - iarg += 4; - } else if (strcmp(arg[iarg],"y") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[1] = force->numeric(FLERR,arg[iarg+1]); - p_stop[1] = force->numeric(FLERR,arg[iarg+2]); - p_period[1] = force->numeric(FLERR,arg[iarg+3]); - p_flag[1] = 1; - deviatoric_flag = 1; - iarg += 4; - } else if (strcmp(arg[iarg],"z") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[2] = force->numeric(FLERR,arg[iarg+1]); - p_stop[2] = force->numeric(FLERR,arg[iarg+2]); - p_period[2] = force->numeric(FLERR,arg[iarg+3]); - p_flag[2] = 1; - deviatoric_flag = 1; - iarg += 4; - if (dimension == 2) - error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation"); - - } else if (strcmp(arg[iarg],"yz") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[3] = force->numeric(FLERR,arg[iarg+1]); - p_stop[3] = force->numeric(FLERR,arg[iarg+2]); - p_period[3] = force->numeric(FLERR,arg[iarg+3]); - p_flag[3] = 1; - deviatoric_flag = 1; - iarg += 4; - if (dimension == 2) - error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation"); - } else if (strcmp(arg[iarg],"xz") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[4] = force->numeric(FLERR,arg[iarg+1]); - p_stop[4] = force->numeric(FLERR,arg[iarg+2]); - p_period[4] = force->numeric(FLERR,arg[iarg+3]); - p_flag[4] = 1; - deviatoric_flag = 1; - iarg += 4; - if (dimension == 2) - error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation"); - } else if (strcmp(arg[iarg],"xy") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - p_start[5] = force->numeric(FLERR,arg[iarg+1]); - p_stop[5] = force->numeric(FLERR,arg[iarg+2]); - p_period[5] = force->numeric(FLERR,arg[iarg+3]); - p_flag[5] = 1; - deviatoric_flag = 1; - iarg += 4; - - } else if (strcmp(arg[iarg],"couple") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ; - else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY; - else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ; - else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ; - else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE; - else error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - - } else if (strcmp(arg[iarg],"drag") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - drag = force->numeric(FLERR,arg[iarg+1]); - if (drag < 0.0) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"dilate") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - if (strcmp(arg[iarg+1],"all") == 0) allremap = 1; - else if (strcmp(arg[iarg+1],"partial") == 0) allremap = 0; - else error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"tchain") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - mtchain = force->inumeric(FLERR,arg[iarg+1]); - if (mtchain < 1) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"pchain") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - mpchain = force->inumeric(FLERR,arg[iarg+1]); - if (mpchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"mtk") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - if (strcmp(arg[iarg+1],"yes") == 0) mtk_flag = 1; - else if (strcmp(arg[iarg+1],"no") == 0) mtk_flag = 0; - else error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"tloop") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - nc_tchain = force->inumeric(FLERR,arg[iarg+1]); - if (nc_tchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"ploop") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - nc_pchain = force->inumeric(FLERR,arg[iarg+1]); - if (nc_pchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else if (strcmp(arg[iarg],"nreset") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - nreset_h0 = force->inumeric(FLERR,arg[iarg+1]); - if (nreset_h0 < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command"); - iarg += 2; - } else error->all(FLERR,"Illegal fix nvt/npt/nph command"); - } - - // error checks - - if (dimension == 2 && (p_flag[2] || p_flag[3] || p_flag[4])) - error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation"); - if (dimension == 2 && (pcouple == YZ || pcouple == XZ)) - error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation"); - - if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings"); - if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0) - error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings"); - if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings"); - if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings"); - if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings"); - - if (p_flag[0] && domain->xperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension"); - if (p_flag[1] && domain->yperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension"); - if (p_flag[2] && domain->zperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension"); - if (p_flag[3] && domain->zperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension"); - if (p_flag[4] && domain->zperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension"); - if (p_flag[5] && domain->yperiodic == 0) - error->all(FLERR,"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension"); - - if (!domain->triclinic && (p_flag[3] || p_flag[4] || p_flag[5])) - error->all(FLERR,"Can not specify Pxy/Pxz/Pyz in " - "fix nvt/npt/nph with non-triclinic box"); - - if (pcouple == XYZ && dimension == 3 && - (p_start[0] != p_start[1] || p_start[0] != p_start[2] || - p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] || - p_period[0] != p_period[1] || p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings"); - if (pcouple == XYZ && dimension == 2 && - (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || - p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings"); - if (pcouple == XY && - (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || - p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings"); - if (pcouple == YZ && - (p_start[1] != p_start[2] || p_stop[1] != p_stop[2] || - p_period[1] != p_period[2])) - error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings"); - if (pcouple == XZ && - (p_start[0] != p_start[2] || p_stop[0] != p_stop[2] || - p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings"); - - if ((tstat_flag && t_period <= 0.0) || - (p_flag[0] && p_period[0] <= 0.0) || - (p_flag[1] && p_period[1] <= 0.0) || - (p_flag[2] && p_period[2] <= 0.0) || - (p_flag[3] && p_period[3] <= 0.0) || - (p_flag[4] && p_period[4] <= 0.0) || - (p_flag[5] && p_period[5] <= 0.0)) - error->all(FLERR,"Fix nvt/npt/nph damping parameters must be > 0.0"); - - // set pstat_flag and box change variables - - pstat_flag = 0; - for (int i = 0; i < 6; i++) - if (p_flag[i]) pstat_flag = 1; - - if (pstat_flag) { - if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1; - if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1; - no_change_box = 1; - if (allremap == 0) restart_pbc = 1; - } - - // pstyle = TRICLINIC if any off-diagonal term is controlled -> 6 dof - // else pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof - // else pstyle = ANISO -> 3 dof - - if (p_flag[3] || p_flag[4] || p_flag[5]) pstyle = TRICLINIC; - else if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO; - else pstyle = ANISO; - - // convert input periods to frequencies - - t_freq = 0.0; - p_freq[0] = p_freq[1] = p_freq[2] = p_freq[3] = p_freq[4] = p_freq[5] = 0.0; - - if (tstat_flag) t_freq = 1.0 / t_period; - if (p_flag[0]) p_freq[0] = 1.0 / p_period[0]; - if (p_flag[1]) p_freq[1] = 1.0 / p_period[1]; - if (p_flag[2]) p_freq[2] = 1.0 / p_period[2]; - if (p_flag[3]) p_freq[3] = 1.0 / p_period[3]; - if (p_flag[4]) p_freq[4] = 1.0 / p_period[4]; - if (p_flag[5]) p_freq[5] = 1.0 / p_period[5]; - - // Nose/Hoover temp and pressure init - - size_vector = 0; - - if (tstat_flag) { - int ich; - eta = new double[mtchain]; - - // add one extra dummy thermostat, set to zero - - eta_dot = new double[mtchain+1]; - eta_dot[mtchain] = 0.0; - eta_dotdot = new double[mtchain]; - for (ich = 0; ich < mtchain; ich++) { - eta[ich] = eta_dot[ich] = eta_dotdot[ich] = 0.0; - } - eta_mass = new double[mtchain]; - size_vector += 2*2*mtchain; - } - - if (pstat_flag) { - omega[0] = omega[1] = omega[2] = 0.0; - omega_dot[0] = omega_dot[1] = omega_dot[2] = 0.0; - omega_mass[0] = omega_mass[1] = omega_mass[2] = 0.0; - omega[3] = omega[4] = omega[5] = 0.0; - omega_dot[3] = omega_dot[4] = omega_dot[5] = 0.0; - omega_mass[3] = omega_mass[4] = omega_mass[5] = 0.0; - if (pstyle == ISO) size_vector += 2*2*1; - else if (pstyle == ANISO) size_vector += 2*2*3; - else if (pstyle == TRICLINIC) size_vector += 2*2*6; - - if (mpchain) { - int ich; - etap = new double[mpchain]; - - // add one extra dummy thermostat, set to zero - - etap_dot = new double[mpchain+1]; - etap_dot[mpchain] = 0.0; - etap_dotdot = new double[mpchain]; - for (ich = 0; ich < mpchain; ich++) { - etap[ich] = etap_dot[ich] = - etap_dotdot[ich] = 0.0; - } - etap_mass = new double[mpchain]; - size_vector += 2*2*mpchain; - } - - if (deviatoric_flag) size_vector += 1; - } - - nrigid = 0; - rfix = NULL; - - // initialize vol0,t0 to zero to signal uninitialized - // values then assigned in init(), if necessary - - vol0 = t0 = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -FixNHCuda::~FixNHCuda() -{ - delete [] rfix; - - // delete temperature and pressure if fix created them - - if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; - - if (tstat_flag) { - delete [] eta; - delete [] eta_dot; - delete [] eta_dotdot; - delete [] eta_mass; - } - - if (pstat_flag) { - if (pflag) modify->delete_compute(id_press); - delete [] id_press; - if (mpchain) { - delete [] etap; - delete [] etap_dot; - delete [] etap_dotdot; - delete [] etap_mass; - } - } -} - -/* ---------------------------------------------------------------------- */ - -int FixNHCuda::setmask() -{ - int mask = 0; - mask |= INITIAL_INTEGRATE_CUDA; - mask |= FINAL_INTEGRATE_CUDA; - mask |= THERMO_ENERGY_CUDA; - //mask |= INITIAL_INTEGRATE_RESPA; - //mask |= FINAL_INTEGRATE_RESPA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::init() -{ - // insure no conflict with fix deform - - if (pstat_flag) - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"deform") == 0) { - int *dimflag = ((FixDeform *) modify->fix[i])->dimflag; - if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || - (p_flag[2] && dimflag[2]) || (p_flag[3] && dimflag[3]) || - (p_flag[4] && dimflag[4]) || (p_flag[5] && dimflag[5])) - error->all(FLERR,"Cannot use fix npt and fix deform on " - "same component of stress tensor"); - } - - // set temperature and pressure ptrs - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix nvt/nph/npt does not exist"); - temperature = modify->compute[icompute]; - - if (temperature->tempbias) which = BIAS; - else which = NOBIAS; - - if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) error->all(FLERR,"Pressure ID for fix npt/nph does not exist"); - pressure = modify->compute[icompute]; - } - - // set timesteps and frequencies - - dtv = update->dt; - dtf = 0.5 * update->dt * force->ftm2v; - dthalf = 0.5 * update->dt; - dt4 = 0.25 * update->dt; - dt8 = 0.125 * update->dt; - dto = dthalf; - - p_freq_max = 0.0; - if (pstat_flag) { - p_freq_max = MAX(p_freq[0],p_freq[1]); - p_freq_max = MAX(p_freq_max,p_freq[2]); - if (pstyle == TRICLINIC) { - p_freq_max = MAX(p_freq_max,p_freq[3]); - p_freq_max = MAX(p_freq_max,p_freq[4]); - p_freq_max = MAX(p_freq_max,p_freq[5]); - } - pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain); - } - - if (tstat_flag) - tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain); - - // tally the number of dimensions that are barostatted - // also compute the initial volume and reference cell - // set initial volume and reference cell, if not already done - - if (pstat_flag) { - pdim = p_flag[0] + p_flag[1] + p_flag[2]; - if (vol0 == 0.0) { - if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd; - else vol0 = domain->xprd * domain->yprd; - h0_inv[0] = domain->h_inv[0]; - h0_inv[1] = domain->h_inv[1]; - h0_inv[2] = domain->h_inv[2]; - h0_inv[3] = domain->h_inv[3]; - h0_inv[4] = domain->h_inv[4]; - h0_inv[5] = domain->h_inv[5]; - } - } - - boltz = force->boltz; - nktv2p = force->nktv2p; - - if (force->kspace) kspace_flag = 1; - else kspace_flag = 0; - - if (strcmp(update->integrate_style,"respa") == 0) { - nlevels_respa = ((Respa *) update->integrate)->nlevels; - step_respa = ((Respa *) update->integrate)->step; - dto = 0.5*step_respa[0]; - } - - // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - - delete [] rfix; - nrigid = 0; - rfix = NULL; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } - triggerneighsq= cuda->shared_data.atom.triggerneighsq; - cuda->neighbor_decide_by_integrator=1; - Cuda_FixNHCuda_Init(&cuda->shared_data,dtv,dtf); - -} - -/* ---------------------------------------------------------------------- - compute T,P before integrator starts -------------------------------------------------------------------------- */ - -void FixNHCuda::setup(int vflag) -{ - // initialize some quantities that were not available earlier - - //if (mtk_flag) mtk_factor = 1.0 + 1.0/atom->natoms; - //else mtk_factor = 1.0; - tdof = temperature->dof; - - // t_target is used by compute_scalar(), even for NPH - - if (tstat_flag) t_target = t_start; - else if (pstat_flag) { - - // t0 = initial value for piston mass and energy conservation - // cannot be done in init() b/c temperature cannot be called there - // is b/c Modify::init() inits computes after fixes due to dof dependence - // guesstimate a unit-dependent t0 if actual T = 0.0 - // if it was read in from a restart file, leave it be - - if (t0 == 0.0) { - t0 = temperature->compute_scalar(); - if (t0 == 0.0) { - if (strcmp(update->unit_style,"lj") == 0) t0 = 1.0; - else t0 = 300.0; - } - } - t_target = t0; - } - - if (pstat_flag) compute_press_target(); - - t_current = temperature->compute_scalar(); - if (pstat_flag) { - if (pstyle == ISO) double tmp = pressure->compute_scalar(); - else pressure->compute_vector(); - couple(); - pressure->addstep(update->ntimestep+1); - } - - // initial forces on thermostat variables - - if (tstat_flag) { - eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq); - for (int ich = 1; ich < mtchain; ich++) - eta_mass[ich] = boltz * t_target / (t_freq*t_freq); - for (int ich = 1; ich < mtchain; ich++) { - eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1] - - boltz*t_target) / eta_mass[ich]; - } - } - - if (pstat_flag) { - double kt = boltz * t_target; - double nkt = atom->natoms * kt; - - for (int i = 0; i < 3; i++) - if (p_flag[i]) - omega_mass[i] = nkt/(p_freq[i]*p_freq[i]); - - if (pstyle == TRICLINIC) { - for (int i = 3; i < 6; i++) - if (p_flag[i]) omega_mass[i] = nkt/(p_freq[i]*p_freq[i]); - } - - // initial forces on barostat thermostat variables - - if (mpchain) { - etap_mass[0] = boltz * t_target / (p_freq_max*p_freq_max); - for (int ich = 1; ich < mpchain; ich++) - etap_mass[ich] = boltz * t_target / (p_freq_max*p_freq_max); - for (int ich = 1; ich < mpchain; ich++) - etap_dotdot[ich] = - (etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] - - boltz*t_target) / etap_mass[ich]; - } - - // compute appropriately coupled elements of mvv_current - - //if (mtk_flag) couple_ke(); - } -} - -/* ---------------------------------------------------------------------- - 1st half of Verlet update -------------------------------------------------------------------------- */ - -void FixNHCuda::initial_integrate(int vflag) -{ - if(!temperature->cudable) cuda->downloadAll(); - - if(triggerneighsq!=cuda->shared_data.atom.triggerneighsq) - { - triggerneighsq= cuda->shared_data.atom.triggerneighsq; - Cuda_FixNHCuda_Init(&cuda->shared_data,dtv,dtf); - } - - // update eta_press_dot - - if (pstat_flag && mpchain) nhc_press_integrate(); - - // update eta_dot - - if (tstat_flag) { - double delta = update->ntimestep - update->beginstep; - delta /= update->endstep - update->beginstep; - t_target = t_start + delta * (t_stop-t_start); - eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq); - for (int ich = 1; ich < mtchain; ich++) - eta_mass[ich] = boltz * t_target / (t_freq*t_freq); - nhc_temp_integrate(); - } - - // need to recompute pressure to account for change in KE - // t_current is up-to-date, but compute_temperature is not - // compute appropriately coupled elements of mvv_current - - if (pstat_flag) { - if (pstyle == ISO) { - temperature->compute_scalar(); - double tmp = pressure->compute_scalar(); - } else { - temperature->compute_vector(); - pressure->compute_vector(); - } - couple(); - pressure->addstep(update->ntimestep+1); - //if (mtk_flag) couple_ke(); - } - - if(which==NOBIAS) - { - if (pstat_flag) { - compute_press_target(); - nh_omega_dot(); - factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2)); - factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2)); - factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2)); - Cuda_FixNHCuda_nh_v_press_and_nve_v_NoBias(&cuda->shared_data, groupbit, factor,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal,(pstyle == TRICLINIC)?1:0); - } - else - Cuda_FixNHCuda_nve_v(&cuda->shared_data,groupbit,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - } - else if(which==BIAS) - { - if(pstat_flag) - { - compute_press_target(); - nh_omega_dot(); - factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2)); - factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2)); - factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2)); - if(!temperature->cudable) - { - nh_v_press(); - cuda->cu_v->upload(); - } - else - { - int groupbit_org=temperature->groupbit; - temperature->groupbit=groupbit; - temperature->remove_bias_all(); - Cuda_FixNHCuda_nh_v_press(&cuda->shared_data, groupbit, factor,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal,(pstyle == TRICLINIC)?1:0); - temperature->restore_bias_all(); - temperature->groupbit=groupbit_org; - } - } - Cuda_FixNHCuda_nve_v(&cuda->shared_data,groupbit,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - } - - // remap simulation box by 1/2 step - - if (pstat_flag) remap(); - - Cuda_FixNHCuda_nve_x(&cuda->shared_data,groupbit,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - - // remap simulation box by 1/2 step - // redo KSpace coeffs since volume has changed - - if (pstat_flag) { - remap(); - if (kspace_flag) force->kspace->setup(); - } -} - -/* ---------------------------------------------------------------------- - 2nd half of Verlet update -------------------------------------------------------------------------- */ - -void FixNHCuda::final_integrate() -{ - if(!temperature->cudable) cuda->downloadAll(); - - if(which==NOBIAS) - { - if(pstat_flag) - { - factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2)); - factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2)); - factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2)); - - Cuda_FixNHCuda_nve_v_and_nh_v_press_NoBias(&cuda->shared_data, groupbit, factor,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal,(pstyle == TRICLINIC)?1:0); - } - else - Cuda_FixNHCuda_nve_v(&cuda->shared_data,groupbit,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - } - else if(which==BIAS) - { - Cuda_FixNHCuda_nve_v(&cuda->shared_data,groupbit,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - - if(pstat_flag) - { - factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2)); - factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2)); - factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2)); - if(!temperature->cudable) - { - cuda->cu_v->download(); - nh_v_press(); - cuda->cu_v->upload(); - } - else - { - int groupbit_org=temperature->groupbit; - temperature->groupbit=groupbit; - temperature->remove_bias_all(); - Cuda_FixNHCuda_nh_v_press(&cuda->shared_data, groupbit, factor,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal,(pstyle == TRICLINIC)?1:0); - temperature->restore_bias_all(); - temperature->groupbit=groupbit_org; - } - } - } - // compute new T,P - // compute appropriately coupled elements of mvv_current - - if(!temperature->cudable) cuda->cu_v->download(); - t_current = temperature->compute_scalar(); - if (pstat_flag) { - if (pstyle == ISO) double tmp = pressure->compute_scalar(); - else pressure->compute_vector(); - couple(); - pressure->addstep(update->ntimestep+1); - } - - if (pstat_flag) nh_omega_dot(); - - // update eta_dot - // update eta_press_dot - - if (tstat_flag) nhc_temp_integrate(); - if (pstat_flag && mpchain) nhc_press_integrate(); -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::initial_integrate_respa(int vflag, int ilevel, int iloop) -{ - // set timesteps by level - - dtv = step_respa[ilevel]; - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - dthalf = 0.5 * step_respa[ilevel]; - - // outermost level - update eta_dot and omega_dot, apply to v, remap box - // all other levels - NVE update of v - // x,v updates only performed for atoms in group - - if (ilevel == nlevels_respa-1) { - - // update eta_press_dot - - if (pstat_flag && mpchain) nhc_press_integrate(); - - // update eta_dot - - if (tstat_flag) { - double delta = update->ntimestep - update->beginstep; - delta /= update->endstep - update->beginstep; - t_target = t_start + delta * (t_stop-t_start); - eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq); - for (int ich = 1; ich < mtchain; ich++) - eta_mass[ich] = boltz * t_target / (t_freq*t_freq); - nhc_temp_integrate(); - } - - // recompute pressure to account for change in KE - // t_current is up-to-date, but compute_temperature is not - // compute appropriately coupled elements of mvv_current - - if (pstat_flag) { - if (pstyle == ISO) { - temperature->compute_scalar(); - double tmp = pressure->compute_scalar(); - } else { - temperature->compute_vector(); - pressure->compute_vector(); - } - couple(); - pressure->addstep(update->ntimestep+1); - if (mtk_flag) couple_ke(); - } - - if (pstat_flag) { - compute_press_target(); - nh_omega_dot(); - nh_v_press(); - } - - nve_v(); - - } else nve_v(); - - // innermost level - also update x only for atoms in group - // if barostat, perform 1/2 step remap before and after - - if (ilevel == 0) { - if (pstat_flag) remap(); - nve_x(); - if (pstat_flag) remap(); - } - - // if barostat, redo KSpace coeffs at outermost level, - // since volume has changed - - if (ilevel == nlevels_respa-1 && kspace_flag && pstat_flag) - force->kspace->setup(); -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::final_integrate_respa(int ilevel, int iloop) -{ - // set timesteps by level - - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - dthalf = 0.5 * step_respa[ilevel]; - - // outermost level - update eta_dot and omega_dot, apply via final_integrate - // all other levels - NVE update of v - - if (ilevel == nlevels_respa-1) final_integrate(); - else nve_v(); -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::couple() -{ - double *tensor = pressure->vector; - - if (pstyle == ISO) - p_current[0] = p_current[1] = p_current[2] = pressure->scalar; - else if (pcouple == XYZ) { - double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]); - p_current[0] = p_current[1] = p_current[2] = ave; - } else if (pcouple == XY) { - double ave = 0.5 * (tensor[0] + tensor[1]); - p_current[0] = p_current[1] = ave; - p_current[2] = tensor[2]; - } else if (pcouple == YZ) { - double ave = 0.5 * (tensor[1] + tensor[2]); - p_current[1] = p_current[2] = ave; - p_current[0] = tensor[0]; - } else if (pcouple == XZ) { - double ave = 0.5 * (tensor[0] + tensor[2]); - p_current[0] = p_current[2] = ave; - p_current[1] = tensor[1]; - } else { - p_current[0] = tensor[0]; - p_current[1] = tensor[1]; - p_current[2] = tensor[2]; - } - - // switch order from xy-xz-yz to Voigt - - if (pstyle == TRICLINIC) { - p_current[3] = tensor[5]; - p_current[4] = tensor[4]; - p_current[5] = tensor[3]; - } -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::couple_ke() -{ - double *tensor = temperature->vector; - if (pstyle == ISO) - mvv_current[0] = mvv_current[1] = mvv_current[2] = - tdof * boltz * t_current/dimension; - else if (pcouple == XYZ) { - double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]); - mvv_current[0] = mvv_current[1] = mvv_current[2] = ave; - } else if (pcouple == XY) { - double ave = 0.5 * (tensor[0] + tensor[1]); - mvv_current[0] = mvv_current[1] = ave; - mvv_current[2] = tensor[2]; - } else if (pcouple == YZ) { - double ave = 0.5 * (tensor[1] + tensor[2]); - mvv_current[1] = mvv_current[2] = ave; - mvv_current[0] = tensor[0]; - } else if (pcouple == XZ) { - double ave = 0.5 * (tensor[0] + tensor[2]); - mvv_current[0] = mvv_current[2] = ave; - mvv_current[1] = tensor[1]; - } else { - mvv_current[0] = tensor[0]; - mvv_current[1] = tensor[1]; - mvv_current[2] = tensor[2]; - } -} - -/* ---------------------------------------------------------------------- - change box size - remap all atoms or fix group atoms depending on allremap flag - if rigid bodies exist, scale rigid body centers-of-mass -------------------------------------------------------------------------- */ - -void FixNHCuda::remap() -{ - int i; - double oldlo,oldhi,ctr; - - double **x = atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - double *h = domain->h; - - // omega is not used, except for book-keeping - - for (int i = 0; i < 6; i++) omega[i] += dto*omega_dot[i]; - - // convert pertinent atoms and rigid bodies to lamda coords - if (allremap) domain->x2lamda(nlocal); - else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - domain->x2lamda(x[i],x[i]); - } - - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); - - // reset global and local box to new size/shape - - // This operation corresponds to applying the - // translate and scale operations - // corresponding to the solution of the following ODE: - // - // h_dot = omega_dot * h - // - // where h_dot, omega_dot and h are all upper-triangular - // 3x3 tensors. In Voigt notation, the elements of the - // RHS product tensor are: - // h_dot = [0*0, 1*1, 2*2, 1*3+3*2, 0*4+5*3+4*2, 0*5+5*1] - // - // Ordering of operations preserves time symmetry. - - double dto2 = dto/2.0; - double dto4 = dto/4.0; - double dto8 = dto/8.0; - - if (pstyle == TRICLINIC) { - - h[4] *= exp(dto8*omega_dot[0]); - h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]); - h[4] *= exp(dto8*omega_dot[0]); - - h[3] *= exp(dto4*omega_dot[1]); - h[3] += dto2*(omega_dot[3]*h[2]); - h[3] *= exp(dto4*omega_dot[1]); - - h[5] *= exp(dto4*omega_dot[0]); - h[5] += dto2*(omega_dot[5]*h[1]); - h[5] *= exp(dto4*omega_dot[0]); - - h[4] *= exp(dto8*omega_dot[0]); - h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]); - h[4] *= exp(dto8*omega_dot[0]); - - } - - for (i = 0; i < 3; i++) { - if (p_flag[i]) { - oldlo = domain->boxlo[i]; - oldhi = domain->boxhi[i]; - ctr = 0.5 * (oldlo + oldhi); - domain->boxlo[i] = (oldlo-ctr)*exp(dto*omega_dot[i]) + ctr; - domain->boxhi[i] = (oldhi-ctr)*exp(dto*omega_dot[i]) + ctr; - } - } - - if (pstyle == TRICLINIC) { - - h[4] *= exp(dto8*omega_dot[0]); - h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]); - h[4] *= exp(dto8*omega_dot[0]); - - h[3] *= exp(dto4*omega_dot[1]); - h[3] += dto2*(omega_dot[3]*h[2]); - h[3] *= exp(dto4*omega_dot[1]); - - h[5] *= exp(dto4*omega_dot[0]); - h[5] += dto2*(omega_dot[5]*h[1]); - h[5] *= exp(dto4*omega_dot[0]); - - h[4] *= exp(dto8*omega_dot[0]); - h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]); - h[4] *= exp(dto8*omega_dot[0]); - - domain->yz = h[3]; - domain->xz = h[4]; - domain->xy = h[5]; - - if (domain->yz < -0.5*domain->yprd || domain->yz > 0.5*domain->yprd || - domain->xz < -0.5*domain->xprd || domain->xz > 0.5*domain->xprd || - domain->xy < -0.5*domain->xprd || domain->xy > 0.5*domain->xprd) - error->all(FLERR,"Fix npt/nph has tilted box too far - " - "box flips are not yet implemented"); - } - - domain->set_global_box(); - domain->set_local_box(); - - // convert pertinent atoms and rigid bodies back to box coords - - if (allremap) domain->lamda2x(nlocal); - else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - domain->lamda2x(x[i],x[i]); - } - - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); -} - -/* ---------------------------------------------------------------------- - pack entire state of Fix into one write -------------------------------------------------------------------------- */ - -void FixNHCuda::write_restart(FILE *fp) -{ - int nsize = 2; - if (tstat_flag) nsize += 1 + 2*mtchain; - if (pstat_flag) { - nsize += 16 + 2*mpchain; - if (deviatoric_flag) nsize += 6; - } - - double* list = (double *) memory->smalloc(nsize*sizeof(double),"nh:list"); - - int n = 0; - - list[n++] = tstat_flag; - if (tstat_flag) { - list[n++] = mtchain; - for (int ich = 0; ich < mtchain; ich++) - list[n++] = eta[ich]; - for (int ich = 0; ich < mtchain; ich++) - list[n++] = eta_dot[ich]; - } - - list[n++] = pstat_flag; - if (pstat_flag) { - list[n++] = omega[0]; - list[n++] = omega[1]; - list[n++] = omega[2]; - list[n++] = omega[3]; - list[n++] = omega[4]; - list[n++] = omega[5]; - list[n++] = omega_dot[0]; - list[n++] = omega_dot[1]; - list[n++] = omega_dot[2]; - list[n++] = omega_dot[3]; - list[n++] = omega_dot[4]; - list[n++] = omega_dot[5]; - list[n++] = vol0; - list[n++] = t0; - list[n++] = mpchain; - if (mpchain) { - for (int ich = 0; ich < mpchain; ich++) - list[n++] = etap[ich]; - for (int ich = 0; ich < mpchain; ich++) - list[n++] = etap_dot[ich]; - } - - list[n++] = deviatoric_flag; - if (deviatoric_flag) { - list[n++] = h0_inv[0]; - list[n++] = h0_inv[1]; - list[n++] = h0_inv[2]; - list[n++] = h0_inv[3]; - list[n++] = h0_inv[4]; - list[n++] = h0_inv[5]; - } - } - - if (comm->me == 0) { - int size = nsize * sizeof(double); - fwrite(&size,sizeof(int),1,fp); - fwrite(list,sizeof(double),nsize,fp); - } - - memory->sfree(list); -} - -/* ---------------------------------------------------------------------- - use state info from restart file to restart the Fix -------------------------------------------------------------------------- */ - -void FixNHCuda::restart(char *buf) -{ - int n = 0; - double *list = (double *) buf; - int flag = static_cast (list[n++]); - if (flag) { - int m = static_cast (list[n++]); - if (tstat_flag && m == mtchain) { - for (int ich = 0; ich < mtchain; ich++) - eta[ich] = list[n++]; - for (int ich = 0; ich < mtchain; ich++) - eta_dot[ich] = list[n++]; - } else n += 2*m; - } - flag = static_cast (list[n++]); - if (flag) { - omega[0] = list[n++]; - omega[1] = list[n++]; - omega[2] = list[n++]; - omega[3] = list[n++]; - omega[4] = list[n++]; - omega[5] = list[n++]; - omega_dot[0] = list[n++]; - omega_dot[1] = list[n++]; - omega_dot[2] = list[n++]; - omega_dot[3] = list[n++]; - omega_dot[4] = list[n++]; - omega_dot[5] = list[n++]; - vol0 = list[n++]; - t0 = list[n++]; - int m = static_cast (list[n++]); - if (pstat_flag && m == mpchain) { - for (int ich = 0; ich < mpchain; ich++) - etap[ich] = list[n++]; - for (int ich = 0; ich < mpchain; ich++) - etap_dot[ich] = list[n++]; - } else n+=2*m; - flag = static_cast (list[n++]); - if (flag) { - h0_inv[0] = list[n++]; - h0_inv[1] = list[n++]; - h0_inv[2] = list[n++]; - h0_inv[3] = list[n++]; - h0_inv[4] = list[n++]; - h0_inv[5] = list[n++]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -int FixNHCuda::modify_param(int narg, char **arg) -{ - if (strcmp(arg[0],"temp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (tflag) { - modify->delete_compute(id_temp); - tflag = 0; - } - delete [] id_temp; - int n = strlen(arg[1]) + 1; - id_temp = new char[n]; - strcpy(id_temp,arg[1]); - - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - - if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); - if (temperature->igroup != 0 && comm->me == 0) - error->warning(FLERR,"Temperature for fix modify is not for group all"); - - // reset id_temp of pressure to new temperature ID - - if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix modify does not exist"); - modify->compute[icompute]->reset_extra_compute_fix(id_temp); - } - - return 2; - - } else if (strcmp(arg[0],"press") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command"); - if (pflag) { - modify->delete_compute(id_press); - pflag = 0; - } - delete [] id_press; - int n = strlen(arg[1]) + 1; - id_press = new char[n]; - strcpy(id_press,arg[1]); - - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; - - if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); - return 2; - } - - return 0; -} - -/* ---------------------------------------------------------------------- */ - -double FixNHCuda::compute_scalar() -{ - int i; - double volume; - double energy; - double kt = boltz * t_target; - double lkt = tdof * kt; - double lkt_press = kt; - int ich; - if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd; - else volume = domain->xprd * domain->yprd; - - energy = 0.0; - - // thermostat chain energy is equivalent to Eq. (2) in - // Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117 - // Sum(0.5*p_eta_k^2/Q_k,k=1,M) + L*k*T*eta_1 + Sum(k*T*eta_k,k=2,M), - // where L = tdof - // M = mtchain - // p_eta_k = Q_k*eta_dot[k-1] - // Q_1 = L*k*T/t_freq^2 - // Q_k = k*T/t_freq^2, k > 1 - - if (tstat_flag) { - energy += lkt * eta[0] + 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0]; - for (ich = 1; ich < mtchain; ich++) - energy += kt * eta[ich] + 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich]; - } - - // barostat energy is equivalent to Eq. (8) in - // Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117 - // Sum(0.5*p_omega^2/W + P*V), - // where N = natoms - // p_omega = W*omega_dot - // W = N*k*T/p_freq^2 - // sum is over barostatted dimensions - - if (pstat_flag) { - for (i = 0; i < 3; i++) - if (p_flag[i]) - energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i] + - p_hydro*(volume-vol0) / (pdim*nktv2p); - - if (pstyle == TRICLINIC) { - for (i = 3; i < 6; i++) - if (p_flag[i]) - energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i]; - } - - // extra contributions from thermostat chain for barostat - - if (mpchain) { - energy += lkt_press * etap[0] + 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0]; - for (ich = 1; ich < mpchain; ich++) - energy += kt * etap[ich] + - 0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich]; - } - - // extra contribution from strain energy - - if (deviatoric_flag) energy += compute_strain_energy(); - } - - return energy; -} - -/* ---------------------------------------------------------------------- - return a single element of the following vectors, in this order: - eta[tchain], eta_dot[tchain], omega[ndof], omega_dot[ndof] - etap[pchain], etap_dot[pchain], PE_eta[tchain], KE_eta_dot[tchain] - PE_omega[ndof], KE_omega_dot[ndof], PE_etap[pchain], KE_etap_dot[pchain] - PE_strain[1] - if no thermostat exists, related quantities are omitted from the list - if no barostat exists, related quantities are omitted from the list - ndof = 1,3,6 degrees of freedom for pstyle = ISO,ANISO,TRI -------------------------------------------------------------------------- */ - -double FixNHCuda::compute_vector(int n) -{ - int ilen; - - if (tstat_flag) { - ilen = mtchain; - if (n < ilen) return eta[n]; - n -= ilen; - ilen = mtchain; - if (n < ilen) return eta_dot[n]; - n -= ilen; - } - - if (pstat_flag) { - if (pstyle == ISO) { - ilen = 1; - if (n < ilen) return omega[n]; - n -= ilen; - } else if (pstyle == ANISO) { - ilen = 3; - if (n < ilen) return omega[n]; - n -= ilen; - } else { - ilen = 6; - if (n < ilen) return omega[n]; - n -= ilen; - } - - if (pstyle == ISO) { - ilen = 1; - if (n < ilen) return omega_dot[n]; - n -= ilen; - } else if (pstyle == ANISO) { - ilen = 3; - if (n < ilen) return omega_dot[n]; - n -= ilen; - } else { - ilen = 6; - if (n < ilen) return omega_dot[n]; - n -= ilen; - } - - if (mpchain) { - ilen = mpchain; - if (n < ilen) return etap[n]; - n -= ilen; - ilen = mpchain; - if (n < ilen) return etap_dot[n]; - n -= ilen; - } - } - - double volume; - double kt = boltz * t_target; - double lkt = tdof * kt; - double lkt_press = kt; - int ich; - if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd; - else volume = domain->xprd * domain->yprd; - - if (tstat_flag) { - ilen = mtchain; - if (n < ilen) { - ich = n; - if (ich == 0) - return lkt * eta[0]; - else - return kt * eta[ich]; - } - n -= ilen; - ilen = mtchain; - if (n < ilen) { - ich = n; - if (ich == 0) - return 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0]; - else - return 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich]; - } - n -= ilen; - } - - if (pstat_flag) { - if (pstyle == ISO) { - ilen = 1; - if (n < ilen) - return p_hydro*(volume-vol0) / nktv2p; - n -= ilen; - } else if (pstyle == ANISO) { - ilen = 3; - if (n < ilen) - if (p_flag[n]) - return p_hydro*(volume-vol0) / (pdim*nktv2p); - else - return 0.0; - n -= ilen; - } else { - ilen = 6; - if (n < ilen) - if (n > 2) return 0.0; - else if (p_flag[n]) - return p_hydro*(volume-vol0) / (pdim*nktv2p); - else - return 0.0; - n -= ilen; - } - - if (pstyle == ISO) { - ilen = 1; - if (n < ilen) - return pdim*0.5*omega_dot[n]*omega_dot[n]*omega_mass[n]; - n -= ilen; - } else if (pstyle == ANISO) { - ilen = 3; - if (n < ilen) - if (p_flag[n]) - return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n]; - else return 0.0; - n -= ilen; - } else { - ilen = 6; - if (n < ilen) - if (p_flag[n]) - return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n]; - else return 0.0; - n -= ilen; - } - - if (mpchain) { - ilen = mpchain; - if (n < ilen) { - ich = n; - if (ich == 0) return lkt_press * etap[0]; - else return kt * etap[ich]; - } - n -= ilen; - ilen = mpchain; - if (n < ilen) { - ich = n; - if (ich == 0) - return 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0]; - else - return 0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich]; - } - n -= ilen; - } - - if (deviatoric_flag) { - ilen = 1; - if (n < ilen) - return compute_strain_energy(); - n -= ilen; - } - } - - return 0.0; -} - -/* ---------------------------------------------------------------------- */ - -void FixNHCuda::reset_dt() -{ - dtv = update->dt; - dtf = 0.5 * update->dt * force->ftm2v; - dthalf = 0.5 * update->dt; - dt4 = 0.25 * update->dt; - dt8 = 0.125 * update->dt; - dto = dthalf; - - // If using respa, then remap is performed in innermost level - - if (strcmp(update->integrate_style,"respa") == 0) - dto = 0.5*step_respa[0]; - - p_freq_max = 0.0; - if (pstat_flag) { - p_freq_max = MAX(p_freq[0],p_freq[1]); - p_freq_max = MAX(p_freq_max,p_freq[2]); - if (pstyle == TRICLINIC) { - p_freq_max = MAX(p_freq_max,p_freq[3]); - p_freq_max = MAX(p_freq_max,p_freq[4]); - p_freq_max = MAX(p_freq_max,p_freq[5]); - } - pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain); - } - - if (tstat_flag) - tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain); -} - -/* ---------------------------------------------------------------------- - perform half-step update of chain thermostat variables -------------------------------------------------------------------------- */ - -void FixNHCuda::nhc_temp_integrate() -{ - int ich; - double expfac; - - double lkt = tdof * boltz * t_target; - double kecurrent = tdof * boltz * t_current; - eta_dotdot[0] = (kecurrent - lkt)/eta_mass[0]; - - double ncfac = 1.0/nc_tchain; - for (int iloop = 0; iloop < nc_tchain; iloop++) { - - for (ich = mtchain-1; ich > 0; ich--) { - expfac = exp(-ncfac*dt8*eta_dot[ich+1]); - eta_dot[ich] *= expfac; - eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4; - eta_dot[ich] *= tdrag_factor; - eta_dot[ich] *= expfac; - } - - expfac = exp(-ncfac*dt8*eta_dot[1]); - eta_dot[0] *= expfac; - eta_dot[0] += eta_dotdot[0] * ncfac*dt4; - eta_dot[0] *= tdrag_factor; - eta_dot[0] *= expfac; - - factor_eta = exp(-ncfac*dthalf*eta_dot[0]); - if(which==NOBIAS) - Cuda_FixNHCuda_nh_v_temp(&cuda->shared_data,groupbit,factor_eta,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - else if(which==BIAS) - { - if(!temperature->cudable) - { - cuda->downloadAll(); - nh_v_temp(); - cuda->cu_v->upload(); - } - else - { - int groupbit_org=temperature->groupbit; - temperature->groupbit=groupbit; - temperature->remove_bias_all(); - Cuda_FixNHCuda_nh_v_temp(&cuda->shared_data,groupbit,factor_eta,(igroup == atom->firstgroup)?atom->nfirst:atom->nlocal); - temperature->restore_bias_all(); - temperature->groupbit=groupbit_org; - } - - } - // rescale temperature due to velocity scaling - // should not be necessary to explicitly recompute the temperature - - t_current *= factor_eta*factor_eta; - kecurrent = tdof * boltz * t_current; - eta_dotdot[0] = (kecurrent - lkt)/eta_mass[0]; - - for (ich = 0; ich < mtchain; ich++) - eta[ich] += ncfac*dthalf*eta_dot[ich]; - - eta_dot[0] *= expfac; - eta_dot[0] += eta_dotdot[0] * ncfac*dt4; - eta_dot[0] *= expfac; - - for (ich = 1; ich < mtchain; ich++) { - expfac = exp(-ncfac*dt8*eta_dot[ich+1]); - eta_dot[ich] *= expfac; - eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1] - - boltz * t_target)/eta_mass[ich]; - eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4; - eta_dot[ich] *= expfac; - } - } -} - -/* ---------------------------------------------------------------------- - perform half-step update of chain thermostat variables for barostat - scale barostat velocities -------------------------------------------------------------------------- */ - -void FixNHCuda::nhc_press_integrate() -{ - int ich,i; - double expfac,factor_etap,kecurrent; - double kt = boltz * t_target; - double lkt_press = kt; - - kecurrent = 0.0; - for (i = 0; i < 3; i++) - if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i]; - - if (pstyle == TRICLINIC) { - for (i = 3; i < 6; i++) - if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i]; - } - - etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0]; - - double ncfac = 1.0/nc_pchain; - for (int iloop = 0; iloop < nc_pchain; iloop++) { - - for (ich = mpchain-1; ich > 0; ich--) { - expfac = exp(-ncfac*dt8*etap_dot[ich+1]); - etap_dot[ich] *= expfac; - etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4; - etap_dot[ich] *= pdrag_factor; - etap_dot[ich] *= expfac; - } - - expfac = exp(-ncfac*dt8*etap_dot[1]); - etap_dot[0] *= expfac; - etap_dot[0] += etap_dotdot[0] * ncfac*dt4; - etap_dot[0] *= pdrag_factor; - etap_dot[0] *= expfac; - - for (ich = 0; ich < mpchain; ich++) - etap[ich] += ncfac*dthalf*etap_dot[ich]; - - factor_etap = exp(-ncfac*dthalf*etap_dot[0]); - for (i = 0; i < 3; i++) - if (p_flag[i]) omega_dot[i] *= factor_etap; - - if (pstyle == TRICLINIC) { - for (i = 3; i < 6; i++) - if (p_flag[i]) omega_dot[i] *= factor_etap; - } - - kecurrent = 0.0; - for (i = 0; i < 3; i++) - if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i]; - - if (pstyle == TRICLINIC) { - for (i = 3; i < 6; i++) - if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i]; - } - - etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0]; - - etap_dot[0] *= expfac; - etap_dot[0] += etap_dotdot[0] * ncfac*dt4; - etap_dot[0] *= expfac; - - for (ich = 1; ich < mpchain; ich++) { - expfac = exp(-ncfac*dt8*etap_dot[ich+1]); - etap_dot[ich] *= expfac; - etap_dotdot[ich] = - (etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] - boltz*t_target) / - etap_mass[ich]; - etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4; - etap_dot[ich] *= expfac; - } - } -} - -/* ---------------------------------------------------------------------- - perform half-step barostat scaling of velocities ------------------------------------------------------------------------*/ - -void FixNHCuda::nh_v_press() -{ - double factor[3]; - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2)); - factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2)); - factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2)); - - if (which == NOBIAS) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - v[i][0] *= factor[0]; - v[i][1] *= factor[1]; - v[i][2] *= factor[2]; - if (pstyle == TRICLINIC) { - v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]); - v[i][1] += -dthalf*v[i][2]*omega_dot[3]; - } - v[i][0] *= factor[0]; - v[i][1] *= factor[1]; - v[i][2] *= factor[2]; - } - } - } else if (which == BIAS) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); - v[i][0] *= factor[0]; - v[i][1] *= factor[1]; - v[i][2] *= factor[2]; - if (pstyle == TRICLINIC) { - v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]); - v[i][1] += -dthalf*v[i][2]*omega_dot[3]; - } - v[i][0] *= factor[0]; - v[i][1] *= factor[1]; - v[i][2] *= factor[2]; - temperature->restore_bias(i,v[i]); - } - } - } -} - -/* ---------------------------------------------------------------------- - perform half-step update of velocities ------------------------------------------------------------------------*/ - -void FixNHCuda::nve_v() -{ - double dtfm; - double **v = atom->v; - double **f = atom->f; - double *rmass = atom->rmass; - double *mass = atom->mass; - int *type = atom->type; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - if (rmass) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - dtfm = dtf / rmass[i]; - v[i][0] += dtfm*f[i][0]; - v[i][1] += dtfm*f[i][1]; - v[i][2] += dtfm*f[i][2]; - } - } - } else { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - dtfm = dtf / mass[type[i]]; - v[i][0] += dtfm*f[i][0]; - v[i][1] += dtfm*f[i][1]; - v[i][2] += dtfm*f[i][2]; - } - } - } -} - -/* ---------------------------------------------------------------------- - perform full-step update of positions ------------------------------------------------------------------------*/ - -void FixNHCuda::nve_x() -{ - double **x = atom->x; - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - // x update by full step only for atoms in group - - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - x[i][0] += dtv * v[i][0]; - x[i][1] += dtv * v[i][1]; - x[i][2] += dtv * v[i][2]; - } - } -} - -/* ---------------------------------------------------------------------- - perform half-step thermostat scaling of velocities ------------------------------------------------------------------------*/ - -void FixNHCuda::nh_v_temp() -{ - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - if (which == NOBIAS) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - v[i][0] *= factor_eta; - v[i][1] *= factor_eta; - v[i][2] *= factor_eta; - } - } - } else if (which == BIAS) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); - v[i][0] *= factor_eta; - v[i][1] *= factor_eta; - v[i][2] *= factor_eta; - temperature->restore_bias(i,v[i]); - } - } - } -} - -/* ---------------------------------------------------------------------- - compute sigma tensor - needed whenever p_target or h0_inv changes ------------------------------------------------------------------------*/ - -void FixNHCuda::compute_sigma() -{ - // if nreset_h0 > 0, reset vol0 and h0_inv - // every nreset_h0 timesteps - - if (nreset_h0 > 0) { - int delta = update->ntimestep - update->beginstep; - if (delta % nreset_h0 == 0) { - if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd; - else vol0 = domain->xprd * domain->yprd; - h0_inv[0] = domain->h_inv[0]; - h0_inv[1] = domain->h_inv[1]; - h0_inv[2] = domain->h_inv[2]; - h0_inv[3] = domain->h_inv[3]; - h0_inv[4] = domain->h_inv[4]; - h0_inv[5] = domain->h_inv[5]; - } - } - - // generate upper-triangular half of - // sigma = vol0*h0inv*(p_target-p_hydro)*h0inv^t - // units of sigma are are PV/L^2 e.g. atm.A - // - // [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ] - // [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ] - // [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ] - - sigma[0] = - vol0*(h0_inv[0]*((p_target[0]-p_hydro)*h0_inv[0] + - p_target[5]*h0_inv[5]+p_target[4]*h0_inv[4]) + - h0_inv[5]*(p_target[5]*h0_inv[0] + - (p_target[1]-p_hydro)*h0_inv[5]+p_target[3]*h0_inv[4]) + - h0_inv[4]*(p_target[4]*h0_inv[0]+p_target[3]*h0_inv[5] + - (p_target[2]-p_hydro)*h0_inv[4])); - sigma[1] = - vol0*(h0_inv[1]*((p_target[1]-p_hydro)*h0_inv[1] + - p_target[3]*h0_inv[3]) + - h0_inv[3]*(p_target[3]*h0_inv[1] + - (p_target[2]-p_hydro)*h0_inv[3])); - sigma[2] = - vol0*(h0_inv[2]*((p_target[2]-p_hydro)*h0_inv[2])); - sigma[3] = - vol0*(h0_inv[1]*(p_target[3]*h0_inv[2]) + - h0_inv[3]*((p_target[2]-p_hydro)*h0_inv[2])); - sigma[4] = - vol0*(h0_inv[0]*(p_target[4]*h0_inv[2]) + - h0_inv[5]*(p_target[3]*h0_inv[2]) + - h0_inv[4]*((p_target[2]-p_hydro)*h0_inv[2])); - sigma[5] = - vol0*(h0_inv[0]*(p_target[5]*h0_inv[1]+p_target[4]*h0_inv[3]) + - h0_inv[5]*((p_target[1]-p_hydro)*h0_inv[1]+p_target[3]*h0_inv[3]) + - h0_inv[4]*(p_target[3]*h0_inv[1]+(p_target[2]-p_hydro)*h0_inv[3])); -} - -/* ---------------------------------------------------------------------- - compute strain energy ------------------------------------------------------------------------*/ - -double FixNHCuda::compute_strain_energy() -{ - // compute strain energy = 0.5*Tr(sigma*h*h^t) in energy units - - double* h = domain->h; - double d0,d1,d2; - - d0 = - sigma[0]*(h[0]*h[0]+h[5]*h[5]+h[4]*h[4]) + - sigma[5]*( h[1]*h[5]+h[3]*h[4]) + - sigma[4]*( h[2]*h[4]); - d1 = - sigma[5]*( h[5]*h[1]+h[4]*h[3]) + - sigma[1]*( h[1]*h[1]+h[3]*h[3]) + - sigma[3]*( h[2]*h[3]); - d2 = - sigma[4]*( h[4]*h[2]) + - sigma[3]*( h[3]*h[2]) + - sigma[2]*( h[2]*h[2]); - - double energy = 0.5*(d0+d1+d2)/nktv2p; - return energy; -} - -/* ---------------------------------------------------------------------- - compute deviatoric barostat force = h*sigma*h^t ------------------------------------------------------------------------*/ - -void FixNHCuda::compute_deviatoric() -{ - // generate upper-triangular part of h*sigma*h^t - // units of fdev are are PV, e.g. atm*A^3 - // [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ] - // [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ] - // [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ] - - double* h = domain->h; - - fdev[0] = - h[0]*(sigma[0]*h[0]+sigma[5]*h[5]+sigma[4]*h[4]) + - h[5]*(sigma[5]*h[0]+sigma[1]*h[5]+sigma[3]*h[4]) + - h[4]*(sigma[4]*h[0]+sigma[3]*h[5]+sigma[2]*h[4]); - fdev[1] = - h[1]*( sigma[1]*h[1]+sigma[3]*h[3]) + - h[3]*( sigma[3]*h[1]+sigma[2]*h[3]); - fdev[2] = - h[2]*( sigma[2]*h[2]); - fdev[3] = - h[1]*( sigma[3]*h[2]) + - h[3]*( sigma[2]*h[2]); - fdev[4] = - h[0]*( sigma[4]*h[2]) + - h[5]*( sigma[3]*h[2]) + - h[4]*( sigma[2]*h[2]); - fdev[5] = - h[0]*( sigma[5]*h[1]+sigma[4]*h[3]) + - h[5]*( sigma[1]*h[1]+sigma[3]*h[3]) + - h[4]*( sigma[3]*h[1]+sigma[2]*h[3]); -} - -/* ---------------------------------------------------------------------- - compute hydrostatic target pressure ------------------------------------------------------------------------*/ - -void FixNHCuda::compute_press_target() -{ - double delta = update->ntimestep - update->beginstep; - if (update->endstep > update->beginstep) - delta /= update->endstep - update->beginstep; - else delta = 0.0; - - p_hydro = 0.0; - for (int i = 0; i < 3; i++) - if (p_flag[i]) { - p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]); - p_hydro += p_target[i]; - } - p_hydro /= pdim; - - if (pstyle == TRICLINIC) - for (int i = 3; i < 6; i++) - p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]); - - // if deviatoric, recompute sigma each time p_target changes - - if (deviatoric_flag) compute_sigma(); -} - -/* ---------------------------------------------------------------------- - update omega_dot, omega, dilation ------------------------------------------------------------------------*/ - -void FixNHCuda::nh_omega_dot() -{ - double f_omega,volume; - - if (dimension == 3) volume = domain->xprd*domain->yprd*domain->zprd; - else volume = domain->xprd*domain->yprd; - - if (deviatoric_flag) compute_deviatoric(); - - mtk_term1 = 0.0; - if (mtk_flag) - if (pstyle == ISO) { - mtk_term1 = tdof * boltz * t_current; - mtk_term1 /= pdim * atom->natoms; - } else { - double *mvv_current = temperature->vector; - for (int i = 0; i < 3; i++) - if (p_flag[i]) - mtk_term1 += mvv_current[i]; - mtk_term1 /= pdim * atom->natoms; - } - - for (int i = 0; i < 3; i++) - if (p_flag[i]) { - f_omega = (p_current[i]-p_hydro)*volume / - (omega_mass[i] * nktv2p) + mtk_term1 / omega_mass[i]; - if (deviatoric_flag) f_omega -= fdev[i]/(omega_mass[i] * nktv2p); - omega_dot[i] += f_omega*dthalf; - omega_dot[i] *= pdrag_factor; - } - - mtk_term2 = 0.0; - if (mtk_flag) { - for (int i = 0; i < 3; i++) - if (p_flag[i]) - mtk_term2 += omega_dot[i]; - mtk_term2 /= pdim * atom->natoms; - } - - if (pstyle == TRICLINIC) { - for (int i = 3; i < 6; i++) { - if (p_flag[i]) { - f_omega = p_current[i]*volume/(omega_mass[i] * nktv2p); - if (deviatoric_flag) - f_omega -= fdev[i]/(omega_mass[i] * nktv2p); - omega_dot[i] += f_omega*dthalf; - omega_dot[i] *= pdrag_factor; - } - } - } -} diff --git a/src/USER-CUDA/fix_nh_cuda.h b/src/USER-CUDA/fix_nh_cuda.h deleted file mode 100644 index 3cb97873c0..0000000000 --- a/src/USER-CUDA/fix_nh_cuda.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_FIX_NH_CUDA_H -#define LMP_FIX_NH_CUDA_H - -#include "fix.h" -#include "cuda_precision.h" - -namespace LAMMPS_NS { - -class FixNHCuda : public Fix { - public: - FixNHCuda(class LAMMPS *, int, char **); - virtual ~FixNHCuda(); - int setmask(); - virtual void init(); - void setup(int); - virtual void initial_integrate(int); - virtual void final_integrate(); - void initial_integrate_respa(int, int, int); - void final_integrate_respa(int, int); - double compute_scalar(); - double compute_vector(int); - void write_restart(FILE *); - void restart(char *); - int modify_param(int, char **); - void reset_dt(); - - protected: - class Cuda *cuda; - int dimension,which; - double dtv,dtf,dthalf,dt4,dt8,dto; - double boltz,nktv2p,tdof; - double vol0,t0; - - double t_start,t_stop; - double t_current,t_target; - double t_freq; - - int tstat_flag; // 1 if control T - int pstat_flag; // 1 if control P - - int pstyle,pcouple,allremap; - int p_flag[6]; // 1 if control P on this dim, 0 if not - double p_start[6],p_stop[6]; - double p_freq[6],p_target[6]; - double omega[6],omega_dot[6]; - double omega_mass[6]; - double p_current[6],dilation[6]; - double drag,tdrag_factor; // drag factor on particle thermostat - double pdrag_factor; // drag factor on barostat - double factor[6]; // velocity scaling due to barostat - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - int *rfix; // indices of rigid fixes - - int nlevels_respa; - double *step_respa; - - char *id_temp,*id_press; - class Compute *temperature,*pressure; - int tflag,pflag; - - double *eta,*eta_dot; // chain thermostat for particles - double *eta_dotdot; - double *eta_mass; - int mtchain; // length of chain - - double *etap; // chain thermostat for barostat - double *etap_dot; - double *etap_dotdot; - double *etap_mass; - int mpchain; // length of chain - - int mtk_flag; // 0 if using Hoover barostat - double mtk_term1,mtk_term2; - int mtchain_default_flag; - int pdim; // number of barostatted dims - double mvv_current[3]; // diagonal of KE tensor - double mtk_factor; // MTK factor - double p_freq_max; // maximum barostat frequency - - double p_hydro; // hydrostatic target pressure - - int nc_tchain,nc_pchain; - double factor_eta; - double sigma[6]; // scaled target stress - double fdev[6]; // deviatoric force on barostat - int deviatoric_flag; // 0 if target stress tensor is hydrostatic - double h0_inv[6]; // h_inv of reference (zero strain) box - int nreset_h0; // interval for resetting h0 - - void couple(); - void couple_ke(); - void remap(); - void nhc_temp_integrate(); - void nhc_press_integrate(); - - virtual void nve_x(); // may be overwritten by child classes - virtual void nve_v(); - virtual void nh_v_press(); - virtual void nh_v_temp(); - - void compute_sigma(); - void compute_deviatoric(); - double compute_strain_energy(); - void compute_press_target(); - void nh_omega_dot(); - - X_CFLOAT triggerneighsq; -}; - -} - -#endif diff --git a/src/USER-CUDA/fix_npt_cuda.cpp b/src/USER-CUDA/fix_npt_cuda.cpp deleted file mode 100644 index ea2dd1fe04..0000000000 --- a/src/USER-CUDA/fix_npt_cuda.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include "fix_npt_cuda.h" -#include "modify.h" -#include "error.h" - -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixNPTCuda::FixNPTCuda(LAMMPS *lmp, int narg, char **arg) : - FixNHCuda(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (!tstat_flag) - error->all(FLERR,"Temperature control must be used with fix npt"); - if (!pstat_flag) - error->all(FLERR,"Pressure control must be used with fix npt"); - - // create a new compute temp style - // id = fix-ID + temp - // compute group = all since pressure is always global (group all) - // and thus its KE/temperature contribution should use group all - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[3]; - newarg[0] = id_temp; - newarg[1] = (char *) "all"; - newarg[2] = (char *) "temp/cuda"; - - modify->add_compute(3,newarg); - delete [] newarg; - tflag = 1; - - // create a new compute pressure style - // id = fix-ID + press, compute group = all - // pass id_temp as 4th arg to pressure constructor - - n = strlen(id) + 7; - id_press = new char[n]; - strcpy(id_press,id); - strcat(id_press,"_press"); - - newarg = new char*[4]; - newarg[0] = id_press; - newarg[1] = (char *) "all"; - newarg[2] = (char *) "pressure/cuda"; - newarg[3] = id_temp; - modify->add_compute(4,newarg); - delete [] newarg; - pflag = 1; -} diff --git a/src/USER-CUDA/fix_nve_cuda.cpp b/src/USER-CUDA/fix_nve_cuda.cpp deleted file mode 100644 index fbe85b176f..0000000000 --- a/src/USER-CUDA/fix_nve_cuda.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include "fix_nve_cuda.h" -#include "fix_nve_cuda_cu.h" -#include "atom.h" -#include "force.h" -#include "update.h" -#include "respa.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixNVECuda::FixNVECuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (strcmp(style,"nve/sphere") != 0 && narg < 3) - error->all(FLERR,"Illegal fix nve command"); - - time_integrate = 1; -} - -/* ---------------------------------------------------------------------- */ - -int FixNVECuda::setmask() -{ - int mask = 0; - mask |= INITIAL_INTEGRATE_CUDA; - mask |= FINAL_INTEGRATE_CUDA; - // mask |= INITIAL_INTEGRATE_RESPA_CUDA; - // mask |= FINAL_INTEGRATE_RESPA_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixNVECuda::init() -{ - dtv = update->dt; - dtf = 0.5 * update->dt * force->ftm2v; - - if (strstr(update->integrate_style,"respa")) - step_respa = ((Respa *) update->integrate)->step; - - triggerneighsq= cuda->shared_data.atom.triggerneighsq; - cuda->neighbor_decide_by_integrator=1; - Cuda_FixNVECuda_Init(&cuda->shared_data,dtv,dtf); - -} - -/* ---------------------------------------------------------------------- - allow for both per-type and per-atom mass -------------------------------------------------------------------------- */ - -void FixNVECuda::initial_integrate(int vflag) -{ - if(triggerneighsq!=cuda->shared_data.atom.triggerneighsq) - { - triggerneighsq= cuda->shared_data.atom.triggerneighsq; - Cuda_FixNVECuda_Init(&cuda->shared_data,dtv,dtf); - } - int nlocal = atom->nlocal; - if(igroup == atom->firstgroup) nlocal = atom->nfirst; - - Cuda_FixNVECuda_InitialIntegrate(& cuda->shared_data, groupbit,nlocal); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVECuda::final_integrate() -{ - int nlocal = atom->nlocal; - if(igroup == atom->firstgroup) nlocal = atom->nfirst; - - Cuda_FixNVECuda_FinalIntegrate(& cuda->shared_data, groupbit,nlocal); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVECuda::initial_integrate_respa(int vflag, int ilevel, int flag) -{ - //this point should not be reached yet since RESPA is not supported - if (flag) return; // only used by NPT,NPH - - dtv = step_respa[ilevel]; - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - - // innermost level - NVE update of v and x - // all other levels - NVE update of v - - if(ilevel == 0) initial_integrate(vflag); - else final_integrate(); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVECuda::final_integrate_respa(int ilevel, int iloop) -{ - //this point should not be reached yet since RESPA is not supported - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - final_integrate(); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVECuda::reset_dt() -{ - dtv = update->dt; - dtf = 0.5 * update->dt * force->ftm2v; - Cuda_FixNVECuda_Init(&cuda->shared_data,dtv,dtf); -} diff --git a/src/USER-CUDA/fix_nve_cuda.h b/src/USER-CUDA/fix_nve_cuda.h deleted file mode 100644 index 090d327db5..0000000000 --- a/src/USER-CUDA/fix_nve_cuda.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(nve/cuda,FixNVECuda) - -#else - -#ifndef LMP_FIX_NVE_CUDA_H -#define LMP_FIX_NVE_CUDA_H - -#include "fix.h" -#include "cuda_precision.h" - -namespace LAMMPS_NS { - -class FixNVECuda : public Fix -{ - public: - FixNVECuda(class LAMMPS *, int, char **); - int setmask(); - virtual void init(); - virtual void initial_integrate(int); - virtual void final_integrate(); - void initial_integrate_respa(int, int, int); - void final_integrate_respa(int, int); - void reset_dt(); - - X_CFLOAT triggerneighsq; - - protected: - class Cuda *cuda; - double dtv, dtf; - double *step_respa; - int mass_require; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_nvt_cuda.cpp b/src/USER-CUDA/fix_nvt_cuda.cpp deleted file mode 100644 index e1380b0005..0000000000 --- a/src/USER-CUDA/fix_nvt_cuda.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include "fix_nvt_cuda.h" -#include "group.h" -#include "modify.h" -#include "error.h" - -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixNVTCuda::FixNVTCuda(LAMMPS *lmp, int narg, char **arg) : - FixNHCuda(lmp, narg, arg) -{ - if (!tstat_flag) - error->all(FLERR,"Temperature control must be used with fix nvt"); - if (pstat_flag) - error->all(FLERR,"Pressure control can not be used with fix nvt"); - - // create a new compute temp style - // id = fix-ID + temp - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[3]; - newarg[0] = id_temp; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "temp/cuda"; - - modify->add_compute(3,newarg); - delete [] newarg; - tflag = 1; -} diff --git a/src/USER-CUDA/fix_nvt_cuda.h b/src/USER-CUDA/fix_nvt_cuda.h deleted file mode 100644 index 65f38e05d6..0000000000 --- a/src/USER-CUDA/fix_nvt_cuda.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(nvt/cuda,FixNVTCuda) - -#else - -#ifndef LMP_FIX_NVTCuda_H -#define LMP_FIX_NVTCuda_H - -#include "fix_nh_cuda.h" - -namespace LAMMPS_NS { - -class FixNVTCuda : public FixNHCuda { - public: - FixNVTCuda(class LAMMPS *, int, char **); - ~FixNVTCuda() {} -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_set_force_cuda.cpp b/src/USER-CUDA/fix_set_force_cuda.cpp deleted file mode 100644 index b7000a5548..0000000000 --- a/src/USER-CUDA/fix_set_force_cuda.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ -#include -#include -#include "fix_set_force_cuda.h" -#include "fix_set_force_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "error.h" -#include "force.h" -#include "user_cuda.h" -#include "memory.h" -#include "cuda_modify_flags.h" - - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixSetForceCuda::FixSetForceCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 6) error->all(FLERR,"Illegal fix setforce/cuda command"); - - vector_flag = 1; - size_vector = 3; - global_freq = 1; - extvector = 1; - - flagx = flagy = flagz = 1; - if (strcmp(arg[3],"NULL") == 0) flagx = 0; - else xvalue = force->numeric(FLERR,arg[3]); - if (strcmp(arg[4],"NULL") == 0) flagy = 0; - else yvalue = force->numeric(FLERR,arg[4]); - if (strcmp(arg[5],"NULL") == 0) flagz = 0; - else zvalue = force->numeric(FLERR,arg[5]); - - force_flag = 0; - foriginal[0] = foriginal[1] = foriginal[2] = 0.0; - cu_foriginal=NULL; -} - -/* ---------------------------------------------------------------------- */ - -int FixSetForceCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - mask |= THERMO_ENERGY_CUDA; - mask |= POST_FORCE_RESPA; - mask |= MIN_POST_FORCE_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::init() -{ - if(not cu_foriginal) - cu_foriginal = new cCudaData (foriginal,3); - if (strstr(update->integrate_style,"respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::setup(int vflag) -{ - MYDBG( printf("# CUDA: FixSetForceCuda::setup\n"); ) - - if (strstr(update->integrate_style,"verlet")) - { - Cuda_FixSetForceCuda_Init(&cuda->shared_data); - cuda->cu_f->upload(); - post_force(vflag); - cuda->cu_f->download(); - - } - else { - ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); - cuda->cu_f->download(); - post_force_respa(vflag,nlevels_respa-1,0); - cuda->cu_f->upload(); - ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); - } - MYDBG( printf("# CUDA: FixSetForceCuda::setup done\n"); ) -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::min_setup(int vflag) -{ - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::post_force(int vflag) -{ - MYDBG( printf("# CUDA: FixSetForceCuda::postforce start\n"); ) - force_flag = 0; - cu_foriginal->memset_device(0); - Cuda_FixSetForceCuda_PostForce(&cuda->shared_data, groupbit, xvalue, yvalue,zvalue,(F_CFLOAT*) cu_foriginal->dev_data(),flagx,flagy,flagz); - cu_foriginal->download(); -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::post_force_respa(int vflag, int ilevel, int iloop) -{ - if (ilevel == nlevels_respa-1) post_force(vflag); - else { - cuda->cu_f->download(); - cuda->cu_mask->download(); - - double **f = atom->f; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - foriginal[0] = foriginal[1] = foriginal[2] = 0.0; - force_flag = 0; - - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - foriginal[0] += f[i][0]; - foriginal[1] += f[i][1]; - foriginal[2] += f[i][2]; - if (flagx) f[i][0] = 0.0; - if (flagy) f[i][1] = 0.0; - if (flagz) f[i][2] = 0.0; - } - cuda->cu_f->upload(); - } -} - -/* ---------------------------------------------------------------------- */ - -void FixSetForceCuda::min_post_force(int vflag) -{ - post_force(vflag); -} - - -/* ---------------------------------------------------------------------- - return components of total force on fix group before force was changed -------------------------------------------------------------------------- */ - -double FixSetForceCuda::compute_vector(int n) -{ - // only sum across procs one time - - if (force_flag == 0) { - MPI_Allreduce(foriginal,foriginal_all,3,MPI_DOUBLE,MPI_SUM,world); - force_flag = 1; - } - return foriginal_all[n+1]; -} diff --git a/src/USER-CUDA/fix_set_force_cuda.h b/src/USER-CUDA/fix_set_force_cuda.h deleted file mode 100644 index a195aec0ec..0000000000 --- a/src/USER-CUDA/fix_set_force_cuda.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(setforce/cuda,FixSetForceCuda) - -#else - -#ifndef LMP_FIX_SET_FORCE_CUDA_H -#define LMP_FIX_SET_FORCE_CUDA_H - -#include "fix.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixSetForceCuda : public Fix { - public: - FixSetForceCuda(class LAMMPS *, int, char **); - int setmask(); - void init(); - void setup(int); - void min_setup(int); - void post_force(int); - void post_force_respa(int, int, int); - void min_post_force(int); - double compute_vector(int); - - private: - class Cuda *cuda; - int flagx,flagy,flagz; - double xvalue,yvalue,zvalue; - double foriginal[3],foriginal_all[3]; - cCudaData* cu_foriginal; - int force_flag; - int nlevels_respa; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_shake_cuda.cpp b/src/USER-CUDA/fix_shake_cuda.cpp deleted file mode 100644 index 92274d1d46..0000000000 --- a/src/USER-CUDA/fix_shake_cuda.cpp +++ /dev/null @@ -1,2885 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include "fix_shake_cuda.h" -#include "fix_shake_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "modify.h" -#include "domain.h" -#include "force.h" -#include "bond.h" -#include "angle.h" -#include "comm.h" -#include "group.h" -#include "fix_respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" -#include "math_const.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; -using namespace MathConst; - -#define BIG 1.0e20 -#define MASSDELTA 0.1 - -/* ---------------------------------------------------------------------- */ - -FixShakeCuda::FixShakeCuda(LAMMPS* lmp, int narg, char** arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR, "You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if(atom->map_style != 1) - error->all(FLERR, "Fix shake/cuda needs atom map style array. In particular it does not currently work with hash-tables."); - - MPI_Comm_rank(world, &me); - MPI_Comm_size(world, &nprocs); - neighbor_step = true; - - virial_flag = 1; - create_attribute = 1; - dof_flag = 1; - - // error check - - if(atom->molecular == 0) - error->all(FLERR, "Cannot use fix shake with non-molecular system"); - - // perform initial allocation of atom-based arrays - // register with Atom class - - shake_flag = NULL; - shake_atom = shake_type = NULL; - xshake = NULL; - cu_shake_flag = NULL; - cu_shake_atom = NULL; - cu_shake_type = NULL; - cu_xshake = NULL; - cu_list = NULL; - cu_bond_distance = NULL; - cu_angle_distance = NULL; - cu_virial = new cCudaData(virial, 6); - grow_arrays(atom->nmax); - atom->add_callback(0); - - // set comm size needed by this fix - - comm_forward = 3; - - // parse SHAKE args - - if(narg < 8) error->all(FLERR, "Illegal fix shake command"); - - tolerance = force->numeric(FLERR,arg[3]); - max_iter = force->inumeric(FLERR,arg[4]); - output_every = force->inumeric(FLERR,arg[5]); - - // parse SHAKE args for bond and angle types - // will be used by find_clusters - // store args for "b" "a" "t" as flags in (1:n) list for fast access - // store args for "m" in list of length nmass for looping over - // for "m" verify that atom masses have been set - - bond_flag = new int[atom->nbondtypes + 1]; - - for(int i = 1; i <= atom->nbondtypes; i++) bond_flag[i] = 0; - - angle_flag = new int[atom->nangletypes + 1]; - - for(int i = 1; i <= atom->nangletypes; i++) angle_flag[i] = 0; - - type_flag = new int[atom->ntypes + 1]; - - for(int i = 1; i <= atom->ntypes; i++) type_flag[i] = 0; - - mass_list = new double[atom->ntypes]; - nmass = 0; - - char mode = '\0'; - int next = 6; - - while(next < narg) { - - if(strcmp(arg[next], "b") == 0) mode = 'b'; - else if(strcmp(arg[next], "a") == 0) mode = 'a'; - else if(strcmp(arg[next], "t") == 0) mode = 't'; - else if(strcmp(arg[next], "m") == 0) { - mode = 'm'; - atom->check_mass(); - - } else if(mode == 'b') { - int i = force->inumeric(FLERR,arg[next]); - - if(i < 1 || i > atom->nbondtypes) - error->all(FLERR, "Invalid bond type index for fix shake"); - - bond_flag[i] = 1; - - } else if(mode == 'a') { - int i = force->inumeric(FLERR,arg[next]); - - if(i < 1 || i > atom->nangletypes) - error->all(FLERR, "Invalid angle type index for fix shake"); - - angle_flag[i] = 1; - - } else if(mode == 't') { - int i = force->inumeric(FLERR,arg[next]); - - if(i < 1 || i > atom->ntypes) - error->all(FLERR, "Invalid atom type index for fix shake"); - - type_flag[i] = 1; - - } else if(mode == 'm') { - double massone = force->numeric(FLERR,arg[next]); - - if(massone == 0.0) error->all(FLERR, "Invalid atom mass for fix shake"); - - if(nmass == atom->ntypes) error->all(FLERR, "Too many masses for fix shake"); - - mass_list[nmass++] = massone; - - } else error->all(FLERR, "Illegal fix shake command"); - - next++; - } - - // allocate bond and angle distance arrays, indexed from 1 to n - - bond_distance = new double[atom->nbondtypes + 1]; - angle_distance = new double[atom->nangletypes + 1]; - - cu_bond_distance = new cCudaData (bond_distance, atom->nbondtypes + 1); - cu_angle_distance = new cCudaData (angle_distance, atom->nangletypes + 1); - - // allocate statistics arrays - - if(output_every) { - int nb = atom->nbondtypes + 1; - b_count = new int[nb]; - b_count_all = new int[nb]; - b_ave = new double[nb]; - b_ave_all = new double[nb]; - b_max = new double[nb]; - b_max_all = new double[nb]; - b_min = new double[nb]; - b_min_all = new double[nb]; - - int na = atom->nangletypes + 1; - a_count = new int[na]; - a_count_all = new int[na]; - a_ave = new double[na]; - a_ave_all = new double[na]; - a_max = new double[na]; - a_max_all = new double[na]; - a_min = new double[na]; - a_min_all = new double[na]; - } - - cudable_comm = true; - // identify all SHAKE clusters - - find_clusters(); - - // initialize list of SHAKE clusters to constrain - - maxlist = 0; - list = NULL; - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); - - -} - -/* ---------------------------------------------------------------------- */ - -FixShakeCuda::~FixShakeCuda() -{ - // unregister callbacks to this fix from Atom class - - atom->delete_callback(id, 0); - - // set bond_type and angle_type back to positive for SHAKE clusters - // must set for all SHAKE bonds and angles stored by each atom - - int** bond_type = atom->bond_type; - int** angle_type = atom->angle_type; - int nlocal = atom->nlocal; - - int n; - - for(int i = 0; i < nlocal; i++) { - if(shake_flag[i] == 0) continue; - else if(shake_flag[i] == 1) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = anglefind(i, shake_atom[i][1], shake_atom[i][2]); - - if(n >= 0) angle_type[i][n] = -angle_type[i][n]; - } else if(shake_flag[i] == 2) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } else if(shake_flag[i] == 3) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } else if(shake_flag[i] == 4) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][3]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } - } - - // delete locally stored arrays - - memory->destroy(shake_flag); - memory->destroy(shake_atom); - memory->destroy(shake_type); - memory->destroy(xshake); - - delete [] bond_flag; - delete [] angle_flag; - delete [] type_flag; - delete [] mass_list; - - delete [] bond_distance; - delete [] angle_distance; - - if(output_every) { - delete [] b_count; - delete [] b_count_all; - delete [] b_ave; - delete [] b_ave_all; - delete [] b_max; - delete [] b_max_all; - delete [] b_min; - delete [] b_min_all; - - delete [] a_count; - delete [] a_count_all; - delete [] a_ave; - delete [] a_ave_all; - delete [] a_max; - delete [] a_max_all; - delete [] a_min; - delete [] a_min_all; - } - - memory->destroy(list); - - delete cu_shake_flag; - delete cu_shake_atom; - delete cu_shake_type; - delete cu_xshake; - delete cu_list; - delete cu_bond_distance; - delete cu_angle_distance; -} - -/* ---------------------------------------------------------------------- */ - -int FixShakeCuda::setmask() -{ - int mask = 0; - mask |= PRE_NEIGHBOR_CUDA; - mask |= POST_FORCE_CUDA; - mask |= POST_FORCE_RESPA; - return mask; -} - -/* ---------------------------------------------------------------------- - set bond and angle distances - this init must happen after force->bond and force->angle inits -------------------------------------------------------------------------- */ - -void FixShakeCuda::init() -{ - int i, m, flag, flag_all, type1, type2, bond1_type, bond2_type; - double rsq, angle; - - // error if more than one shake fix - - int count = 0; - - for(i = 0; i < modify->nfix; i++) - if(strcmp(modify->fix[i]->style, "shake") == 0) count++; - - if(count > 1) error->all(FLERR, "More than one fix shake"); - - // cannot use with minimization since SHAKE turns off bonds - // that should contribute to potential energy - - if(update->whichflag == 2) - error->all(FLERR, "Fix shake cannot be used with minimization"); - - // error if npt,nph fix comes before shake fix - - for(i = 0; i < modify->nfix; i++) { - if(strcmp(modify->fix[i]->style, "npt") == 0) break; - - if(strcmp(modify->fix[i]->style, "nph") == 0) break; - } - - if(i < modify->nfix) { - for(int j = i; j < modify->nfix; j++) - if(strcmp(modify->fix[j]->style, "shake") == 0) - error->all(FLERR, "Shake fix must come before NPT/NPH fix"); - } - - // if rRESPA, find associated fix that must exist - // could have changed locations in fix list since created - // set ptrs to rRESPA variables - - if(strstr(update->integrate_style, "respa")) { - for(i = 0; i < modify->nfix; i++) - if(strcmp(modify->fix[i]->style, "RESPA") == 0) ifix_respa = i; - - nlevels_respa = ((Respa*) update->integrate)->nlevels; - loop_respa = ((Respa*) update->integrate)->loop; - step_respa = ((Respa*) update->integrate)->step; - } - - // set equilibrium bond distances - - if(force->bond == NULL) - error->all(FLERR, "Bond potential must be defined for SHAKE"); - - for(i = 1; i <= atom->nbondtypes; i++) - bond_distance[i] = force->bond->equilibrium_distance(i); - - // set equilibrium angle distances - - int nlocal = atom->nlocal; - - for(i = 1; i <= atom->nangletypes; i++) { - if(angle_flag[i] == 0) continue; - - if(force->angle == NULL) - error->all(FLERR, "Angle potential must be defined for SHAKE"); - - // scan all atoms for a SHAKE angle cluster - // extract bond types for the 2 bonds in the cluster - // bond types must be same in all clusters of this angle type, - // else set error flag - - flag = 0; - bond1_type = bond2_type = 0; - - for(m = 0; m < nlocal; m++) { - if(shake_flag[m] != 1) continue; - - if(shake_type[m][2] != i) continue; - - type1 = MIN(shake_type[m][0], shake_type[m][1]); - type2 = MAX(shake_type[m][0], shake_type[m][1]); - - if(bond1_type > 0) { - if(type1 != bond1_type || type2 != bond2_type) { - flag = 1; - break; - } - } - - bond1_type = type1; - bond2_type = type2; - } - - // error check for any bond types that are not the same - - MPI_Allreduce(&flag, &flag_all, 1, MPI_INT, MPI_MAX, world); - - if(flag_all) error->all(FLERR, "Shake angles have different bond types"); - - // insure all procs have bond types - - MPI_Allreduce(&bond1_type, &flag_all, 1, MPI_INT, MPI_MAX, world); - bond1_type = flag_all; - MPI_Allreduce(&bond2_type, &flag_all, 1, MPI_INT, MPI_MAX, world); - bond2_type = flag_all; - - // if bond types are 0, no SHAKE angles of this type exist - // just skip this angle - - if(bond1_type == 0) { - angle_distance[i] = 0.0; - continue; - } - - // compute the angle distance as a function of 2 bond distances - - angle = force->angle->equilibrium_angle(i); - rsq = 2.0 * bond_distance[bond1_type] * bond_distance[bond2_type] * - (1.0 - cos(angle)); - angle_distance[i] = sqrt(rsq); - } -} - -/* ---------------------------------------------------------------------- - SHAKE as pre-integrator constraint -------------------------------------------------------------------------- */ - -void FixShakeCuda::setup(int vflag) -{ - pre_neighbor(); - - if(output_every) stats(); - - // setup SHAKE output - - int ntimestep = update->ntimestep; - next_output = ntimestep + output_every; - - if(output_every == 0) next_output = update->laststep + 1; - - if(output_every && ntimestep % output_every != 0) - next_output = (ntimestep / output_every) * output_every + output_every; - - // half timestep constraint on pre-step, full timestep thereafter - - if(strstr(update->integrate_style, "verlet")) { - dtv = update->dt; - dtfsq = 0.5 * update->dt * update->dt * force->ftm2v; - post_force(vflag); - dtfsq = update->dt * update->dt * force->ftm2v; - } else { - dtv = step_respa[0]; - dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; - dtf_inner = dtf_innerhalf; - ((Respa*) update->integrate)->copy_flevel_f(nlevels_respa - 1); - post_force_respa(vflag, nlevels_respa - 1, 0); - ((Respa*) update->integrate)->copy_f_flevel(nlevels_respa - 1); - dtf_inner = step_respa[0] * force->ftm2v; - } - - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); -} - -/* ---------------------------------------------------------------------- - build list of SHAKE clusters to constrain - if one or more atoms in cluster are on this proc, - this proc lists the cluster exactly once -------------------------------------------------------------------------- */ - -void FixShakeCuda::pre_neighbor() -{ - int atom1, atom2, atom3, atom4; - - // local copies of atom quantities - // used by SHAKE until next re-neighboring - - x = atom->x; - v = atom->v; - f = atom->f; - mass = atom->mass; - rmass = atom->rmass; - type = atom->type; - nlocal = atom->nlocal; - - // extend size of SHAKE list if necessary - - if(nlocal > maxlist) { - maxlist = nlocal; - memory->destroy(list); - memory->create(list, maxlist, "shake:list"); - delete cu_list; - cu_list = new cCudaData(list, maxlist); - } - - // build list of SHAKE clusters I compute - - nlist = 0; - int count2 = 0, count3 = 0, count4 = 0, count3a = 0; - - for(int i = 0; i < nlocal; i++) - if(shake_flag[i]) { - if(shake_flag[i] == 2) count2++; - - if(shake_flag[i] == 3) count3++; - - if(shake_flag[i] == 4) count4++; - - if(shake_flag[i] == 1) count3a++; - - if(shake_flag[i] == 2) { - atom1 = atom->map(shake_atom[i][0]); - atom2 = atom->map(shake_atom[i][1]); - - if(atom1 == -1 || atom2 == -1) { - char str[128]; - sprintf(str, - "Shake atoms %d %d missing on proc %d at step " BIGINT_FORMAT, - shake_atom[i][0], shake_atom[i][1], me, update->ntimestep); - error->one(FLERR, str); - } - - if(i <= atom1 && i <= atom2) list[nlist++] = i; - } else if(shake_flag[i] % 2 == 1) { - atom1 = atom->map(shake_atom[i][0]); - atom2 = atom->map(shake_atom[i][1]); - atom3 = atom->map(shake_atom[i][2]); - - if(atom1 == -1 || atom2 == -1 || atom3 == -1) { - char str[128]; - sprintf(str, - "Shake atoms %d %d %d missing on proc %d at step " - BIGINT_FORMAT, - shake_atom[i][0], shake_atom[i][1], shake_atom[i][2], - me, update->ntimestep); - error->one(FLERR, str); - } - - if(i <= atom1 && i <= atom2 && i <= atom3) list[nlist++] = i; - } else { - atom1 = atom->map(shake_atom[i][0]); - atom2 = atom->map(shake_atom[i][1]); - atom3 = atom->map(shake_atom[i][2]); - atom4 = atom->map(shake_atom[i][3]); - - if(atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1) { - char str[128]; - sprintf(str, - "Shake atoms %d %d %d %d missing on proc %d at step " - BIGINT_FORMAT, - shake_atom[i][0], shake_atom[i][1], - shake_atom[i][2], shake_atom[i][3], - me, update->ntimestep); - error->one(FLERR, str); - } - - if(i <= atom1 && i <= atom2 && i <= atom3 && i <= atom4) - list[nlist++] = i; - } - } - - count2 /= 2; - count3 /= 3; - count4 /= 4; - count3a /= 3; - count3 += count2; - count4 += count3; - count3a += count4; - - for(int k = 0, l = count2; k < count2; k++) { - if(shake_flag[list[k]] != 2) { - while(shake_flag[list[l]] != 2 && l < nlist - 1) l++; - - if(shake_flag[list[l]] != 2) { - printf("FixShakeCuda: Error in List SortA %i %i\n", k, l); - return; - } - - int tmp = list[k]; - list[k] = list[l]; - list[l] = tmp; - } - } - - for(int k = count2, l = count3; k < count3; k++) { - if(shake_flag[list[k]] != 3) { - while(shake_flag[list[l]] != 3 && l < nlist - 1) l++; - - if(shake_flag[list[l]] != 3) { - printf("FixShakeCuda: Error in List SortB %i %i\n", k, l); - return; - } - - int tmp = list[k]; - list[k] = list[l]; - list[l] = tmp; - } - } - - for(int k = count3, l = count4; k < count4; k++) { - if(shake_flag[list[k]] != 4) { - while(shake_flag[list[l]] != 4 && l < nlist - 1) l++; - - if(shake_flag[list[l]] != 4) { - printf("FixShakeCuda: Error in List SortC %i %i\n", k, l); - return; - } - - int tmp = list[k]; - list[k] = list[l]; - list[l] = tmp; - } - } - - cu_list->upload(); - cu_bond_distance->upload(); - cu_angle_distance->upload(); - cu_shake_flag->upload(); - cu_shake_atom->upload(); - cu_shake_type->upload(); - - neighbor_step = true; -} - -/* ---------------------------------------------------------------------- - compute the force adjustment for SHAKE constraint -------------------------------------------------------------------------- */ - -void FixShakeCuda::post_force(int vflag) -{ - my_times starttime; - my_times endtime; - - - if(cuda->finished_setup && neighbor_step) { - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); - - } - - if(not cuda->finished_setup) - cuda->downloadAll(); - - if(update->ntimestep == next_output) { - if(cuda->finished_setup) - cuda->cu_x->download(); - - stats(); - } - - // xshake = unconstrained move with current v,f - - unconstrained_update(); - - // communicate results if necessary - - //if(cuda->finished_setup) cu_xshake->download(); - - if(nprocs > 1) { - //if(cuda->finished_setup) - //cu_xshake->download(); - comm->forward_comm_fix(this); - //if(cuda->finished_setup) - //cu_xshake->upload(); - } - - // virial setup - - if(vflag) v_setup(vflag); - else evflag = 0; - - // loop over clusters - - my_gettime(CLOCK_REALTIME, &starttime); - - if(cuda->finished_setup) { - cu_virial->upload(); - - if(vflag_atom) cuda->cu_vatom->upload(); - - Cuda_FixShakeCuda_Shake(&cuda->shared_data, vflag, vflag_atom, (int*)cu_list->dev_data(), nlist); - cu_virial->download(); - - if(vflag_atom) cuda->cu_vatom->download(); - - } else - for(int i = 0; i < nlist; i++) { - int m = list[i]; - - if(shake_flag[m] == 2) shake2(m); - else if(shake_flag[m] == 3) shake3(m); - else if(shake_flag[m] == 4) shake4(m); - else shake3angle(m); - } - - if((not cuda->finished_setup)) cuda->cu_f->upload(); - - my_gettime(CLOCK_REALTIME, &endtime); - - if(cuda->finished_setup) - time_postforce += (endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); - else - time_postforce = 0.0; - - //printf("Postforce time: %lf\n",time_postforce); -} - -/* ---------------------------------------------------------------------- - count # of degrees-of-freedom removed by SHAKE for atoms in igroup -------------------------------------------------------------------------- */ - -int FixShakeCuda::dof(int igroup) -{ - int groupbit = group->bitmask[igroup]; - - int* mask = atom->mask; - int* tag = atom->tag; - int nlocal = atom->nlocal; - - // count dof in a cluster if and only if - // the central atom is in group and atom i is the central atom - - int n = 0; - - for(int i = 0; i < nlocal; i++) { - if(!(mask[i] & groupbit)) continue; - - if(shake_flag[i] == 0) continue; - - if(shake_atom[i][0] != tag[i]) continue; - - if(shake_flag[i] == 1) n += 3; - else if(shake_flag[i] == 2) n += 1; - else if(shake_flag[i] == 3) n += 2; - else if(shake_flag[i] == 4) n += 3; - } - - int nall; - MPI_Allreduce(&n, &nall, 1, MPI_INT, MPI_SUM, world); - return nall; -} - -/* ---------------------------------------------------------------------- - identify whether each atom is in a SHAKE cluster - only include atoms in fix group and those bonds/angles specified in input - test whether all clusters are valid - set shake_flag, shake_atom, shake_type values - set bond,angle types negative so will be ignored in neighbor lists -------------------------------------------------------------------------- */ - -void FixShakeCuda::find_clusters() -{ - int i, j, m, n; - int flag, flag_all, messtag, loop, nbuf, nbufmax, size; - double massone; - int* buf, *bufcopy; - MPI_Request request; - MPI_Status status; - - if(me == 0 && screen) fprintf(screen, "Finding SHAKE clusters ...\n"); - - // local copies of atom ptrs - - int* tag = atom->tag; - int* type = atom->type; - int* mask = atom->mask; - double* mass = atom->mass; - double* rmass = atom->rmass; - int** bond_type = atom->bond_type; - int** angle_type = atom->angle_type; - int** nspecial = atom->nspecial; - int** special = atom->special; - int nlocal = atom->nlocal; - - // setup ring of procs - - int next = me + 1; - int prev = me - 1; - - if(next == nprocs) next = 0; - - if(prev < 0) prev = nprocs - 1; - - // ----------------------------------------------------- - // allocate arrays for self (1d) and bond partners (2d) - // max = max # of bond partners for owned atoms = 2nd dim of partner arrays - // npartner[i] = # of bonds attached to atom i - // nshake[i] = # of SHAKE bonds attached to atom i - // partner_tag[i][] = global IDs of each partner - // partner_mask[i][] = mask of each partner - // partner_type[i][] = type of each partner - // partner_massflag[i][] = 1 if partner meets mass criterion, 0 if not - // partner_bondtype[i][] = type of bond attached to each partner - // partner_shake[i][] = 1 if SHAKE bonded to partner, 0 if not - // partner_nshake[i][] = nshake value for each partner - // ----------------------------------------------------- - - int max = 0; - - for(i = 0; i < nlocal; i++) max = MAX(max, nspecial[i][0]); - - int* npartner, *nshake; - memory->create(npartner, nlocal, "shake:npartner"); - memory->create(nshake, nlocal, "shake:nshake"); - - int** partner_tag, **partner_mask, **partner_type, **partner_massflag; - int** partner_bondtype, **partner_shake, **partner_nshake; - memory->create(partner_tag, nlocal, max, "shake:partner_tag"); - memory->create(partner_mask, nlocal, max, "shake:partner_mask"); - memory->create(partner_type, nlocal, max, "shake:partner_type"); - memory->create(partner_massflag, nlocal, max, "shake:partner_massflag"); - memory->create(partner_bondtype, nlocal, max, "shake:partner_bondtype"); - memory->create(partner_shake, nlocal, max, "shake:partner_shake"); - memory->create(partner_nshake, nlocal, max, "shake:partner_nshake"); - - // ----------------------------------------------------- - // set npartner and partner_tag from special arrays - // ----------------------------------------------------- - - for(i = 0; i < nlocal; i++) { - npartner[i] = nspecial[i][0]; - - for(j = 0; j < npartner[i]; j++) partner_tag[i][j] = special[i][j]; - } - - // ----------------------------------------------------- - // set partner_mask, partner_type, partner_massflag, partner_bondtype - // for bonded partners - // requires communication for off-proc partners - // ----------------------------------------------------- - - // fill in mask, type, massflag, bondtype if own bond partner - // info to store in buf for each off-proc bond = nper = 6 - // 2 atoms IDs in bond, space for mask, type, massflag, bondtype - // nbufmax = largest buffer needed to hold info from any proc - - int nper = 6; - - nbuf = 0; - - for(i = 0; i < nlocal; i++) { - for(j = 0; j < npartner[i]; j++) { - partner_mask[i][j] = 0; - partner_type[i][j] = 0; - partner_massflag[i][j] = 0; - partner_bondtype[i][j] = 0; - - m = atom->map(partner_tag[i][j]); - - if(m >= 0 && m < nlocal) { - partner_mask[i][j] = mask[m]; - partner_type[i][j] = type[m]; - - if(nmass) { - if(rmass) massone = rmass[m]; - else massone = mass[type[m]]; - - partner_massflag[i][j] = masscheck(massone); - } - - n = bondfind(i, tag[i], partner_tag[i][j]); - - if(n >= 0) partner_bondtype[i][j] = bond_type[i][n]; - else { - n = bondfind(m, tag[i], partner_tag[i][j]); - - if(n >= 0) partner_bondtype[i][j] = bond_type[m][n]; - } - } else nbuf += nper; - } - } - - MPI_Allreduce(&nbuf, &nbufmax, 1, MPI_INT, MPI_MAX, world); - - buf = new int[nbufmax]; - bufcopy = new int[nbufmax]; - - // fill buffer with info - - size = 0; - - for(i = 0; i < nlocal; i++) { - for(j = 0; j < npartner[i]; j++) { - m = atom->map(partner_tag[i][j]); - - if(m < 0 || m >= nlocal) { - buf[size] = tag[i]; - buf[size + 1] = partner_tag[i][j]; - buf[size + 2] = 0; - buf[size + 3] = 0; - buf[size + 4] = 0; - n = bondfind(i, tag[i], partner_tag[i][j]); - - if(n >= 0) buf[size + 5] = bond_type[i][n]; - else buf[size + 5] = 0; - - size += nper; - } - } - } - - // cycle buffer around ring of procs back to self - // when receive buffer, scan bond partner IDs for atoms I own - // if I own partner: - // fill in mask and type and massflag - // search for bond with 1st atom and fill in bondtype - - messtag = 1; - - for(loop = 0; loop < nprocs; loop++) { - i = 0; - - while(i < size) { - m = atom->map(buf[i + 1]); - - if(m >= 0 && m < nlocal) { - buf[i + 2] = mask[m]; - buf[i + 3] = type[m]; - - if(nmass) { - if(rmass) massone = rmass[m]; - else massone = mass[type[m]]; - - buf[i + 4] = masscheck(massone); - } - - if(buf[i + 5] == 0) { - n = bondfind(m, buf[i], buf[i + 1]); - - if(n >= 0) buf[i + 5] = bond_type[m][n]; - } - } - - i += nper; - } - - if(me != next) { - MPI_Irecv(bufcopy, nbufmax, MPI_INT, prev, messtag, world, &request); - MPI_Send(buf, size, MPI_INT, next, messtag, world); - MPI_Wait(&request, &status); - MPI_Get_count(&status, MPI_INT, &size); - - for(j = 0; j < size; j++) buf[j] = bufcopy[j]; - } - } - - // store partner info returned to me - - m = 0; - - while(m < size) { - i = atom->map(buf[m]); - - for(j = 0; j < npartner[i]; j++) - if(buf[m + 1] == partner_tag[i][j]) break; - - partner_mask[i][j] = buf[m + 2]; - partner_type[i][j] = buf[m + 3]; - partner_massflag[i][j] = buf[m + 4]; - partner_bondtype[i][j] = buf[m + 5]; - m += nper; - } - - delete [] buf; - delete [] bufcopy; - - // error check for unfilled partner info - // if partner_type not set, is an error - // partner_bondtype may not be set if special list is not consistent - // with bondatom (e.g. due to delete_bonds command) - // this is OK if one or both atoms are not in fix group, since - // bond won't be SHAKEn anyway - // else it's an error - - flag = 0; - - for(i = 0; i < nlocal; i++) - for(j = 0; j < npartner[i]; j++) { - if(partner_type[i][j] == 0) flag = 1; - - if(!(mask[i] & groupbit)) continue; - - if(!(partner_mask[i][j] & groupbit)) continue; - - if(partner_bondtype[i][j] == 0) flag = 1; - } - - MPI_Allreduce(&flag, &flag_all, 1, MPI_INT, MPI_SUM, world); - - if(flag_all) error->all(FLERR, "Did not find fix shake partner info"); - - // ----------------------------------------------------- - // identify SHAKEable bonds - // set nshake[i] = # of SHAKE bonds attached to atom i - // set partner_shake[i][] = 1 if SHAKE bonded to partner, 0 if not - // both atoms must be in group, bondtype must be > 0 - // check if bondtype is in input bond_flag - // check if type of either atom is in input type_flag - // check if mass of either atom is in input mass_list - // ----------------------------------------------------- - - int np; - - for(i = 0; i < nlocal; i++) { - nshake[i] = 0; - np = npartner[i]; - - for(j = 0; j < np; j++) { - partner_shake[i][j] = 0; - - if(!(mask[i] & groupbit)) continue; - - if(!(partner_mask[i][j] & groupbit)) continue; - - if(partner_bondtype[i][j] <= 0) continue; - - if(bond_flag[partner_bondtype[i][j]]) { - partner_shake[i][j] = 1; - nshake[i]++; - continue; - } - - if(type_flag[type[i]] || type_flag[partner_type[i][j]]) { - partner_shake[i][j] = 1; - nshake[i]++; - continue; - } - - if(nmass) { - if(partner_massflag[i][j]) { - partner_shake[i][j] = 1; - nshake[i]++; - continue; - } else { - if(rmass) massone = rmass[i]; - else massone = mass[type[i]]; - - if(masscheck(massone)) { - partner_shake[i][j] = 1; - nshake[i]++; - continue; - } - } - } - } - } - - // ----------------------------------------------------- - // set partner_nshake for bonded partners - // requires communication for off-proc partners - // ----------------------------------------------------- - - // fill in partner_nshake if own bond partner - // info to store in buf for each off-proc bond = - // 2 atoms IDs in bond, space for nshake value - // nbufmax = largest buffer needed to hold info from any proc - - nbuf = 0; - - for(i = 0; i < nlocal; i++) { - for(j = 0; j < npartner[i]; j++) { - m = atom->map(partner_tag[i][j]); - - if(m >= 0 && m < nlocal) partner_nshake[i][j] = nshake[m]; - else nbuf += 3; - } - } - - MPI_Allreduce(&nbuf, &nbufmax, 1, MPI_INT, MPI_MAX, world); - - buf = new int[nbufmax]; - bufcopy = new int[nbufmax]; - - // fill buffer with info - - size = 0; - - for(i = 0; i < nlocal; i++) { - for(j = 0; j < npartner[i]; j++) { - m = atom->map(partner_tag[i][j]); - - if(m < 0 || m >= nlocal) { - buf[size] = tag[i]; - buf[size + 1] = partner_tag[i][j]; - size += 3; - } - } - } - - // cycle buffer around ring of procs back to self - // when receive buffer, scan bond partner IDs for atoms I own - // if I own partner, fill in nshake value - - messtag = 2; - - for(loop = 0; loop < nprocs; loop++) { - i = 0; - - while(i < size) { - m = atom->map(buf[i + 1]); - - if(m >= 0 && m < nlocal) buf[i + 2] = nshake[m]; - - i += 3; - } - - if(me != next) { - MPI_Irecv(bufcopy, nbufmax, MPI_INT, prev, messtag, world, &request); - MPI_Send(buf, size, MPI_INT, next, messtag, world); - MPI_Wait(&request, &status); - MPI_Get_count(&status, MPI_INT, &size); - - for(j = 0; j < size; j++) buf[j] = bufcopy[j]; - } - } - - // store partner info returned to me - - m = 0; - - while(m < size) { - i = atom->map(buf[m]); - - for(j = 0; j < npartner[i]; j++) - if(buf[m + 1] == partner_tag[i][j]) break; - - partner_nshake[i][j] = buf[m + 2]; - m += 3; - } - - delete [] buf; - delete [] bufcopy; - - // ----------------------------------------------------- - // error checks - // no atom with nshake > 3 - // no connected atoms which both have nshake > 1 - // ----------------------------------------------------- - - flag = 0; - - for(i = 0; i < nlocal; i++) if(nshake[i] > 3) flag = 1; - - MPI_Allreduce(&flag, &flag_all, 1, MPI_INT, MPI_SUM, world); - - if(flag_all) error->all(FLERR, "Shake cluster of more than 4 atoms"); - - flag = 0; - - for(i = 0; i < nlocal; i++) { - if(nshake[i] <= 1) continue; - - for(j = 0; j < npartner[i]; j++) - if(partner_shake[i][j] && partner_nshake[i][j] > 1) flag = 1; - } - - MPI_Allreduce(&flag, &flag_all, 1, MPI_INT, MPI_SUM, world); - - if(flag_all) error->all(FLERR, "Shake clusters are connected"); - - // ----------------------------------------------------- - // set SHAKE arrays that are stored with atoms & add angle constraints - // zero shake arrays for all owned atoms - // if I am central atom set shake_flag & shake_atom & shake_type - // for 2-atom clusters, I am central atom if my atom ID < partner ID - // for 3-atom clusters, test for angle constraint - // angle will be stored by this atom if it exists - // if angle type matches angle_flag, then it is angle-constrained - // shake_flag[] = 0 if atom not in SHAKE cluster - // 2,3,4 = size of bond-only cluster - // 1 = 3-atom angle cluster - // shake_atom[][] = global IDs of 2,3,4 atoms in cluster - // central atom is 1st - // for 2-atom cluster, lowest ID is 1st - // shake_type[][] = bondtype of each bond in cluster - // for 3-atom angle cluster, 3rd value is angletype - // ----------------------------------------------------- - - for(i = 0; i < nlocal; i++) { - shake_flag[i] = 0; - shake_atom[i][0] = 0; - shake_atom[i][1] = 0; - shake_atom[i][2] = 0; - shake_atom[i][3] = 0; - shake_type[i][0] = 0; - shake_type[i][1] = 0; - shake_type[i][2] = 0; - - if(nshake[i] == 1) { - for(j = 0; j < npartner[i]; j++) - if(partner_shake[i][j]) break; - - if(partner_nshake[i][j] == 1 && tag[i] < partner_tag[i][j]) { - shake_flag[i] = 2; - shake_atom[i][0] = tag[i]; - shake_atom[i][1] = partner_tag[i][j]; - shake_type[i][0] = partner_bondtype[i][j]; - } - } - - if(nshake[i] > 1) { - shake_flag[i] = 1; - shake_atom[i][0] = tag[i]; - - for(j = 0; j < npartner[i]; j++) - if(partner_shake[i][j]) { - m = shake_flag[i]; - shake_atom[i][m] = partner_tag[i][j]; - shake_type[i][m - 1] = partner_bondtype[i][j]; - shake_flag[i]++; - } - } - - if(nshake[i] == 2) { - n = anglefind(i, shake_atom[i][1], shake_atom[i][2]); - - if(n < 0) continue; - - if(angle_type[i][n] < 0) continue; - - if(angle_flag[angle_type[i][n]]) { - shake_flag[i] = 1; - shake_type[i][2] = angle_type[i][n]; - } - } - } - - // ----------------------------------------------------- - // set shake_flag,shake_atom,shake_type for non-central atoms - // requires communication for off-proc atoms - // ----------------------------------------------------- - - // fill in shake arrays for each bond partner I own - // info to store in buf for each off-proc bond = - // all values from shake_flag, shake_atom, shake_type - // nbufmax = largest buffer needed to hold info from any proc - - nbuf = 0; - - for(i = 0; i < nlocal; i++) { - if(shake_flag[i] == 0) continue; - - for(j = 0; j < npartner[i]; j++) { - if(partner_shake[i][j] == 0) continue; - - m = atom->map(partner_tag[i][j]); - - if(m >= 0 && m < nlocal) { - shake_flag[m] = shake_flag[i]; - shake_atom[m][0] = shake_atom[i][0]; - shake_atom[m][1] = shake_atom[i][1]; - shake_atom[m][2] = shake_atom[i][2]; - shake_atom[m][3] = shake_atom[i][3]; - shake_type[m][0] = shake_type[i][0]; - shake_type[m][1] = shake_type[i][1]; - shake_type[m][2] = shake_type[i][2]; - } else nbuf += 9; - } - } - - MPI_Allreduce(&nbuf, &nbufmax, 1, MPI_INT, MPI_MAX, world); - - buf = new int[nbufmax]; - bufcopy = new int[nbufmax]; - - // fill buffer with info - - size = 0; - - for(i = 0; i < nlocal; i++) { - if(shake_flag[i] == 0) continue; - - for(j = 0; j < npartner[i]; j++) { - if(partner_shake[i][j] == 0) continue; - - m = atom->map(partner_tag[i][j]); - - if(m < 0 || m >= nlocal) { - buf[size] = partner_tag[i][j]; - buf[size + 1] = shake_flag[i]; - buf[size + 2] = shake_atom[i][0]; - buf[size + 3] = shake_atom[i][1]; - buf[size + 4] = shake_atom[i][2]; - buf[size + 5] = shake_atom[i][3]; - buf[size + 6] = shake_type[i][0]; - buf[size + 7] = shake_type[i][1]; - buf[size + 8] = shake_type[i][2]; - size += 9; - } - } - } - - // cycle buffer around ring of procs back to self - // when receive buffer, scan for ID that I own - // if I own ID, fill in shake array values - - messtag = 3; - - for(loop = 0; loop < nprocs; loop++) { - i = 0; - - while(i < size) { - m = atom->map(buf[i]); - - if(m >= 0 && m < nlocal) { - shake_flag[m] = buf[i + 1]; - shake_atom[m][0] = buf[i + 2]; - shake_atom[m][1] = buf[i + 3]; - shake_atom[m][2] = buf[i + 4]; - shake_atom[m][3] = buf[i + 5]; - shake_type[m][0] = buf[i + 6]; - shake_type[m][1] = buf[i + 7]; - shake_type[m][2] = buf[i + 8]; - } - - i += 9; - } - - if(me != next) { - MPI_Irecv(bufcopy, nbufmax, MPI_INT, prev, messtag, world, &request); - MPI_Send(buf, size, MPI_INT, next, messtag, world); - MPI_Wait(&request, &status); - MPI_Get_count(&status, MPI_INT, &size); - - for(j = 0; j < size; j++) buf[j] = bufcopy[j]; - } - } - - delete [] buf; - delete [] bufcopy; - - // ----------------------------------------------------- - // free local memory - // ----------------------------------------------------- - - memory->destroy(npartner); - memory->destroy(nshake); - memory->destroy(partner_tag); - memory->destroy(partner_mask); - memory->destroy(partner_type); - memory->destroy(partner_massflag); - memory->destroy(partner_bondtype); - memory->destroy(partner_shake); - memory->destroy(partner_nshake); - - // ----------------------------------------------------- - // set bond_type and angle_type negative for SHAKE clusters - // must set for all SHAKE bonds and angles stored by each atom - // ----------------------------------------------------- - - for(i = 0; i < nlocal; i++) { - if(shake_flag[i] == 0) continue; - else if(shake_flag[i] == 1) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = anglefind(i, shake_atom[i][1], shake_atom[i][2]); - - if(n >= 0) angle_type[i][n] = -angle_type[i][n]; - } else if(shake_flag[i] == 2) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } else if(shake_flag[i] == 3) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } else if(shake_flag[i] == 4) { - n = bondfind(i, shake_atom[i][0], shake_atom[i][1]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][2]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - - n = bondfind(i, shake_atom[i][0], shake_atom[i][3]); - - if(n >= 0) bond_type[i][n] = -bond_type[i][n]; - } - } - - // ----------------------------------------------------- - // print info on SHAKE clusters - // ----------------------------------------------------- - - int count1, count2, count3, count4; - count1 = count2 = count3 = count4 = 0; - - for(i = 0; i < nlocal; i++) { - if(shake_flag[i] == 1) count1++; - else if(shake_flag[i] == 2) count2++; - else if(shake_flag[i] == 3) count3++; - else if(shake_flag[i] == 4) count4++; - } - - for(int i = 0; i < nlocal; i++) { - } - - - int tmp; - tmp = count1; - MPI_Allreduce(&tmp, &count1, 1, MPI_INT, MPI_SUM, world); - tmp = count2; - MPI_Allreduce(&tmp, &count2, 1, MPI_INT, MPI_SUM, world); - tmp = count3; - MPI_Allreduce(&tmp, &count3, 1, MPI_INT, MPI_SUM, world); - tmp = count4; - MPI_Allreduce(&tmp, &count4, 1, MPI_INT, MPI_SUM, world); - - if(me == 0) { - if(screen) { - fprintf(screen, " %d = # of size 2 clusters\n", count2 / 2); - fprintf(screen, " %d = # of size 3 clusters\n", count3 / 3); - fprintf(screen, " %d = # of size 4 clusters\n", count4 / 4); - fprintf(screen, " %d = # of frozen angles\n", count1 / 3); - } - - if(logfile) { - fprintf(logfile, " %d = # of size 2 clusters\n", count2 / 2); - fprintf(logfile, " %d = # of size 3 clusters\n", count3 / 3); - fprintf(logfile, " %d = # of size 4 clusters\n", count4 / 4); - fprintf(logfile, " %d = # of frozen angles\n", count1 / 3); - } - } - - cu_shake_flag->upload(); - cu_shake_atom->upload(); - cu_shake_type->upload(); - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); - -} - -void FixShakeCuda::swap_clusters(int i, int j) -{ - int tmp; - tmp = shake_flag[i]; - shake_flag[i] = shake_flag[j]; - shake_flag[j] = tmp; - tmp = shake_atom[i][0]; - shake_atom[i][0] = shake_atom[j][0]; - shake_atom[j][0] = tmp; - tmp = shake_atom[i][1]; - shake_atom[i][1] = shake_atom[j][1]; - shake_atom[j][1] = tmp; - tmp = shake_atom[i][2]; - shake_atom[i][2] = shake_atom[j][2]; - shake_atom[j][2] = tmp; - tmp = shake_atom[i][3]; - shake_atom[i][3] = shake_atom[j][3]; - shake_atom[j][3] = tmp; - tmp = shake_type[i][0]; - shake_type[i][0] = shake_type[j][0]; - shake_type[j][0] = tmp; - tmp = shake_type[i][1]; - shake_type[i][1] = shake_type[j][1]; - shake_type[j][1] = tmp; - tmp = shake_type[i][2]; - shake_type[i][2] = shake_type[j][2]; - shake_type[j][2] = tmp; -} - -/* ---------------------------------------------------------------------- - check if massone is within MASSDELTA of any mass in mass_list - return 1 if yes, 0 if not -------------------------------------------------------------------------- */ - -int FixShakeCuda::masscheck(double massone) -{ - for(int i = 0; i < nmass; i++) - if(fabs(mass_list[i] - massone) <= MASSDELTA) return 1; - - return 0; -} - -/* ---------------------------------------------------------------------- - update the unconstrained position of each atom - only for SHAKE clusters, else set to 0.0 - assumes NVE update, seems to be accurate enough for NVT,NPT,NPH as well -------------------------------------------------------------------------- */ - -void FixShakeCuda::unconstrained_update() -{ - if(cuda->finished_setup) { - Cuda_FixShakeCuda_UnconstrainedUpdate(&cuda->shared_data); - return; - } - - double dtfmsq; - - if(rmass) { - for(int i = 0; i < nlocal; i++) { - if(shake_flag[i]) { - dtfmsq = dtfsq / rmass[i]; - xshake[i][0] = x[i][0] + dtv * v[i][0] + dtfmsq * f[i][0]; - xshake[i][1] = x[i][1] + dtv * v[i][1] + dtfmsq * f[i][1]; - xshake[i][2] = x[i][2] + dtv * v[i][2] + dtfmsq * f[i][2]; - } else xshake[i][2] = xshake[i][1] = xshake[i][0] = 0.0; - } - } else { - for(int i = 0; i < nlocal; i++) { - if(shake_flag[i]) { - dtfmsq = dtfsq / mass[type[i]]; - xshake[i][0] = x[i][0] + dtv * v[i][0] + dtfmsq * f[i][0]; - xshake[i][1] = x[i][1] + dtv * v[i][1] + dtfmsq * f[i][1]; - xshake[i][2] = x[i][2] + dtv * v[i][2] + dtfmsq * f[i][2]; - } else xshake[i][2] = xshake[i][1] = xshake[i][0] = 0.0; - } - } - - cu_xshake->upload(); -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::shake2(int m) -{ - int nlist, list[2]; - double v[6]; - double invmass0, invmass1; - - // local atom IDs and constraint distances - - int i0 = atom->map(shake_atom[m][0]); - int i1 = atom->map(shake_atom[m][1]); - double bond1 = bond_distance[shake_type[m][0]]; - - // r01 = distance vec between atoms, with PBC - - double r01[3]; - r01[0] = x[i0][0] - x[i1][0]; - r01[1] = x[i0][1] - x[i1][1]; - r01[2] = x[i0][2] - x[i1][2]; - domain->minimum_image(r01); - - // s01 = distance vec after unconstrained update, with PBC - - double s01[3]; - s01[0] = xshake[i0][0] - xshake[i1][0]; - s01[1] = xshake[i0][1] - xshake[i1][1]; - s01[2] = xshake[i0][2] - xshake[i1][2]; - domain->minimum_image(s01); - - // scalar distances between atoms - - double r01sq = r01[0] * r01[0] + r01[1] * r01[1] + r01[2] * r01[2]; - double s01sq = s01[0] * s01[0] + s01[1] * s01[1] + s01[2] * s01[2]; - - // a,b,c = coeffs in quadratic equation for lamda - - if(rmass) { - invmass0 = 1.0 / rmass[i0]; - invmass1 = 1.0 / rmass[i1]; - } else { - invmass0 = 1.0 / mass[type[i0]]; - invmass1 = 1.0 / mass[type[i1]]; - } - - double a = (invmass0 + invmass1) * (invmass0 + invmass1) * r01sq; - double b = 2.0 * (invmass0 + invmass1) * - (s01[0] * r01[0] + s01[1] * r01[1] + s01[2] * r01[2]); - double c = s01sq - bond1 * bond1; - - // error check - - double determ = b * b - 4.0 * a * c; - - if(determ < 0.0) { - error->warning(FLERR, "Shake determinant < 0.0"); - determ = 0.0; - } - - // exact quadratic solution for lamda - - double lamda, lamda1, lamda2; - lamda1 = (-b + sqrt(determ)) / (2.0 * a); - lamda2 = (-b - sqrt(determ)) / (2.0 * a); - - if(fabs(lamda1) <= fabs(lamda2)) lamda = lamda1; - else lamda = lamda2; - - // update forces if atom is owned by this processor - lamda /= dtfsq; - - if(i0 < nlocal) { - f[i0][0] += lamda * r01[0]; - f[i0][1] += lamda * r01[1]; - f[i0][2] += lamda * r01[2]; - } - - if(i1 < nlocal) { - f[i1][0] -= lamda * r01[0]; - f[i1][1] -= lamda * r01[1]; - f[i1][2] -= lamda * r01[2]; - } - - if(evflag) { - nlist = 0; - - if(i0 < nlocal) list[nlist++] = i0; - - if(i1 < nlocal) list[nlist++] = i1; - - v[0] = lamda * r01[0] * r01[0]; - v[1] = lamda * r01[1] * r01[1]; - v[2] = lamda * r01[2] * r01[2]; - v[3] = lamda * r01[0] * r01[1]; - v[4] = lamda * r01[0] * r01[2]; - v[5] = lamda * r01[1] * r01[2]; - - v_tally(nlist, list, 2.0, v); - } -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::shake3(int m) -{ - int nlist, list[3]; - double v[6]; - double invmass0, invmass1, invmass2; - - // local atom IDs and constraint distances - - int i0 = atom->map(shake_atom[m][0]); - int i1 = atom->map(shake_atom[m][1]); - int i2 = atom->map(shake_atom[m][2]); - double bond1 = bond_distance[shake_type[m][0]]; - double bond2 = bond_distance[shake_type[m][1]]; - - // r01,r02 = distance vec between atoms, with PBC - - double r01[3]; - r01[0] = x[i0][0] - x[i1][0]; - r01[1] = x[i0][1] - x[i1][1]; - r01[2] = x[i0][2] - x[i1][2]; - domain->minimum_image(r01); - - double r02[3]; - r02[0] = x[i0][0] - x[i2][0]; - r02[1] = x[i0][1] - x[i2][1]; - r02[2] = x[i0][2] - x[i2][2]; - domain->minimum_image(r02); - - // s01,s02 = distance vec after unconstrained update, with PBC - - double s01[3]; - s01[0] = xshake[i0][0] - xshake[i1][0]; - s01[1] = xshake[i0][1] - xshake[i1][1]; - s01[2] = xshake[i0][2] - xshake[i1][2]; - domain->minimum_image(s01); - - double s02[3]; - s02[0] = xshake[i0][0] - xshake[i2][0]; - s02[1] = xshake[i0][1] - xshake[i2][1]; - s02[2] = xshake[i0][2] - xshake[i2][2]; - domain->minimum_image(s02); - - // scalar distances between atoms - - double r01sq = r01[0] * r01[0] + r01[1] * r01[1] + r01[2] * r01[2]; - double r02sq = r02[0] * r02[0] + r02[1] * r02[1] + r02[2] * r02[2]; - double s01sq = s01[0] * s01[0] + s01[1] * s01[1] + s01[2] * s01[2]; - double s02sq = s02[0] * s02[0] + s02[1] * s02[1] + s02[2] * s02[2]; - - // matrix coeffs and rhs for lamda equations - - if(rmass) { - invmass0 = 1.0 / rmass[i0]; - invmass1 = 1.0 / rmass[i1]; - invmass2 = 1.0 / rmass[i2]; - } else { - invmass0 = 1.0 / mass[type[i0]]; - invmass1 = 1.0 / mass[type[i1]]; - invmass2 = 1.0 / mass[type[i2]]; - } - - double a11 = 2.0 * (invmass0 + invmass1) * - (s01[0] * r01[0] + s01[1] * r01[1] + s01[2] * r01[2]); - double a12 = 2.0 * invmass0 * - (s01[0] * r02[0] + s01[1] * r02[1] + s01[2] * r02[2]); - double a21 = 2.0 * invmass0 * - (s02[0] * r01[0] + s02[1] * r01[1] + s02[2] * r01[2]); - double a22 = 2.0 * (invmass0 + invmass2) * - (s02[0] * r02[0] + s02[1] * r02[1] + s02[2] * r02[2]); - - // inverse of matrix - - double determ = a11 * a22 - a12 * a21; - - if(determ == 0.0) error->one(FLERR, "Shake determinant = 0.0"); - - double determinv = 1.0 / determ; - - double a11inv = a22 * determinv; - double a12inv = -a12 * determinv; - double a21inv = -a21 * determinv; - double a22inv = a11 * determinv; - - // quadratic correction coeffs - - double r0102 = (r01[0] * r02[0] + r01[1] * r02[1] + r01[2] * r02[2]); - - double quad1_0101 = (invmass0 + invmass1) * (invmass0 + invmass1) * r01sq; - double quad1_0202 = invmass0 * invmass0 * r02sq; - double quad1_0102 = 2.0 * (invmass0 + invmass1) * invmass0 * r0102; - - double quad2_0202 = (invmass0 + invmass2) * (invmass0 + invmass2) * r02sq; - double quad2_0101 = invmass0 * invmass0 * r01sq; - double quad2_0102 = 2.0 * (invmass0 + invmass2) * invmass0 * r0102; - - // iterate until converged - - double lamda01 = 0.0; - double lamda02 = 0.0; - int niter = 0; - int done = 0; - - double quad1, quad2, b1, b2, lamda01_new, lamda02_new; - - while(!done && niter < max_iter) { - quad1 = quad1_0101 * lamda01 * lamda01 + quad1_0202 * lamda02 * lamda02 + - quad1_0102 * lamda01 * lamda02; - quad2 = quad2_0101 * lamda01 * lamda01 + quad2_0202 * lamda02 * lamda02 + - quad2_0102 * lamda01 * lamda02; - - b1 = bond1 * bond1 - s01sq - quad1; - b2 = bond2 * bond2 - s02sq - quad2; - - lamda01_new = a11inv * b1 + a12inv * b2; - lamda02_new = a21inv * b1 + a22inv * b2; - - done = 1; - - if(fabs(lamda01_new - lamda01) > tolerance) done = 0; - - if(fabs(lamda02_new - lamda02) > tolerance) done = 0; - - lamda01 = lamda01_new; - lamda02 = lamda02_new; - niter++; - } - - // update forces if atom is owned by this processor - - lamda01 = lamda01 / dtfsq; - lamda02 = lamda02 / dtfsq; - - if(i0 < nlocal) { - f[i0][0] += lamda01 * r01[0] + lamda02 * r02[0]; - f[i0][1] += lamda01 * r01[1] + lamda02 * r02[1]; - f[i0][2] += lamda01 * r01[2] + lamda02 * r02[2]; - } - - if(i1 < nlocal) { - f[i1][0] -= lamda01 * r01[0]; - f[i1][1] -= lamda01 * r01[1]; - f[i1][2] -= lamda01 * r01[2]; - } - - if(i2 < nlocal) { - f[i2][0] -= lamda02 * r02[0]; - f[i2][1] -= lamda02 * r02[1]; - f[i2][2] -= lamda02 * r02[2]; - } - - if(evflag) { - nlist = 0; - - if(i0 < nlocal) list[nlist++] = i0; - - if(i1 < nlocal) list[nlist++] = i1; - - if(i2 < nlocal) list[nlist++] = i2; - - v[0] = lamda01 * r01[0] * r01[0] + lamda02 * r02[0] * r02[0]; - v[1] = lamda01 * r01[1] * r01[1] + lamda02 * r02[1] * r02[1]; - v[2] = lamda01 * r01[2] * r01[2] + lamda02 * r02[2] * r02[2]; - v[3] = lamda01 * r01[0] * r01[1] + lamda02 * r02[0] * r02[1]; - v[4] = lamda01 * r01[0] * r01[2] + lamda02 * r02[0] * r02[2]; - v[5] = lamda01 * r01[1] * r01[2] + lamda02 * r02[1] * r02[2]; - - v_tally(nlist, list, 3.0, v); - } -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::shake4(int m) -{ - int nlist, list[4]; - double v[6]; - double invmass0, invmass1, invmass2, invmass3; - - // local atom IDs and constraint distances - - int i0 = atom->map(shake_atom[m][0]); - int i1 = atom->map(shake_atom[m][1]); - int i2 = atom->map(shake_atom[m][2]); - int i3 = atom->map(shake_atom[m][3]); - double bond1 = bond_distance[shake_type[m][0]]; - double bond2 = bond_distance[shake_type[m][1]]; - double bond3 = bond_distance[shake_type[m][2]]; - - // r01,r02,r03 = distance vec between atoms, with PBC - - double r01[3]; - r01[0] = x[i0][0] - x[i1][0]; - r01[1] = x[i0][1] - x[i1][1]; - r01[2] = x[i0][2] - x[i1][2]; - domain->minimum_image(r01); - - double r02[3]; - r02[0] = x[i0][0] - x[i2][0]; - r02[1] = x[i0][1] - x[i2][1]; - r02[2] = x[i0][2] - x[i2][2]; - domain->minimum_image(r02); - - double r03[3]; - r03[0] = x[i0][0] - x[i3][0]; - r03[1] = x[i0][1] - x[i3][1]; - r03[2] = x[i0][2] - x[i3][2]; - domain->minimum_image(r03); - - // s01,s02,s03 = distance vec after unconstrained update, with PBC - - double s01[3]; - s01[0] = xshake[i0][0] - xshake[i1][0]; - s01[1] = xshake[i0][1] - xshake[i1][1]; - s01[2] = xshake[i0][2] - xshake[i1][2]; - domain->minimum_image(s01); - - double s02[3]; - s02[0] = xshake[i0][0] - xshake[i2][0]; - s02[1] = xshake[i0][1] - xshake[i2][1]; - s02[2] = xshake[i0][2] - xshake[i2][2]; - domain->minimum_image(s02); - - double s03[3]; - s03[0] = xshake[i0][0] - xshake[i3][0]; - s03[1] = xshake[i0][1] - xshake[i3][1]; - s03[2] = xshake[i0][2] - xshake[i3][2]; - domain->minimum_image(s03); - - // scalar distances between atoms - - double r01sq = r01[0] * r01[0] + r01[1] * r01[1] + r01[2] * r01[2]; - double r02sq = r02[0] * r02[0] + r02[1] * r02[1] + r02[2] * r02[2]; - double r03sq = r03[0] * r03[0] + r03[1] * r03[1] + r03[2] * r03[2]; - double s01sq = s01[0] * s01[0] + s01[1] * s01[1] + s01[2] * s01[2]; - double s02sq = s02[0] * s02[0] + s02[1] * s02[1] + s02[2] * s02[2]; - double s03sq = s03[0] * s03[0] + s03[1] * s03[1] + s03[2] * s03[2]; - - // matrix coeffs and rhs for lamda equations - - if(rmass) { - invmass0 = 1.0 / rmass[i0]; - invmass1 = 1.0 / rmass[i1]; - invmass2 = 1.0 / rmass[i2]; - invmass3 = 1.0 / rmass[i3]; - } else { - invmass0 = 1.0 / mass[type[i0]]; - invmass1 = 1.0 / mass[type[i1]]; - invmass2 = 1.0 / mass[type[i2]]; - invmass3 = 1.0 / mass[type[i3]]; - } - - double a11 = 2.0 * (invmass0 + invmass1) * - (s01[0] * r01[0] + s01[1] * r01[1] + s01[2] * r01[2]); - double a12 = 2.0 * invmass0 * - (s01[0] * r02[0] + s01[1] * r02[1] + s01[2] * r02[2]); - double a13 = 2.0 * invmass0 * - (s01[0] * r03[0] + s01[1] * r03[1] + s01[2] * r03[2]); - double a21 = 2.0 * invmass0 * - (s02[0] * r01[0] + s02[1] * r01[1] + s02[2] * r01[2]); - double a22 = 2.0 * (invmass0 + invmass2) * - (s02[0] * r02[0] + s02[1] * r02[1] + s02[2] * r02[2]); - double a23 = 2.0 * invmass0 * - (s02[0] * r03[0] + s02[1] * r03[1] + s02[2] * r03[2]); - double a31 = 2.0 * invmass0 * - (s03[0] * r01[0] + s03[1] * r01[1] + s03[2] * r01[2]); - double a32 = 2.0 * invmass0 * - (s03[0] * r02[0] + s03[1] * r02[1] + s03[2] * r02[2]); - double a33 = 2.0 * (invmass0 + invmass3) * - (s03[0] * r03[0] + s03[1] * r03[1] + s03[2] * r03[2]); - - // inverse of matrix; - - double determ = a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a32 - - a11 * a23 * a32 - a12 * a21 * a33 - a13 * a22 * a31; - - if(determ == 0.0) error->one(FLERR, "Shake determinant = 0.0"); - - double determinv = 1.0 / determ; - - double a11inv = determinv * (a22 * a33 - a23 * a32); - double a12inv = -determinv * (a12 * a33 - a13 * a32); - double a13inv = determinv * (a12 * a23 - a13 * a22); - double a21inv = -determinv * (a21 * a33 - a23 * a31); - double a22inv = determinv * (a11 * a33 - a13 * a31); - double a23inv = -determinv * (a11 * a23 - a13 * a21); - double a31inv = determinv * (a21 * a32 - a22 * a31); - double a32inv = -determinv * (a11 * a32 - a12 * a31); - double a33inv = determinv * (a11 * a22 - a12 * a21); - - // quadratic correction coeffs - - double r0102 = (r01[0] * r02[0] + r01[1] * r02[1] + r01[2] * r02[2]); - double r0103 = (r01[0] * r03[0] + r01[1] * r03[1] + r01[2] * r03[2]); - double r0203 = (r02[0] * r03[0] + r02[1] * r03[1] + r02[2] * r03[2]); - - double quad1_0101 = (invmass0 + invmass1) * (invmass0 + invmass1) * r01sq; - double quad1_0202 = invmass0 * invmass0 * r02sq; - double quad1_0303 = invmass0 * invmass0 * r03sq; - double quad1_0102 = 2.0 * (invmass0 + invmass1) * invmass0 * r0102; - double quad1_0103 = 2.0 * (invmass0 + invmass1) * invmass0 * r0103; - double quad1_0203 = 2.0 * invmass0 * invmass0 * r0203; - - double quad2_0101 = invmass0 * invmass0 * r01sq; - double quad2_0202 = (invmass0 + invmass2) * (invmass0 + invmass2) * r02sq; - double quad2_0303 = invmass0 * invmass0 * r03sq; - double quad2_0102 = 2.0 * (invmass0 + invmass2) * invmass0 * r0102; - double quad2_0103 = 2.0 * invmass0 * invmass0 * r0103; - double quad2_0203 = 2.0 * (invmass0 + invmass2) * invmass0 * r0203; - - double quad3_0101 = invmass0 * invmass0 * r01sq; - double quad3_0202 = invmass0 * invmass0 * r02sq; - double quad3_0303 = (invmass0 + invmass3) * (invmass0 + invmass3) * r03sq; - double quad3_0102 = 2.0 * invmass0 * invmass0 * r0102; - double quad3_0103 = 2.0 * (invmass0 + invmass3) * invmass0 * r0103; - double quad3_0203 = 2.0 * (invmass0 + invmass3) * invmass0 * r0203; - - // iterate until converged - - double lamda01 = 0.0; - double lamda02 = 0.0; - double lamda03 = 0.0; - int niter = 0; - int done = 0; - - double quad1, quad2, quad3, b1, b2, b3, lamda01_new, lamda02_new, lamda03_new; - - while(!done && niter < max_iter) { - quad1 = quad1_0101 * lamda01 * lamda01 + - quad1_0202 * lamda02 * lamda02 + - quad1_0303 * lamda03 * lamda03 + - quad1_0102 * lamda01 * lamda02 + - quad1_0103 * lamda01 * lamda03 + - quad1_0203 * lamda02 * lamda03; - - quad2 = quad2_0101 * lamda01 * lamda01 + - quad2_0202 * lamda02 * lamda02 + - quad2_0303 * lamda03 * lamda03 + - quad2_0102 * lamda01 * lamda02 + - quad2_0103 * lamda01 * lamda03 + - quad2_0203 * lamda02 * lamda03; - - quad3 = quad3_0101 * lamda01 * lamda01 + - quad3_0202 * lamda02 * lamda02 + - quad3_0303 * lamda03 * lamda03 + - quad3_0102 * lamda01 * lamda02 + - quad3_0103 * lamda01 * lamda03 + - quad3_0203 * lamda02 * lamda03; - - b1 = bond1 * bond1 - s01sq - quad1; - b2 = bond2 * bond2 - s02sq - quad2; - b3 = bond3 * bond3 - s03sq - quad3; - - lamda01_new = a11inv * b1 + a12inv * b2 + a13inv * b3; - lamda02_new = a21inv * b1 + a22inv * b2 + a23inv * b3; - lamda03_new = a31inv * b1 + a32inv * b2 + a33inv * b3; - - done = 1; - - if(fabs(lamda01_new - lamda01) > tolerance) done = 0; - - if(fabs(lamda02_new - lamda02) > tolerance) done = 0; - - if(fabs(lamda03_new - lamda03) > tolerance) done = 0; - - lamda01 = lamda01_new; - lamda02 = lamda02_new; - lamda03 = lamda03_new; - niter++; - } - - // update forces if atom is owned by this processor - - lamda01 = lamda01 / dtfsq; - lamda02 = lamda02 / dtfsq; - lamda03 = lamda03 / dtfsq; - - if(i0 < nlocal) { - f[i0][0] += lamda01 * r01[0] + lamda02 * r02[0] + lamda03 * r03[0]; - f[i0][1] += lamda01 * r01[1] + lamda02 * r02[1] + lamda03 * r03[1]; - f[i0][2] += lamda01 * r01[2] + lamda02 * r02[2] + lamda03 * r03[2]; - } - - if(i1 < nlocal) { - f[i1][0] -= lamda01 * r01[0]; - f[i1][1] -= lamda01 * r01[1]; - f[i1][2] -= lamda01 * r01[2]; - } - - if(i2 < nlocal) { - f[i2][0] -= lamda02 * r02[0]; - f[i2][1] -= lamda02 * r02[1]; - f[i2][2] -= lamda02 * r02[2]; - } - - if(i3 < nlocal) { - f[i3][0] -= lamda03 * r03[0]; - f[i3][1] -= lamda03 * r03[1]; - f[i3][2] -= lamda03 * r03[2]; - } - - if(evflag) { - nlist = 0; - - if(i0 < nlocal) list[nlist++] = i0; - - if(i1 < nlocal) list[nlist++] = i1; - - if(i2 < nlocal) list[nlist++] = i2; - - if(i3 < nlocal) list[nlist++] = i3; - - v[0] = lamda01 * r01[0] * r01[0] + lamda02 * r02[0] * r02[0] + lamda03 * r03[0] * r03[0]; - v[1] = lamda01 * r01[1] * r01[1] + lamda02 * r02[1] * r02[1] + lamda03 * r03[1] * r03[1]; - v[2] = lamda01 * r01[2] * r01[2] + lamda02 * r02[2] * r02[2] + lamda03 * r03[2] * r03[2]; - v[3] = lamda01 * r01[0] * r01[1] + lamda02 * r02[0] * r02[1] + lamda03 * r03[0] * r03[1]; - v[4] = lamda01 * r01[0] * r01[2] + lamda02 * r02[0] * r02[2] + lamda03 * r03[0] * r03[2]; - v[5] = lamda01 * r01[1] * r01[2] + lamda02 * r02[1] * r02[2] + lamda03 * r03[1] * r03[2]; - //if(i0==7271) printf("%lf %lf %lf %lf %lf %lf\n",v[0],v[1],v[2],v[3],v[4],v[5]); - - v_tally(nlist, list, 4.0, v); - } -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::shake3angle(int m) -{ - int nlist, list[3]; - double v[6]; - double invmass0, invmass1, invmass2; - - // local atom IDs and constraint distances - - int i0 = atom->map(shake_atom[m][0]); - int i1 = atom->map(shake_atom[m][1]); - int i2 = atom->map(shake_atom[m][2]); - double bond1 = bond_distance[shake_type[m][0]]; - double bond2 = bond_distance[shake_type[m][1]]; - double bond12 = angle_distance[shake_type[m][2]]; - - // r01,r02,r12 = distance vec between atoms, with PBC - - double r01[3]; - r01[0] = x[i0][0] - x[i1][0]; - r01[1] = x[i0][1] - x[i1][1]; - r01[2] = x[i0][2] - x[i1][2]; - domain->minimum_image(r01); - - double r02[3]; - r02[0] = x[i0][0] - x[i2][0]; - r02[1] = x[i0][1] - x[i2][1]; - r02[2] = x[i0][2] - x[i2][2]; - domain->minimum_image(r02); - - double r12[3]; - r12[0] = x[i1][0] - x[i2][0]; - r12[1] = x[i1][1] - x[i2][1]; - r12[2] = x[i1][2] - x[i2][2]; - domain->minimum_image(r12); - - // s01,s02,s12 = distance vec after unconstrained update, with PBC - - double s01[3]; - s01[0] = xshake[i0][0] - xshake[i1][0]; - s01[1] = xshake[i0][1] - xshake[i1][1]; - s01[2] = xshake[i0][2] - xshake[i1][2]; - domain->minimum_image(s01); - - double s02[3]; - s02[0] = xshake[i0][0] - xshake[i2][0]; - s02[1] = xshake[i0][1] - xshake[i2][1]; - s02[2] = xshake[i0][2] - xshake[i2][2]; - domain->minimum_image(s02); - - double s12[3]; - s12[0] = xshake[i1][0] - xshake[i2][0]; - s12[1] = xshake[i1][1] - xshake[i2][1]; - s12[2] = xshake[i1][2] - xshake[i2][2]; - domain->minimum_image(s12); - - // scalar distances between atoms - - double r01sq = r01[0] * r01[0] + r01[1] * r01[1] + r01[2] * r01[2]; - double r02sq = r02[0] * r02[0] + r02[1] * r02[1] + r02[2] * r02[2]; - double r12sq = r12[0] * r12[0] + r12[1] * r12[1] + r12[2] * r12[2]; - double s01sq = s01[0] * s01[0] + s01[1] * s01[1] + s01[2] * s01[2]; - double s02sq = s02[0] * s02[0] + s02[1] * s02[1] + s02[2] * s02[2]; - double s12sq = s12[0] * s12[0] + s12[1] * s12[1] + s12[2] * s12[2]; - - // matrix coeffs and rhs for lamda equations - - if(rmass) { - invmass0 = 1.0 / rmass[i0]; - invmass1 = 1.0 / rmass[i1]; - invmass2 = 1.0 / rmass[i2]; - } else { - invmass0 = 1.0 / mass[type[i0]]; - invmass1 = 1.0 / mass[type[i1]]; - invmass2 = 1.0 / mass[type[i2]]; - } - - double a11 = 2.0 * (invmass0 + invmass1) * - (s01[0] * r01[0] + s01[1] * r01[1] + s01[2] * r01[2]); - double a12 = 2.0 * invmass0 * - (s01[0] * r02[0] + s01[1] * r02[1] + s01[2] * r02[2]); - double a13 = - 2.0 * invmass1 * - (s01[0] * r12[0] + s01[1] * r12[1] + s01[2] * r12[2]); - double a21 = 2.0 * invmass0 * - (s02[0] * r01[0] + s02[1] * r01[1] + s02[2] * r01[2]); - double a22 = 2.0 * (invmass0 + invmass2) * - (s02[0] * r02[0] + s02[1] * r02[1] + s02[2] * r02[2]); - double a23 = 2.0 * invmass2 * - (s02[0] * r12[0] + s02[1] * r12[1] + s02[2] * r12[2]); - double a31 = - 2.0 * invmass1 * - (s12[0] * r01[0] + s12[1] * r01[1] + s12[2] * r01[2]); - double a32 = 2.0 * invmass2 * - (s12[0] * r02[0] + s12[1] * r02[1] + s12[2] * r02[2]); - double a33 = 2.0 * (invmass1 + invmass2) * - (s12[0] * r12[0] + s12[1] * r12[1] + s12[2] * r12[2]); - - // inverse of matrix - - double determ = a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a32 - - a11 * a23 * a32 - a12 * a21 * a33 - a13 * a22 * a31; - - if(determ == 0.0) error->one(FLERR, "Shake determinant = 0.0"); - - double determinv = 1.0 / determ; - - double a11inv = determinv * (a22 * a33 - a23 * a32); - double a12inv = -determinv * (a12 * a33 - a13 * a32); - double a13inv = determinv * (a12 * a23 - a13 * a22); - double a21inv = -determinv * (a21 * a33 - a23 * a31); - double a22inv = determinv * (a11 * a33 - a13 * a31); - double a23inv = -determinv * (a11 * a23 - a13 * a21); - double a31inv = determinv * (a21 * a32 - a22 * a31); - double a32inv = -determinv * (a11 * a32 - a12 * a31); - double a33inv = determinv * (a11 * a22 - a12 * a21); - - // quadratic correction coeffs - - double r0102 = (r01[0] * r02[0] + r01[1] * r02[1] + r01[2] * r02[2]); - double r0112 = (r01[0] * r12[0] + r01[1] * r12[1] + r01[2] * r12[2]); - double r0212 = (r02[0] * r12[0] + r02[1] * r12[1] + r02[2] * r12[2]); - - double quad1_0101 = (invmass0 + invmass1) * (invmass0 + invmass1) * r01sq; - double quad1_0202 = invmass0 * invmass0 * r02sq; - double quad1_1212 = invmass1 * invmass1 * r12sq; - double quad1_0102 = 2.0 * (invmass0 + invmass1) * invmass0 * r0102; - double quad1_0112 = - 2.0 * (invmass0 + invmass1) * invmass1 * r0112; - double quad1_0212 = - 2.0 * invmass0 * invmass1 * r0212; - - double quad2_0101 = invmass0 * invmass0 * r01sq; - double quad2_0202 = (invmass0 + invmass2) * (invmass0 + invmass2) * r02sq; - double quad2_1212 = invmass2 * invmass2 * r12sq; - double quad2_0102 = 2.0 * (invmass0 + invmass2) * invmass0 * r0102; - double quad2_0112 = 2.0 * invmass0 * invmass2 * r0112; - double quad2_0212 = 2.0 * (invmass0 + invmass2) * invmass2 * r0212; - - double quad3_0101 = invmass1 * invmass1 * r01sq; - double quad3_0202 = invmass2 * invmass2 * r02sq; - double quad3_1212 = (invmass1 + invmass2) * (invmass1 + invmass2) * r12sq; - double quad3_0102 = - 2.0 * invmass1 * invmass2 * r0102; - double quad3_0112 = - 2.0 * (invmass1 + invmass2) * invmass1 * r0112; - double quad3_0212 = 2.0 * (invmass1 + invmass2) * invmass2 * r0212; - - // iterate until converged - - double lamda01 = 0.0; - double lamda02 = 0.0; - double lamda12 = 0.0; - int niter = 0; - int done = 0; - - double quad1, quad2, quad3, b1, b2, b3, lamda01_new, lamda02_new, lamda12_new; - - while(!done && niter < max_iter) { - quad1 = quad1_0101 * lamda01 * lamda01 + - quad1_0202 * lamda02 * lamda02 + - quad1_1212 * lamda12 * lamda12 + - quad1_0102 * lamda01 * lamda02 + - quad1_0112 * lamda01 * lamda12 + - quad1_0212 * lamda02 * lamda12; - - quad2 = quad2_0101 * lamda01 * lamda01 + - quad2_0202 * lamda02 * lamda02 + - quad2_1212 * lamda12 * lamda12 + - quad2_0102 * lamda01 * lamda02 + - quad2_0112 * lamda01 * lamda12 + - quad2_0212 * lamda02 * lamda12; - - quad3 = quad3_0101 * lamda01 * lamda01 + - quad3_0202 * lamda02 * lamda02 + - quad3_1212 * lamda12 * lamda12 + - quad3_0102 * lamda01 * lamda02 + - quad3_0112 * lamda01 * lamda12 + - quad3_0212 * lamda02 * lamda12; - - b1 = bond1 * bond1 - s01sq - quad1; - b2 = bond2 * bond2 - s02sq - quad2; - b3 = bond12 * bond12 - s12sq - quad3; - - lamda01_new = a11inv * b1 + a12inv * b2 + a13inv * b3; - lamda02_new = a21inv * b1 + a22inv * b2 + a23inv * b3; - lamda12_new = a31inv * b1 + a32inv * b2 + a33inv * b3; - - done = 1; - - if(fabs(lamda01_new - lamda01) > tolerance) done = 0; - - if(fabs(lamda02_new - lamda02) > tolerance) done = 0; - - if(fabs(lamda12_new - lamda12) > tolerance) done = 0; - - lamda01 = lamda01_new; - lamda02 = lamda02_new; - lamda12 = lamda12_new; - niter++; - } - - // update forces if atom is owned by this processor - - lamda01 = lamda01 / dtfsq; - lamda02 = lamda02 / dtfsq; - lamda12 = lamda12 / dtfsq; - - if(i0 < nlocal) { - f[i0][0] += lamda01 * r01[0] + lamda02 * r02[0]; - f[i0][1] += lamda01 * r01[1] + lamda02 * r02[1]; - f[i0][2] += lamda01 * r01[2] + lamda02 * r02[2]; - } - - if(i1 < nlocal) { - f[i1][0] -= lamda01 * r01[0] - lamda12 * r12[0]; - f[i1][1] -= lamda01 * r01[1] - lamda12 * r12[1]; - f[i1][2] -= lamda01 * r01[2] - lamda12 * r12[2]; - } - - if(i2 < nlocal) { - f[i2][0] -= lamda02 * r02[0] + lamda12 * r12[0]; - f[i2][1] -= lamda02 * r02[1] + lamda12 * r12[1]; - f[i2][2] -= lamda02 * r02[2] + lamda12 * r12[2]; - } - - if(evflag) { - nlist = 0; - - if(i0 < nlocal) list[nlist++] = i0; - - if(i1 < nlocal) list[nlist++] = i1; - - if(i2 < nlocal) list[nlist++] = i2; - - v[0] = lamda01 * r01[0] * r01[0] + lamda02 * r02[0] * r02[0] + lamda12 * r12[0] * r12[0]; - v[1] = lamda01 * r01[1] * r01[1] + lamda02 * r02[1] * r02[1] + lamda12 * r12[1] * r12[1]; - v[2] = lamda01 * r01[2] * r01[2] + lamda02 * r02[2] * r02[2] + lamda12 * r12[2] * r12[2]; - v[3] = lamda01 * r01[0] * r01[1] + lamda02 * r02[0] * r02[1] + lamda12 * r12[0] * r12[1]; - v[4] = lamda01 * r01[0] * r01[2] + lamda02 * r02[0] * r02[2] + lamda12 * r12[0] * r12[2]; - v[5] = lamda01 * r01[1] * r01[2] + lamda02 * r02[1] * r02[2] + lamda12 * r12[1] * r12[2]; - - v_tally(nlist, list, 3.0, v); - } -} - -/* ---------------------------------------------------------------------- - print-out bond & angle statistics -------------------------------------------------------------------------- */ - -void FixShakeCuda::stats() -{ - int i, j, m, n, iatom, jatom, katom; - double delx, dely, delz; - double r, r1, r2, r3, angle; - - // zero out accumulators - - int nb = atom->nbondtypes + 1; - int na = atom->nangletypes + 1; - - for(i = 0; i < nb; i++) { - b_count[i] = 0; - b_ave[i] = b_max[i] = 0.0; - b_min[i] = BIG; - } - - for(i = 0; i < na; i++) { - a_count[i] = 0; - a_ave[i] = a_max[i] = 0.0; - a_min[i] = BIG; - } - - // log stats for each bond & angle - // OK to double count since are just averaging - - double** x = atom->x; - int nlocal = atom->nlocal; - - for(i = 0; i < nlocal; i++) { - if(shake_flag[i] == 0) continue; - - // bond stats - - n = shake_flag[i]; - - if(n == 1) n = 3; - - iatom = atom->map(shake_atom[i][0]); - - for(j = 1; j < n; j++) { - jatom = atom->map(shake_atom[i][j]); - delx = x[iatom][0] - x[jatom][0]; - dely = x[iatom][1] - x[jatom][1]; - delz = x[iatom][2] - x[jatom][2]; - domain->minimum_image(delx, dely, delz); - r = sqrt(delx * delx + dely * dely + delz * delz); - - m = shake_type[i][j - 1]; - b_count[m]++; - b_ave[m] += r; - b_max[m] = MAX(b_max[m], r); - b_min[m] = MIN(b_min[m], r); - } - - // angle stats - - if(shake_flag[i] == 1) { - iatom = atom->map(shake_atom[i][0]); - jatom = atom->map(shake_atom[i][1]); - katom = atom->map(shake_atom[i][2]); - - delx = x[iatom][0] - x[jatom][0]; - dely = x[iatom][1] - x[jatom][1]; - delz = x[iatom][2] - x[jatom][2]; - domain->minimum_image(delx, dely, delz); - r1 = sqrt(delx * delx + dely * dely + delz * delz); - - delx = x[iatom][0] - x[katom][0]; - dely = x[iatom][1] - x[katom][1]; - delz = x[iatom][2] - x[katom][2]; - domain->minimum_image(delx, dely, delz); - r2 = sqrt(delx * delx + dely * dely + delz * delz); - - delx = x[jatom][0] - x[katom][0]; - dely = x[jatom][1] - x[katom][1]; - delz = x[jatom][2] - x[katom][2]; - domain->minimum_image(delx, dely, delz); - r3 = sqrt(delx * delx + dely * dely + delz * delz); - - angle = acos((r1 * r1 + r2 * r2 - r3 * r3) / (2.0 * r1 * r2)); - angle *= 180.0 / MY_PI; - m = shake_type[i][2]; - a_count[m]++; - a_ave[m] += angle; - a_max[m] = MAX(a_max[m], angle); - a_min[m] = MIN(a_min[m], angle); - } - } - - // sum across all procs - - MPI_Allreduce(b_count, b_count_all, nb, MPI_INT, MPI_SUM, world); - MPI_Allreduce(b_ave, b_ave_all, nb, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(b_max, b_max_all, nb, MPI_DOUBLE, MPI_MAX, world); - MPI_Allreduce(b_min, b_min_all, nb, MPI_DOUBLE, MPI_MIN, world); - - MPI_Allreduce(a_count, a_count_all, na, MPI_INT, MPI_SUM, world); - MPI_Allreduce(a_ave, a_ave_all, na, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(a_max, a_max_all, na, MPI_DOUBLE, MPI_MAX, world); - MPI_Allreduce(a_min, a_min_all, na, MPI_DOUBLE, MPI_MIN, world); - - // print stats only for non-zero counts - - if(me == 0) { - if(screen) { - fprintf(screen, - "SHAKE stats (type/ave/delta) on step " BIGINT_FORMAT "\n", - update->ntimestep); - - for(i = 1; i < nb; i++) - if(b_count_all[i]) - fprintf(screen, " %d %g %g\n", i, - b_ave_all[i] / b_count_all[i], b_max_all[i] - b_min_all[i]); - - for(i = 1; i < na; i++) - if(a_count_all[i]) - fprintf(screen, " %d %g %g\n", i, - a_ave_all[i] / a_count_all[i], a_max_all[i] - a_min_all[i]); - } - - if(logfile) { - fprintf(logfile, - "SHAKE stats (type/ave/delta) on step " BIGINT_FORMAT "\n", - update->ntimestep); - - for(i = 0; i < nb; i++) - if(b_count_all[i]) - fprintf(logfile, " %d %g %g\n", i, - b_ave_all[i] / b_count_all[i], b_max_all[i] - b_min_all[i]); - - for(i = 0; i < na; i++) - if(a_count_all[i]) - fprintf(logfile, " %d %g %g\n", i, - a_ave_all[i] / a_count_all[i], a_max_all[i] - a_min_all[i]); - } - } - - // next timestep for stats - - next_output += output_every; -} - -/* ---------------------------------------------------------------------- - find a bond between global tags n1 and n2 stored with local atom i - return -1 if don't find it - return bond index if do find it -------------------------------------------------------------------------- */ - -int FixShakeCuda::bondfind(int i, int n1, int n2) -{ - int* tag = atom->tag; - int** bond_atom = atom->bond_atom; - int nbonds = atom->num_bond[i]; - - int m; - - for(m = 0; m < nbonds; m++) { - if(n1 == tag[i] && n2 == bond_atom[i][m]) break; - - if(n1 == bond_atom[i][m] && n2 == tag[i]) break; - } - - if(m < nbonds) return m; - - return -1; -} - -/* ---------------------------------------------------------------------- - find an angle with global end atoms n1 and n2 stored with local atom i - return -1 if don't find it - return angle index if do find it -------------------------------------------------------------------------- */ - -int FixShakeCuda::anglefind(int i, int n1, int n2) -{ - int** angle_atom1 = atom->angle_atom1; - int** angle_atom3 = atom->angle_atom3; - int nangles = atom->num_angle[i]; - - int m; - - for(m = 0; m < nangles; m++) { - if(n1 == angle_atom1[i][m] && n2 == angle_atom3[i][m]) break; - - if(n1 == angle_atom3[i][m] && n2 == angle_atom1[i][m]) break; - } - - if(m < nangles) return m; - - return -1; -} - -/* ---------------------------------------------------------------------- - memory usage of local atom-based arrays -------------------------------------------------------------------------- */ - -double FixShakeCuda::memory_usage() -{ - int nmax = atom->nmax; - double bytes = nmax * sizeof(int); - bytes += nmax * 4 * sizeof(int); - bytes += nmax * 3 * sizeof(int); - bytes += nmax * 3 * sizeof(double); - bytes += maxvatom * 6 * sizeof(double); - return bytes; -} - -/* ---------------------------------------------------------------------- - allocate local atom-based arrays -------------------------------------------------------------------------- */ - -void FixShakeCuda::grow_arrays(int nmax) -{ - memory->grow(shake_flag, nmax, "shake:shake_flag"); - memory->grow(shake_atom, nmax, 4, "shake:shake_atom"); - memory->grow(shake_type, nmax, 3, "shake:shake_type"); - memory->destroy(xshake); - memory->create(xshake, nmax, 3, "shake:xshake"); - - delete cu_shake_flag; - cu_shake_flag = new cCudaData (shake_flag, nmax); - delete cu_shake_atom; - cu_shake_atom = new cCudaData ((int*)shake_atom, nmax, 4); - delete cu_shake_type; - cu_shake_type = new cCudaData ((int*)shake_type, nmax, 3); - delete cu_xshake; - cu_xshake = new cCudaData ((double*)xshake, nmax, 3); - cu_shake_flag->upload(); - cu_shake_atom->upload(); - cu_shake_type->upload(); - - if(cu_bond_distance) - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); -} - -/* ---------------------------------------------------------------------- - copy values within local atom-based arrays -------------------------------------------------------------------------- */ - -void FixShakeCuda::copy_arrays(int i, int j, int delflag) -{ - int flag = shake_flag[j] = shake_flag[i]; - - if(flag == 1) { - shake_atom[j][0] = shake_atom[i][0]; - shake_atom[j][1] = shake_atom[i][1]; - shake_atom[j][2] = shake_atom[i][2]; - shake_type[j][0] = shake_type[i][0]; - shake_type[j][1] = shake_type[i][1]; - shake_type[j][2] = shake_type[i][2]; - } else if(flag == 2) { - shake_atom[j][0] = shake_atom[i][0]; - shake_atom[j][1] = shake_atom[i][1]; - shake_type[j][0] = shake_type[i][0]; - } else if(flag == 3) { - shake_atom[j][0] = shake_atom[i][0]; - shake_atom[j][1] = shake_atom[i][1]; - shake_atom[j][2] = shake_atom[i][2]; - shake_type[j][0] = shake_type[i][0]; - shake_type[j][1] = shake_type[i][1]; - } else if(flag == 4) { - shake_atom[j][0] = shake_atom[i][0]; - shake_atom[j][1] = shake_atom[i][1]; - shake_atom[j][2] = shake_atom[i][2]; - shake_atom[j][3] = shake_atom[i][3]; - shake_type[j][0] = shake_type[i][0]; - shake_type[j][1] = shake_type[i][1]; - shake_type[j][2] = shake_type[i][2]; - } -} - -/* ---------------------------------------------------------------------- - initialize one atom's array values, called when atom is created -------------------------------------------------------------------------- */ - -void FixShakeCuda::set_arrays(int i) -{ - shake_flag[i] = 0; -} - -/* ---------------------------------------------------------------------- - pack values in local atom-based arrays for exchange with another proc -------------------------------------------------------------------------- */ - -int FixShakeCuda::pack_exchange(int i, double* buf) -{ - int m = 0; - buf[m++] = shake_flag[i]; - int flag = shake_flag[i]; - - if(flag == 1) { - buf[m++] = shake_atom[i][0]; - buf[m++] = shake_atom[i][1]; - buf[m++] = shake_atom[i][2]; - buf[m++] = shake_type[i][0]; - buf[m++] = shake_type[i][1]; - buf[m++] = shake_type[i][2]; - } else if(flag == 2) { - buf[m++] = shake_atom[i][0]; - buf[m++] = shake_atom[i][1]; - buf[m++] = shake_type[i][0]; - } else if(flag == 3) { - buf[m++] = shake_atom[i][0]; - buf[m++] = shake_atom[i][1]; - buf[m++] = shake_atom[i][2]; - buf[m++] = shake_type[i][0]; - buf[m++] = shake_type[i][1]; - } else if(flag == 4) { - buf[m++] = shake_atom[i][0]; - buf[m++] = shake_atom[i][1]; - buf[m++] = shake_atom[i][2]; - buf[m++] = shake_atom[i][3]; - buf[m++] = shake_type[i][0]; - buf[m++] = shake_type[i][1]; - buf[m++] = shake_type[i][2]; - } - - return m; -} - -/* ---------------------------------------------------------------------- - unpack values in local atom-based arrays from exchange with another proc -------------------------------------------------------------------------- */ - -int FixShakeCuda::unpack_exchange(int nlocal, double* buf) -{ - int m = 0; - int flag = shake_flag[nlocal] = static_cast(buf[m++]); - - if(flag == 1) { - shake_atom[nlocal][0] = static_cast(buf[m++]); - shake_atom[nlocal][1] = static_cast(buf[m++]); - shake_atom[nlocal][2] = static_cast(buf[m++]); - shake_type[nlocal][0] = static_cast(buf[m++]); - shake_type[nlocal][1] = static_cast(buf[m++]); - shake_type[nlocal][2] = static_cast(buf[m++]); - } else if(flag == 2) { - shake_atom[nlocal][0] = static_cast(buf[m++]); - shake_atom[nlocal][1] = static_cast(buf[m++]); - shake_type[nlocal][0] = static_cast(buf[m++]); - } else if(flag == 3) { - shake_atom[nlocal][0] = static_cast(buf[m++]); - shake_atom[nlocal][1] = static_cast(buf[m++]); - shake_atom[nlocal][2] = static_cast(buf[m++]); - shake_type[nlocal][0] = static_cast(buf[m++]); - shake_type[nlocal][1] = static_cast(buf[m++]); - } else if(flag == 4) { - shake_atom[nlocal][0] = static_cast(buf[m++]); - shake_atom[nlocal][1] = static_cast(buf[m++]); - shake_atom[nlocal][2] = static_cast(buf[m++]); - shake_atom[nlocal][3] = static_cast(buf[m++]); - shake_type[nlocal][0] = static_cast(buf[m++]); - shake_type[nlocal][1] = static_cast(buf[m++]); - shake_type[nlocal][2] = static_cast(buf[m++]); - } - - return m; -} - -/* ---------------------------------------------------------------------- - enforce SHAKE constraints from rRESPA - prediction portion is different than Verlet - rRESPA updating of atom coords is done with full v, but only portions of f -------------------------------------------------------------------------- */ -#if 0 -void FixShakeCuda::post_force_respa(int vflag, int ilevel, int iloop) -{ - // call stats only on outermost level - - if(ilevel == nlevels_respa - 1 && update->ntimestep == next_output) stats(); - - // perform SHAKE on every loop iteration of every rRESPA level - // except last loop iteration of inner levels - - if(ilevel < nlevels_respa - 1 && iloop == loop_respa[ilevel] - 1) return; - - // xshake = atom coords after next x update in innermost loop - // depends on rRESPA level - // for levels > 0 this includes more than one velocity update - // xshake = predicted position from call to this routine at level N = - // x + dt0 (v + dtN/m fN + 1/2 dt(N-1)/m f(N-1) + ... + 1/2 dt0/m f0) - - double** *f_level = ((FixRespa*) modify->fix[ifix_respa])->f_level; - dtfsq = dtf_inner * step_respa[ilevel]; - - double invmass, dtfmsq; - int jlevel; - - if(rmass) { - for(int i = 0; i < nlocal; i++) { - if(shake_flag[i]) { - invmass = 1.0 / rmass[i]; - dtfmsq = dtfsq * invmass; - xshake[i][0] = x[i][0] + dtv * v[i][0] + dtfmsq * f[i][0]; - xshake[i][1] = x[i][1] + dtv * v[i][1] + dtfmsq * f[i][1]; - xshake[i][2] = x[i][2] + dtv * v[i][2] + dtfmsq * f[i][2]; - - for(jlevel = 0; jlevel < ilevel; jlevel++) { - dtfmsq = dtf_innerhalf * step_respa[jlevel] * invmass; - xshake[i][0] += dtfmsq * f_level[i][jlevel][0]; - xshake[i][1] += dtfmsq * f_level[i][jlevel][1]; - xshake[i][2] += dtfmsq * f_level[i][jlevel][2]; - } - } else xshake[i][2] = xshake[i][1] = xshake[i][0] = 0.0; - } - - } else { - for(int i = 0; i < nlocal; i++) { - if(shake_flag[i]) { - invmass = 1.0 / mass[type[i]]; - dtfmsq = dtfsq * invmass; - xshake[i][0] = x[i][0] + dtv * v[i][0] + dtfmsq * f[i][0]; - xshake[i][1] = x[i][1] + dtv * v[i][1] + dtfmsq * f[i][1]; - xshake[i][2] = x[i][2] + dtv * v[i][2] + dtfmsq * f[i][2]; - - for(jlevel = 0; jlevel < ilevel; jlevel++) { - dtfmsq = dtf_innerhalf * step_respa[jlevel] * invmass; - xshake[i][0] += dtfmsq * f_level[i][jlevel][0]; - xshake[i][1] += dtfmsq * f_level[i][jlevel][1]; - xshake[i][2] += dtfmsq * f_level[i][jlevel][2]; - } - } else xshake[i][2] = xshake[i][1] = xshake[i][0] = 0.0; - } - } - - // communicate results if necessary - - if(nprocs > 1) comm->forward_comm_fix(this); - - // virial setup - - if(vflag) v_setup(vflag); - else evflag = 0; - - // loop over clusters - - int m; - - for(int i = 0; i < nlist; i++) { - m = list[i]; - - if(shake_flag[m] == 2) shake2(m); - else if(shake_flag[m] == 3) shake3(m); - else if(shake_flag[m] == 4) shake4(m); - else shake3angle(m); - } -} -#endif - -/* ---------------------------------------------------------------------- */ - -int FixShakeCuda::pack_forward_comm(int n, int* list, double* buf, - int pbc_flag, int* pbc) -{ - if(cuda->finished_setup) { - int iswap = *list; - - if(iswap < 0) { - iswap = -iswap - 1; - int first = ((int*) buf)[0]; - Cuda_FixShakeCuda_PackComm_Self(&cuda->shared_data, n, iswap, first, pbc, pbc_flag); - } else - Cuda_FixShakeCuda_PackComm(&cuda->shared_data, n, iswap, (void*) buf, pbc, pbc_flag); - - return 3*n; - } - - int i, j, m; - double dx, dy, dz; - - m = 0; - - if(pbc_flag == 0) { - for(i = 0; i < n; i++) { - j = list[i]; - buf[m++] = xshake[j][0]; - buf[m++] = xshake[j][1]; - buf[m++] = xshake[j][2]; - } - } else { - if(domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - - for(i = 0; i < n; i++) { - j = list[i]; - buf[m++] = xshake[j][0] + dx; - buf[m++] = xshake[j][1] + dy; - buf[m++] = xshake[j][2] + dz; - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::unpack_forward_comm(int n, int first, double* buf) -{ - if(cuda->finished_setup) { - Cuda_FixShakeCuda_UnpackComm(&cuda->shared_data, n, first, (void*)buf); - return; - } - - int i, m, last; - - m = 0; - last = first + n; - - for(i = first; i < last; i++) { - xshake[i][0] = buf[m++]; - xshake[i][1] = buf[m++]; - xshake[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void FixShakeCuda::reset_dt() -{ - if(strstr(update->integrate_style, "verlet")) { - dtv = update->dt; - dtfsq = update->dt * update->dt * force->ftm2v; - } else { - dtv = step_respa[0]; - dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; - dtf_inner = step_respa[0] * force->ftm2v; - } - - if(cu_shake_atom) - Cuda_FixShakeCuda_Init(&cuda->shared_data, dtv, dtfsq, - cu_shake_flag->dev_data(), cu_shake_atom->dev_data(), cu_shake_type->dev_data(), cu_xshake->dev_data(), - cu_bond_distance->dev_data(), cu_angle_distance->dev_data(), cu_virial->dev_data(), - max_iter, tolerance); -} diff --git a/src/USER-CUDA/fix_shake_cuda.h b/src/USER-CUDA/fix_shake_cuda.h deleted file mode 100644 index 577ea1daa4..0000000000 --- a/src/USER-CUDA/fix_shake_cuda.h +++ /dev/null @@ -1,130 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(shake/cuda,FixShakeCuda) - -#else - -#ifndef LMP_FIX_SHAKE_CUDA_H -#define LMP_FIX_SHAKE_CUDA_H - -#include "fix.h" -#include "cuda_data.h" -#include "cuda_precision.h" - -namespace LAMMPS_NS { - -class FixShakeCuda : public Fix { - public: - FixShakeCuda(class LAMMPS *, int, char **); - ~FixShakeCuda(); - int setmask(); - void init(); - void setup(int); - void pre_neighbor(); - void post_force(int); - //void post_force_respa(int, int, int); - - double memory_usage(); - void grow_arrays(int); - void copy_arrays(int, int, int); - void set_arrays(int); - int pack_exchange(int, double *); - int unpack_exchange(int, double *); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); - - int dof(int); - void reset_dt(); - - double time_postforce; - private: - class Cuda *cuda; - int me,nprocs; - double tolerance; // SHAKE tolerance - int max_iter; // max # of SHAKE iterations - int output_every; // SHAKE stat output every so often - int next_output; // timestep for next output - - // settings from input command - int *bond_flag,*angle_flag; // bond/angle types to constrain - int *type_flag; // constrain bonds to these types - double *mass_list; // constrain bonds to these masses - int nmass; // # of masses in mass_list - bool neighbor_step; // was neighboring done in this step -> need to run the Cuda_FixShake_Init - - double *bond_distance,*angle_distance; // constraint distances - cCudaData* cu_bond_distance; - cCudaData* cu_angle_distance; - - int ifix_respa; // rRESPA fix needed by SHAKE - int nlevels_respa; // copies of needed rRESPA variables - int *loop_respa; - double *step_respa; - - double **x,**v,**f; // local ptrs to atom class quantities - double *mass,*rmass; - int *type; - int nlocal; - // atom-based arrays - int *shake_flag; // 0 if atom not in SHAKE cluster - // 1 = size 3 angle cluster - // 2,3,4 = size of bond-only cluster - int **shake_atom; // global IDs of atoms in cluster - // central atom is 1st - // lowest global ID is 1st for size 2 - - int **shake_type; // bondtype of each bond in cluster - // for angle cluster, 3rd value - // is angletype - double **xshake; // unconstrained atom coords - cCudaData* cu_shake_flag; - cCudaData* cu_shake_atom; - cCudaData* cu_shake_type; - cCudaData* cu_xshake; - cCudaData* cu_list; - cCudaData* cu_virial; - - double dtv,dtfsq; // timesteps for trial move - double dtf_inner,dtf_innerhalf; // timesteps for rRESPA trial move - - int *list; // list of clusters to SHAKE - int nlist,maxlist; // size and max-size of list - - // stat quantities - int *b_count,*b_count_all; // counts for each bond type - double *b_ave,*b_max,*b_min; // ave/max/min dist for each bond type - double *b_ave_all,*b_max_all,*b_min_all; // MPI summing arrays - int *a_count,*a_count_all; // ditto for angle types - double *a_ave,*a_max,*a_min; - double *a_ave_all,*a_max_all,*a_min_all; - - void find_clusters(); - void swap_clusters(int i,int j); - int masscheck(double); - void unconstrained_update(); - void shake2(int); - void shake3(int); - void shake4(int); - void shake3angle(int); - void stats(); - int bondfind(int, int, int); - int anglefind(int, int, int); -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_temp_berendsen_cuda.cpp b/src/USER-CUDA/fix_temp_berendsen_cuda.cpp deleted file mode 100644 index ee08aa3462..0000000000 --- a/src/USER-CUDA/fix_temp_berendsen_cuda.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_temp_berendsen_cuda.h" -#include "fix_temp_berendsen_cuda_cu.h" -#include "atom.h" -#include "force.h" -#include "group.h" -#include "update.h" -#include "comm.h" -#include "modify.h" -#include "compute.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -enum{NOBIAS,BIAS}; - -/* ---------------------------------------------------------------------- */ - -FixTempBerendsenCuda::FixTempBerendsenCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg != 6) error->all(FLERR,"Illegal fix temp/berendsen/cuda command"); - - // Berendsen thermostat should be applied every step - - nevery = 1; - - t_start = force->numeric(FLERR,arg[3]); - t_stop = force->numeric(FLERR,arg[4]); - t_period = force->numeric(FLERR,arg[5]); - - // error checks - - if (t_period <= 0.0) error->all(FLERR,"Fix temp/berendsen/cuda period must be > 0.0"); - - // create a new compute temp style - // id = fix-ID + temp, compute group = fix group - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[3]; - newarg[0] = id_temp; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "temp/cuda"; - modify->add_compute(3,newarg); - delete [] newarg; - tflag = 1; -} - -/* ---------------------------------------------------------------------- */ - -FixTempBerendsenCuda::~FixTempBerendsenCuda() -{ - // delete temperature if fix created it - - if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; -} - -/* ---------------------------------------------------------------------- */ - -int FixTempBerendsenCuda::setmask() -{ - int mask = 0; - mask |= END_OF_STEP_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixTempBerendsenCuda::init() -{ - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix temp/berendsen/cuda does not exist"); - temperature = modify->compute[icompute]; - if(not temperature->cudable) - error->warning(FLERR,"Fix temp/berendsen/cuda uses non cudable temperature compute"); - if (temperature->tempbias) which = BIAS; - else which = NOBIAS; - - //temperature->init(); //not in original berendsen possible error? -} - -/* ---------------------------------------------------------------------- */ - -void FixTempBerendsenCuda::end_of_step() -{ - double t_current; - if(not temperature->cudable) {cuda->cu_x->download();cuda->cu_v->download();} - t_current = temperature->compute_scalar(); - if (t_current == 0.0) - error->all(FLERR,"Computed temperature for fix temp/berendsen/cuda cannot be 0.0"); - - double delta = update->ntimestep - update->beginstep; - delta /= update->endstep - update->beginstep; - t_target = t_start + delta * (t_stop-t_start); - - // rescale velocities by lamda - - double lamda = sqrt(1.0 + update->dt/t_period*(t_target/t_current - 1.0)); - - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - if (which == NOBIAS) { - Cuda_FixTempBerendsenCuda_EndOfStep(&cuda->shared_data, groupbit,lamda); - - } else { - if(not temperature->cudable) - { - cuda->cu_x->download();cuda->cu_v->download(); - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); - v[i][0] *= lamda; - v[i][1] *= lamda; - v[i][2] *= lamda; - temperature->restore_bias(i,v[i]); - } - } - cuda->cu_v->upload(); - } - else - { - temperature->remove_bias_all(); - Cuda_FixTempBerendsenCuda_EndOfStep(&cuda->shared_data, groupbit,lamda); - temperature->restore_bias_all(); - } - } - - -} - -/* ---------------------------------------------------------------------- */ - -int FixTempBerendsenCuda::modify_param(int narg, char **arg) -{ - if (strcmp(arg[0],"temp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (tflag) { - modify->delete_compute(id_temp); - tflag = 0; - } - delete [] id_temp; - int n = strlen(arg[1]) + 1; - id_temp = new char[n]; - strcpy(id_temp,arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - - if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); - if (temperature->igroup != igroup && comm->me == 0) - error->warning(FLERR,"Group for fix_modify temp != fix group"); - return 2; - } - return 0; -} - - -/* ---------------------------------------------------------------------- */ - -void FixTempBerendsenCuda::reset_target(double t_new) -{ - t_start = t_stop = t_new; -} diff --git a/src/USER-CUDA/fix_temp_berendsen_cuda.h b/src/USER-CUDA/fix_temp_berendsen_cuda.h deleted file mode 100644 index 610e5421e5..0000000000 --- a/src/USER-CUDA/fix_temp_berendsen_cuda.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ -#ifdef FIX_CLASS - -FixStyle(temp/berendsen/cuda,FixTempBerendsenCuda) - -#else - -#ifndef LMP_FIX_TEMP_BERENDSEN_CUDA_H -#define LMP_FIX_TEMP_BERENDSEN_CUDA_H - -#include "fix.h" - -namespace LAMMPS_NS { -class FixTempBerendsenCuda : public Fix { - public: - FixTempBerendsenCuda(class LAMMPS *, int, char **); - ~FixTempBerendsenCuda(); - int setmask(); - void init(); - void end_of_step(); - int modify_param(int, char **); - void reset_target(double); - - private: - class Cuda *cuda; - int which; - double t_start,t_stop,t_target,t_period; - - char *id_temp; - class Compute *temperature; - int tflag; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_temp_rescale_cuda.cpp b/src/USER-CUDA/fix_temp_rescale_cuda.cpp deleted file mode 100644 index a0ebb47d12..0000000000 --- a/src/USER-CUDA/fix_temp_rescale_cuda.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_temp_rescale_cuda.h" -#include "fix_temp_rescale_cuda_cu.h" -#include "atom.h" -#include "force.h" -#include "group.h" -#include "update.h" -#include "domain.h" -#include "region.h" -#include "comm.h" -#include "modify.h" -#include "compute.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -enum{NOBIAS,BIAS}; - -/* ---------------------------------------------------------------------- */ - -FixTempRescaleCuda::FixTempRescaleCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg < 8) error->all(FLERR,"Illegal fix temp/rescale/cuda command"); - - nevery = force->inumeric(FLERR,arg[3]); - if (nevery <= 0) error->all(FLERR,"Illegal fix temp/rescale/cuda command"); - - scalar_flag = 1; - global_freq = nevery; - extscalar = 1; - - t_start = force->numeric(FLERR,arg[4]); - t_stop = force->numeric(FLERR,arg[5]); - t_window = force->numeric(FLERR,arg[6]); - fraction = force->numeric(FLERR,arg[7]); - - // create a new compute temp - // id = fix-ID + temp, compute group = fix group - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[6]; - newarg[0] = id_temp; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "temp/cuda"; - modify->add_compute(3,newarg); - delete [] newarg; - tflag = 1; - - energy = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -FixTempRescaleCuda::~FixTempRescaleCuda() -{ - // delete temperature if fix created it - - if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; -} - -/* ---------------------------------------------------------------------- */ - -int FixTempRescaleCuda::setmask() -{ - int mask = 0; - mask |= END_OF_STEP_CUDA; - mask |= THERMO_ENERGY_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleCuda::init() -{ - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix temp/rescale/cuda does not exist"); - temperature = modify->compute[icompute]; - if(not temperature->cudable) - error->warning(FLERR,"Fix temp/rescale/cuda uses non cudable temperature compute"); - if (temperature->tempbias) which = BIAS; - else which = NOBIAS; -} - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleCuda::end_of_step() -{ - double t_current; - if(not temperature->cudable) {cuda->cu_x->download();cuda->cu_v->download();} - t_current = temperature->compute_scalar(); - if (t_current == 0.0) - error->all(FLERR,"Computed temperature for fix temp/rescale/cuda cannot be 0.0"); - - double delta = update->ntimestep - update->beginstep; - delta /= update->endstep - update->beginstep; - double t_target = t_start + delta * (t_stop-t_start); - - // rescale velocity of appropriate atoms if outside window - - if (fabs(t_current-t_target) > t_window) { - t_target = t_current - fraction*(t_current-t_target); - double factor = sqrt(t_target/t_current); - double efactor = 0.5 * force->boltz * temperature->dof; - - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - if (which == NOBIAS) { - energy += (t_current-t_target) * efactor; - - Cuda_FixTempRescaleCuda_EndOfStep(&cuda->shared_data, groupbit,factor); - - } else if (which == BIAS) { - energy += (t_current-t_target) * efactor; - if(not temperature->cudable) - { - cuda->cu_x->download();cuda->cu_v->download(); - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); - v[i][0] *= factor; - v[i][1] *= factor; - v[i][2] *= factor; - temperature->restore_bias(i,v[i]); - } - } - cuda->cu_v->upload(); - } - else - { - temperature->remove_bias_all(); - Cuda_FixTempRescaleCuda_EndOfStep(&cuda->shared_data, groupbit,factor); - temperature->restore_bias_all(); - } - } - - } -} - -/* ---------------------------------------------------------------------- */ - -int FixTempRescaleCuda::modify_param(int narg, char **arg) -{ - if (strcmp(arg[0],"temp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (tflag) { - modify->delete_compute(id_temp); - tflag = 0; - } - delete [] id_temp; - int n = strlen(arg[1]) + 1; - id_temp = new char[n]; - strcpy(id_temp,arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - - if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); - if (temperature->igroup != igroup && comm->me == 0) - error->warning(FLERR,"Group for fix_modify temp != fix group"); - if(not temperature->cudable) - error->warning(FLERR,"Fix temp/rescale/cuda uses non cudable temperature compute"); - return 2; - } - return 0; -} - - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleCuda::reset_target(double t_new) -{ - t_start = t_stop = t_new; -} - -/* ---------------------------------------------------------------------- */ - -double FixTempRescaleCuda::compute_scalar() -{ - return energy; -} diff --git a/src/USER-CUDA/fix_temp_rescale_cuda.h b/src/USER-CUDA/fix_temp_rescale_cuda.h deleted file mode 100644 index 3bdc71a1a0..0000000000 --- a/src/USER-CUDA/fix_temp_rescale_cuda.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(temp/rescale/cuda,FixTempRescaleCuda) - -#else - -#ifndef FIX_TEMP_RESCALE_CUDA_H -#define FIX_TEMP_RESCALE_CUDA_H - -#include "fix.h" - -namespace LAMMPS_NS { -class FixTempRescaleCuda : public Fix { - public: - FixTempRescaleCuda(class LAMMPS *, int, char **); - ~FixTempRescaleCuda(); - int setmask(); - void init(); - void end_of_step(); - int modify_param(int, char **); - void reset_target(double); - double compute_scalar(); - - private: - class Cuda *cuda; - int which; - double t_start,t_stop,t_window; - double fraction,energy,efactor; - - char *id_temp; - class Compute *temperature; - int tflag; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_temp_rescale_limit_cuda.cpp b/src/USER-CUDA/fix_temp_rescale_limit_cuda.cpp deleted file mode 100644 index eb8cf8d948..0000000000 --- a/src/USER-CUDA/fix_temp_rescale_limit_cuda.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_temp_rescale_limit_cuda.h" -#include "fix_temp_rescale_limit_cuda_cu.h" -#include "atom.h" -#include "force.h" -#include "group.h" -#include "update.h" -#include "domain.h" -#include "region.h" -#include "comm.h" -#include "modify.h" -#include "compute.h" -#include "error.h" -#include "user_cuda.h" -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -enum{NOBIAS,BIAS}; - -/* ---------------------------------------------------------------------- */ - -FixTempRescaleLimitCuda::FixTempRescaleLimitCuda(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if (narg < 9) error->all(FLERR,"Illegal fix temp/rescale/limit/cuda command"); - - nevery = force->inumeric(FLERR,arg[3]); - if (nevery <= 0) error->all(FLERR,"Illegal fix temp/rescale/limit/cuda command"); - - scalar_flag = 1; - global_freq = nevery; - extscalar = 1; - - t_start = force->numeric(FLERR,arg[4]); - t_stop = force->numeric(FLERR,arg[5]); - t_window = force->numeric(FLERR,arg[6]); - fraction = force->numeric(FLERR,arg[7]); - limit = force->numeric(FLERR,arg[8]); - if (limit <= 1.0) error->all(FLERR,"Illegal fix temp/rescale/limit/cuda command (limit must be > 1.0)"); - - - // create a new compute temp - // id = fix-ID + temp, compute group = fix group - - int n = strlen(id) + 6; - id_temp = new char[n]; - strcpy(id_temp,id); - strcat(id_temp,"_temp"); - - char **newarg = new char*[6]; - newarg[0] = id_temp; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "temp/cuda"; - modify->add_compute(3,newarg); - delete [] newarg; - tflag = 1; - - energy = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -FixTempRescaleLimitCuda::~FixTempRescaleLimitCuda() -{ - // delete temperature if fix created it - - if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; -} - -/* ---------------------------------------------------------------------- */ - -int FixTempRescaleLimitCuda::setmask() -{ - int mask = 0; - mask |= END_OF_STEP_CUDA; - mask |= THERMO_ENERGY_CUDA; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleLimitCuda::init() -{ - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix temp/rescale/limit/cuda does not exist"); - temperature = modify->compute[icompute]; - if(not temperature->cudable) - error->warning(FLERR,"Fix temp/rescale/limit/cuda uses non cudable temperature compute"); - if (temperature->tempbias) which = BIAS; - else which = NOBIAS; -} - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleLimitCuda::end_of_step() -{ - double t_current; - if(not temperature->cudable) {cuda->cu_x->download();cuda->cu_v->download();} - t_current = temperature->compute_scalar(); - if (t_current == 0.0) - error->all(FLERR,"Computed temperature for fix temp/rescale/limit/cuda cannot be 0.0"); - - double delta = update->ntimestep - update->beginstep; - delta /= update->endstep - update->beginstep; - double t_target = t_start + delta * (t_stop-t_start); - - // rescale velocity of appropriate atoms if outside window - - if (fabs(t_current-t_target) > t_window) { - t_target = t_current - fraction*(t_current-t_target); - double factor = sqrt(t_target/t_current); - double efactor = 0.5 * force->boltz * temperature->dof; - - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - double massone; - if(atom->rmass) massone = atom->rmass[0]; - else massone = atom->mass[0]; - - double current_limit=sqrt(limit*force->boltz*t_target*temperature->dof/massone/force->mvv2e); - if (which == NOBIAS) { - energy += (t_current-t_target) * efactor; - - - Cuda_FixTempRescaleLimitCuda_EndOfStep(&cuda->shared_data, groupbit,factor,current_limit); - - } else if (which == BIAS) { - energy += (t_current-t_target) * efactor; - if(not temperature->cudable) - { - cuda->cu_x->download();cuda->cu_v->download(); - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); - double vx = v[i][0] * factor; - double vy = v[i][1] * factor; - double vz = v[i][2] * factor; - v[i][0]=vx>0?MIN(vx,current_limit):MAX(vx,-current_limit); - v[i][1]=vy>0?MIN(vy,current_limit):MAX(vy,-current_limit); - v[i][2]=vz>0?MIN(vz,current_limit):MAX(vz,-current_limit); - - temperature->restore_bias(i,v[i]); - } - } - cuda->cu_v->upload(); - } - else - { - temperature->remove_bias_all(); - Cuda_FixTempRescaleLimitCuda_EndOfStep(&cuda->shared_data, groupbit,factor,current_limit); - temperature->restore_bias_all(); - } - } - - } -} - -/* ---------------------------------------------------------------------- */ - -int FixTempRescaleLimitCuda::modify_param(int narg, char **arg) -{ - if (strcmp(arg[0],"temp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (tflag) { - modify->delete_compute(id_temp); - tflag = 0; - } - delete [] id_temp; - int n = strlen(arg[1]) + 1; - id_temp = new char[n]; - strcpy(id_temp,arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - - if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); - if (temperature->igroup != igroup && comm->me == 0) - error->warning(FLERR,"Group for fix_modify temp != fix group"); - if(not temperature->cudable) - error->warning(FLERR,"Fix temp/rescale/limit/cuda uses non cudable temperature compute"); - return 2; - } - return 0; -} - - -/* ---------------------------------------------------------------------- */ - -void FixTempRescaleLimitCuda::reset_target(double t_new) -{ - t_start = t_stop = t_new; -} - -/* ---------------------------------------------------------------------- */ - -double FixTempRescaleLimitCuda::compute_scalar() -{ - return energy; -} diff --git a/src/USER-CUDA/fix_temp_rescale_limit_cuda.h b/src/USER-CUDA/fix_temp_rescale_limit_cuda.h deleted file mode 100644 index b2bba2049a..0000000000 --- a/src/USER-CUDA/fix_temp_rescale_limit_cuda.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(temp/rescale/limit/cuda,FixTempRescaleLimitCuda) - -#else - -#ifndef FIX_TEMP_RESCALE_LIMIT_CUDA_H -#define FIX_TEMP_RESCALE_LIMIT_CUDA_H - -#include "fix.h" - -namespace LAMMPS_NS { -class FixTempRescaleLimitCuda : public Fix { - public: - FixTempRescaleLimitCuda(class LAMMPS *, int, char **); - ~FixTempRescaleLimitCuda(); - int setmask(); - void init(); - void end_of_step(); - int modify_param(int, char **); - void reset_target(double); - double compute_scalar(); - - private: - class Cuda *cuda; - int which; - double t_start,t_stop,t_window; - double fraction,energy,efactor; - double limit; - char *id_temp; - class Compute *temperature; - int tflag; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/fix_viscous_cuda.cpp b/src/USER-CUDA/fix_viscous_cuda.cpp deleted file mode 100644 index 09871c86e3..0000000000 --- a/src/USER-CUDA/fix_viscous_cuda.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_viscous_cuda.h" -#include "fix_viscous_cuda_cu.h" -#include "atom.h" -#include "update.h" -#include "respa.h" -#include "error.h" -#include "cuda_modify_flags.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -/* ---------------------------------------------------------------------- */ - -FixViscousCuda::FixViscousCuda(LAMMPS *lmp, int narg, char **arg) : - FixViscous(lmp, narg, arg) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - cu_gamma=NULL; -} - -/* ---------------------------------------------------------------------- */ - -FixViscousCuda::~FixViscousCuda() -{ - delete cu_gamma; -} - -/* ---------------------------------------------------------------------- */ - -int FixViscousCuda::setmask() -{ - int mask = 0; - mask |= POST_FORCE_CUDA; - // mask |= POST_FORCE_RESPA; - // mask |= MIN_POST_FORCE; - return mask; -} - - -/* ---------------------------------------------------------------------- */ - -void FixViscousCuda::setup(int vflag) -{ - if(not cu_gamma) - cu_gamma = new cCudaData (gamma,atom->ntypes+1); - Cuda_FixViscousCuda_Init(&cuda->shared_data); - cu_gamma->upload(); - // if (strcmp(update->integrate_style,"verlet/cuda") == 0) - post_force(vflag); - /* else { - ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); - post_force_respa(vflag,nlevels_respa-1,0); - ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); - }*/ -} - -/* ---------------------------------------------------------------------- */ - -void FixViscousCuda::min_setup(int vflag) -{ - Cuda_FixViscousCuda_Init(&cuda->shared_data); - post_force(vflag); -} - -/* ---------------------------------------------------------------------- */ - -void FixViscousCuda::post_force(int vflag) -{ - // apply drag force to atoms in group - // direction is opposed to velocity vector - // magnitude depends on atom type - - Cuda_FixViscousCuda_PostForce(&cuda->shared_data, groupbit,cu_gamma->dev_data()); -} diff --git a/src/USER-CUDA/fix_viscous_cuda.h b/src/USER-CUDA/fix_viscous_cuda.h deleted file mode 100644 index e0cb6ba4b0..0000000000 --- a/src/USER-CUDA/fix_viscous_cuda.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(viscous/cuda,FixViscousCuda) - -#else - -#ifndef LMP_FIX_VISCOUS_CUDA_H -#define LMP_FIX_VISCOUS_CUDA_H - -#include "fix_viscous.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class FixViscousCuda : public FixViscous { - public: - FixViscousCuda(class LAMMPS *, int, char **); - ~FixViscousCuda(); - int setmask(); - void setup(int); - void min_setup(int); - void post_force(int); - cCudaData* cu_gamma; - - private: - class Cuda *cuda; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/modify_cuda.cpp b/src/USER-CUDA/modify_cuda.cpp deleted file mode 100644 index 82d6d92036..0000000000 --- a/src/USER-CUDA/modify_cuda.cpp +++ /dev/null @@ -1,437 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include -#include "modify_cuda.h" -#include "style_compute.h" -#include "style_fix.h" -#include "atom.h" -#include "comm.h" -#include "fix.h" -#include "compute.h" -#include "group.h" -#include "update.h" -#include "domain.h" -#include "user_cuda.h" -#include "memory.h" -#include "error.h" - -#include "cuda_modify_flags.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace FixConstCuda; - -#define DELTA 4 - -#define BIG 1.0e20 - - -/* ---------------------------------------------------------------------- */ - -ModifyCuda::ModifyCuda(LAMMPS *lmp) : Modify(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - n_initial_integrate_cuda = 0; - n_post_integrate_cuda = 0; - n_pre_exchange = 0; - n_pre_neighbor_cuda = 0; - n_pre_force_cuda = 0; - n_post_force_cuda = 0; - n_final_integrate_cuda = 0; - n_end_of_step_cuda = 0; - n_thermo_energy_cuda = 0; - - n_initial_integrate_host = 0; - n_post_integrate_host = 0; - n_pre_exchange = 0; - n_pre_neighbor_host = 0; - n_pre_force_host = 0; - n_post_force_host = 0; - n_final_integrate_host = 0; - n_end_of_step_host = 0; - n_thermo_energy_host = 0; - - list_initial_integrate_cuda = NULL; - list_post_integrate_cuda = NULL; - list_pre_exchange_cuda = NULL; - list_pre_neighbor_cuda = NULL; - list_pre_force_cuda = NULL; - list_post_force_cuda = NULL; - list_final_integrate_cuda = NULL; - list_end_of_step_cuda = NULL; - list_thermo_energy_cuda = NULL; - end_of_step_every_cuda = NULL; -} - -/* ---------------------------------------------------------------------- */ - -ModifyCuda::~ModifyCuda() -{ - delete [] list_initial_integrate_cuda; - delete [] list_post_integrate_cuda; - delete [] list_pre_exchange_cuda; - delete [] list_pre_neighbor_cuda; - delete [] list_pre_force_cuda; - delete [] list_post_force_cuda; - delete [] list_final_integrate_cuda; - delete [] list_end_of_step_cuda; - delete [] list_thermo_energy_cuda; - delete [] end_of_step_every_cuda; -} - -/* ---------------------------------------------------------------------- - initialize all fixes and computes -------------------------------------------------------------------------- */ - -void ModifyCuda::init() -{ - int i,j; - - // delete storage of restart info since it is not valid after 1st run - - restart_deallocate(); - - // create lists of fixes to call at each stage of run - - list_init(INITIAL_INTEGRATE,n_initial_integrate,list_initial_integrate); - list_init(POST_INTEGRATE,n_post_integrate,list_post_integrate); - list_init(PRE_EXCHANGE,n_pre_exchange,list_pre_exchange); - list_init(PRE_NEIGHBOR,n_pre_neighbor,list_pre_neighbor); - list_init(PRE_FORCE,n_pre_force,list_pre_force); - list_init(POST_FORCE,n_post_force,list_post_force); - list_init(FINAL_INTEGRATE,n_final_integrate,list_final_integrate); - list_init_end_of_step(END_OF_STEP,n_end_of_step,list_end_of_step); - list_init_thermo_energy(THERMO_ENERGY,n_thermo_energy,list_thermo_energy); - - list_init(INITIAL_INTEGRATE_CUDA, n_initial_integrate_cuda, list_initial_integrate_cuda); - list_init(POST_INTEGRATE_CUDA, n_post_integrate_cuda, list_post_integrate_cuda); - list_init(PRE_EXCHANGE_CUDA, n_pre_exchange_cuda, list_pre_exchange_cuda); - list_init(PRE_NEIGHBOR_CUDA, n_pre_neighbor_cuda, list_pre_neighbor_cuda); - list_init(PRE_FORCE_CUDA, n_pre_force_cuda, list_pre_force_cuda); - list_init(POST_FORCE_CUDA, n_post_force_cuda, list_post_force_cuda); - list_init(FINAL_INTEGRATE_CUDA, n_final_integrate_cuda, list_final_integrate_cuda); - list_init_end_of_step_cuda(END_OF_STEP_CUDA, n_end_of_step_cuda, list_end_of_step_cuda); - list_init_thermo_energy(THERMO_ENERGY_CUDA, n_thermo_energy_cuda, list_thermo_energy_cuda); - - n_initial_integrate_host = n_initial_integrate; - n_post_integrate_host = n_post_integrate; - n_pre_exchange_host = n_pre_exchange; - n_pre_neighbor_host = n_pre_neighbor; - n_pre_force_host = n_pre_force; - n_post_force_host = n_post_force; - n_final_integrate_host = n_final_integrate; - n_end_of_step_host = n_end_of_step; - n_thermo_energy_host = n_thermo_energy; - - n_initial_integrate = n_initial_integrate_cuda+n_initial_integrate_host; - n_post_integrate = n_post_integrate_cuda+n_post_integrate_host; - n_pre_exchange = n_pre_exchange_cuda+n_pre_exchange_host; - n_pre_neighbor = n_pre_neighbor_cuda+n_pre_neighbor_host; - n_pre_force = n_pre_force_cuda+n_pre_force_host; - n_post_force = n_post_force_cuda+n_post_force_host; - n_final_integrate = n_final_integrate_cuda+n_final_integrate_host; - n_end_of_step = n_end_of_step_cuda+n_end_of_step_host; - n_thermo_energy = n_thermo_energy_cuda+n_thermo_energy_host; - - list_init(INITIAL_INTEGRATE_RESPA, - n_initial_integrate_respa,list_initial_integrate_respa); - list_init(POST_INTEGRATE_RESPA, - n_post_integrate_respa,list_post_integrate_respa); - list_init(POST_FORCE_RESPA, - n_post_force_respa,list_post_force_respa); - list_init(PRE_FORCE_RESPA, - n_pre_force_respa,list_pre_force_respa); - list_init(FINAL_INTEGRATE_RESPA, - n_final_integrate_respa,list_final_integrate_respa); - - list_init(MIN_PRE_EXCHANGE,n_min_pre_exchange,list_min_pre_exchange); - list_init(MIN_POST_FORCE,n_min_post_force,list_min_post_force); - list_init(MIN_ENERGY,n_min_energy,list_min_energy); - - // init each fix - // needs to come before compute init - // this is b/c some computes call fix->dof() - // FixRigid::dof() depends on its own init having been called - - for (i = 0; i < nfix; i++) fix[i]->init(); - - // set global flag if any fix has its restart_pbc flag set - - restart_pbc_any = 0; - for (i = 0; i < nfix; i++) - if (fix[i]->restart_pbc) restart_pbc_any = 1; - - // create list of computes that store invocation times - - list_init_compute(); - - // init each compute - // set invoked_scalar,vector,etc to -1 to force new run to re-compute them - // add initial timestep to all computes that store invocation times - // since any of them may be invoked by initial thermo - // do not clear out invocation times stored within a compute, - // b/c some may be holdovers from previous run, like for ave fixes - - for (i = 0; i < ncompute; i++) { - compute[i]->init(); - compute[i]->invoked_scalar = -1; - compute[i]->invoked_vector = -1; - compute[i]->invoked_array = -1; - compute[i]->invoked_peratom = -1; - compute[i]->invoked_local = -1; - } - addstep_compute_all(update->ntimestep); - - // warn if any particle is time integrated more than once - - int nlocal = atom->nlocal; - int *mask = atom->mask; - - int *flag = new int[nlocal]; - for (i = 0; i < nlocal; i++) flag[i] = 0; - - int groupbit; - for (i = 0; i < nfix; i++) { - if (fix[i]->time_integrate == 0) continue; - groupbit = fix[i]->groupbit; - for (j = 0; j < nlocal; j++) - if (mask[j] & groupbit) flag[j]++; - } - - int check = 0; - for (i = 0; i < nlocal; i++) - if (flag[i] > 1) check = 1; - - delete [] flag; - - int checkall; - MPI_Allreduce(&check,&checkall,1,MPI_INT,MPI_SUM,world); - if (comm->me == 0 && checkall) - error->warning(FLERR,"One or more atoms are time integrated more than once"); -} - -/* ---------------------------------------------------------------------- - 1st half of integrate call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::initial_integrate(int vflag) -{ - for(int i = 0; i < n_initial_integrate_cuda; i++) - fix[list_initial_integrate_cuda[i]]->initial_integrate(vflag); - - if(n_initial_integrate_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_initial_integrate_host; i++) - fix[list_initial_integrate[i]]->initial_integrate(vflag); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - post_integrate call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::post_integrate() -{ - for(int i = 0; i < n_post_integrate_cuda; i++) - fix[list_post_integrate_cuda[i]]->post_integrate(); - - if(n_post_integrate_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_post_integrate_host; i++) - fix[list_post_integrate[i]]->post_integrate(); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - pre_exchange call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::pre_exchange() -{ - for(int i = 0; i < n_pre_exchange_cuda; i++) - fix[list_pre_exchange_cuda[i]]->pre_exchange(); - - if(n_pre_exchange_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_pre_exchange_host; i++) - fix[list_pre_exchange[i]]->pre_exchange(); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - pre_neighbor call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::pre_neighbor() -{ - for(int i = 0; i < n_pre_neighbor_cuda; i++) - fix[list_pre_neighbor_cuda[i]]->pre_neighbor(); - - if(n_pre_neighbor_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_pre_neighbor_host; i++) - fix[list_pre_neighbor[i]]->pre_neighbor(); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - pre_force call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::setup_pre_force(int vflag) -{ - for(int i = 0; i < n_pre_force_cuda; i++) - fix[list_pre_force_cuda[i]]->pre_force(vflag); - - if(n_pre_force_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_pre_force_host; i++) - fix[list_pre_force[i]]->pre_force(vflag); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -void ModifyCuda::pre_force(int vflag) -{ - for(int i = 0; i < n_pre_force_cuda; i++) - fix[list_pre_force_cuda[i]]->pre_force(vflag); - - if(n_pre_force_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_pre_force_host; i++) - fix[list_pre_force[i]]->pre_force(vflag); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - post_force call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::post_force(int vflag) -{ - for(int i = 0; i < n_post_force_cuda; i++) - fix[list_post_force_cuda[i]]->post_force(vflag); - - if(n_post_force_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_post_force_host; i++) - fix[list_post_force[i]]->post_force(vflag); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - 2nd half of integrate call, only for relevant fixes -------------------------------------------------------------------------- */ - -void ModifyCuda::final_integrate() -{ - for (int i = 0; i < n_final_integrate_cuda; i++) - fix[list_final_integrate_cuda[i]]->final_integrate(); - - if(n_final_integrate_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_final_integrate_host; i++) - fix[list_final_integrate[i]]->final_integrate(); - cuda->uploadAll(); cuda->oncpu = false; - } -} - -/* ---------------------------------------------------------------------- - end-of-timestep call, only for relevant fixes - only call fix->end_of_step() on timesteps that are multiples of nevery -------------------------------------------------------------------------- */ - -void ModifyCuda::end_of_step() -{ - for (int i = 0; i < n_end_of_step_cuda; i++) - if (update->ntimestep % end_of_step_every_cuda[i] == 0) - fix[list_end_of_step_cuda[i]]->end_of_step(); - - if(n_end_of_step_host != 0) - { - int do_thisstep=0; - for (int i = 0; i < n_end_of_step_host; i++) - if (update->ntimestep % end_of_step_every[i] == 0) do_thisstep=1; - if(do_thisstep) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_end_of_step_host; i++) - if (update->ntimestep % end_of_step_every[i] == 0) - fix[list_end_of_step[i]]->end_of_step(); - cuda->uploadAll(); cuda->oncpu = false; - } - } -} - -/* ---------------------------------------------------------------------- - thermo energy call, only for relevant fixes - called by Thermo class - compute_scalar() is fix call to return energy -------------------------------------------------------------------------- */ - -double ModifyCuda::thermo_energy() -{ - double energy = 0.0; - - for (int i = 0; i < n_thermo_energy_cuda; i++) - energy += fix[list_thermo_energy_cuda[i]]->compute_scalar(); - - if(n_thermo_energy_host != 0) - { - cuda->downloadAll(); cuda->oncpu = true; - for (int i = 0; i < n_thermo_energy_host; i++) - energy += fix[list_thermo_energy[i]]->compute_scalar(); - cuda->uploadAll(); cuda->oncpu = false; - } - - return energy; -} - - - -void ModifyCuda::list_init_end_of_step_cuda(int mask, int &n, int *&list) -{ - delete [] list; - delete [] end_of_step_every_cuda; - - n = 0; - for (int i = 0; i < nfix; i++) if (fmask[i] & mask) n++; - list = new int[n]; - end_of_step_every_cuda = new int[n]; - - n = 0; - for (int i = 0; i < nfix; i++) - if (fmask[i] & mask) { - list[n] = i; - end_of_step_every_cuda[n++] = fix[i]->nevery; - } -} diff --git a/src/USER-CUDA/modify_cuda.h b/src/USER-CUDA/modify_cuda.h deleted file mode 100644 index bfea217046..0000000000 --- a/src/USER-CUDA/modify_cuda.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_MODIFY_CUDA_H -#define LMP_MODIFY_CUDA_H - -#include -#include "modify.h" - -namespace LAMMPS_NS { - -class ModifyCuda : public Modify { - public: - - int n_initial_integrate_cuda; - int n_post_integrate_cuda; - int n_pre_exchange_cuda; - int n_pre_neighbor_cuda; - int n_pre_force_cuda; - int n_post_force_cuda; - int n_final_integrate_cuda; - int n_end_of_step_cuda; - int n_thermo_energy_cuda; - - int n_initial_integrate_host; - int n_post_integrate_host; - int n_pre_exchange_host; - int n_pre_neighbor_host; - int n_pre_force_host; - int n_post_force_host; - int n_final_integrate_host; - int n_end_of_step_host; - int n_thermo_energy_host; - - ModifyCuda(class LAMMPS *); - ~ModifyCuda(); - void init(); - void initial_integrate(int); - void post_integrate(); - //void pre_decide(); - void pre_exchange(); - void pre_neighbor(); - void setup_pre_force(int); - void pre_force(int); - void post_force(int); - void final_integrate(); - void end_of_step(); - double thermo_energy(); - - - protected: - class Cuda *cuda; - - // lists of fixes to apply at different stages of timestep - - // list of cuda fixes - int *list_initial_integrate_cuda; - int *list_post_integrate_cuda; - int *list_pre_exchange_cuda; - int *list_pre_neighbor_cuda; - int *list_pre_force_cuda; - int *list_post_force_cuda; - int *list_final_integrate_cuda; - int *list_end_of_step_cuda; - int *list_thermo_energy_cuda; - int *end_of_step_every_cuda; - - void list_init_end_of_step_cuda(int, int &, int *&); -}; - -} - -#endif diff --git a/src/USER-CUDA/neigh_full_cuda.cpp b/src/USER-CUDA/neigh_full_cuda.cpp deleted file mode 100644 index 5fd69f1105..0000000000 --- a/src/USER-CUDA/neigh_full_cuda.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include "neighbor_cuda.h" -#include "neigh_list.h" -#include "atom.h" -#include "domain.h" -#include "group.h" -#include "error.h" -#include "cuda_neigh_list.h" -#include "user_cuda.h" -#include "neighbor_cu.h" -#include -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- - N^2 search for all neighbors - every neighbor pair appears in list of both atoms i and j -------------------------------------------------------------------------- */ -void NeighborCuda::full_bin_cuda(NeighList *list) -{ - MYDBG(printf(" # CUDA::NeighFullBinCuda ... start\n");) - if(includegroup) error->warning(FLERR,"Warning using inlcudegroup neighborbuild. This is not yet supported by CUDA neighborbuild styles.\n"); - int nlocal = atom->nlocal; - int nall = nlocal + atom->nghost; - - if(nlocal==0) return; - CudaNeighList* clist=list->cuda_list; - cuda_shared_neighlist* slist=&clist->sneighlist; - - if(not clist) cuda->registerNeighborList(list); - - clist->build_cuda=true; - - if(slist->bin_extraspace<0.09) - { - for(int i=1;i<=atom->ntypes;i++) - for(int j=1;j<=atom->ntypes;j++) - { - if(slist->maxcutmaxcut=cutneighsq[i][j]; - } - slist->maxcut=sqrt(slist->maxcut); - } - int bin_dim_tmp[3]; - int bin_nmax_tmp; - do - { - do - { - bin_dim_tmp[0]=static_cast ((domain->subhi[0]-domain->sublo[0])/slist->maxcut); - bin_dim_tmp[1]=static_cast ((domain->subhi[1]-domain->sublo[1])/slist->maxcut); - bin_dim_tmp[2]=static_cast ((domain->subhi[2]-domain->sublo[2])/slist->maxcut); - if(bin_dim_tmp[0]==0) bin_dim_tmp[0]+=1; - if(bin_dim_tmp[1]==0) bin_dim_tmp[1]+=1; - if(bin_dim_tmp[2]==0) bin_dim_tmp[2]+=1; - bin_nmax_tmp=static_cast ((1.0+slist->bin_extraspace)*nlocal/(bin_dim_tmp[0]*bin_dim_tmp[1]*bin_dim_tmp[2])); - bin_dim_tmp[0]+=4; - bin_dim_tmp[1]+=4; - bin_dim_tmp[2]+=4; - if(bin_nmax_tmp<32) slist->maxcut*=1.2; - // printf("slist->maxcut: %lf\n", slist->maxcut); - } while(bin_nmax_tmp<32); - if((slist->bin_dim[0]!=bin_dim_tmp[0])||(slist->bin_dim[1]!=bin_dim_tmp[1])||(slist->bin_dim[2]!=bin_dim_tmp[2])||(slist->bin_nmax!=bin_nmax_tmp)) - { - if(slist->binned_id!=NULL) - CudaWrapper_FreeCudaData(slist->binned_id,slist->bin_dim[0]*slist->bin_dim[1]*slist->bin_dim[2]*slist->bin_nmax*sizeof(int)); - slist->bin_dim[0] = bin_dim_tmp[0]; - slist->bin_dim[1] = bin_dim_tmp[1]; - slist->bin_dim[2] = bin_dim_tmp[2]; - slist->bin_nmax = bin_nmax_tmp; - slist->binned_id=(int*) CudaWrapper_AllocCudaData(slist->bin_dim[0]*slist->bin_dim[1]*slist->bin_dim[2]*slist->bin_nmax*sizeof(int)); - //printf("slist->bin: %i %i %i %i \n", bin_dim_tmp[0],bin_dim_tmp[1],bin_dim_tmp[2],bin_nmax_tmp); - } - //if(list->cuda_list->sneighlist.bin_nmax>512) error->all(FLERR,"To many atoms per bin. Likely cause is very long pair cutoff. This needs major rewrite of code and is not yet scheduled to be done.\n"); - }while(Cuda_BinAtoms(&cuda->shared_data, &list->cuda_list->sneighlist)); - - // cuda->cu_debugdata->memset_device(0); - int maxneighbors=slist->maxneighbors; - - if((nex_type!=slist->nex_type)|| - (nex_group!=slist->nex_group)|| - (nex_mol!=slist->nex_mol)) - { - slist->nex_type=nex_type; - slist->nex_group=nex_group; - slist->nex_mol=nex_mol; - //printf("%i %i %i\n",nex_type,nex_group,nex_mol); - if(nex_type) - { - delete clist->cu_ex_type; - clist->cu_ex_type=new cCudaData (&ex_type[0][0] , & slist->ex_type , (atom->ntypes+1)*(atom->ntypes+1) ); - clist->cu_ex_type->upload(); - } - //printf("AA %i %i %i\n",nex_type,nex_group,nex_mol); - if(nex_group) - { - delete clist->cu_ex1_bit; - clist->cu_ex1_bit=new cCudaData (ex1_bit , & slist->ex1_bit , nex_group ); - clist->cu_ex1_bit->upload(); - //printf("A %i %i %i\n",nex_type,nex_group,nex_mol); - delete clist->cu_ex2_bit; - clist->cu_ex2_bit=new cCudaData (ex2_bit , & slist->ex2_bit , nex_group ); - clist->cu_ex2_bit->upload(); - } - //printf("B %i %i %i\n",nex_type,nex_group,nex_mol); - if(nex_mol) - { - delete clist->cu_ex_mol_bit; - clist->cu_ex_mol_bit=new cCudaData (ex_mol_bit , & slist->ex_mol_bit , nex_mol ); - clist->cu_ex_mol_bit->upload(); - } - //printf("C %i %i %i\n",nex_type,nex_group,nex_mol); - } - int overflow = 0; - do - { - overflow=0; - clist->grow_device(); - slist->cutneighsq=cutneighsq; - slist->maxneighbors=maxneighbors; - slist->inum = list->inum = nlocal; - //list->cuda_list->grow_device(); - if(cuda->shared_data.overlap_comm) - { - list->cuda_list->inum_border=0; - list->cuda_list->cu_inum_border->upload(); - } - - cuda->shared_data.atom.nall=nall; - //Cuda_NeighborReBuildFirstneigh(&cuda->shared_data, &list->cuda_list->sneighlist); - overflow= Cuda_NeighborBuildFullBin(&cuda->shared_data, &list->cuda_list->sneighlist); - - /*cuda->cu_debugdata->download(); - printf("Debugdata: %i ",cuda->debugdata[0]); - for(int i=0;idebugdata[0];i+=3) printf("// %i %i %i",cuda->debugdata[i+1],cuda->debugdata[i+2],cuda->debugdata[i+3]); - printf("\n");*/ - //printf("maxneighborsA: %i %i %i %i\n",maxneighbors,pgsize,oneatom,atom->nmax); - - if(overflow<0) - { - maxneighbors+=32; - if(-overflow>maxneighbors) maxneighbors=((-overflow+37)/32)*32; - delete list->cuda_list->cu_neighbors; - delete [] list->cuda_list->neighbors; - list->cuda_list->neighbors= new int[slist->maxlocal*maxneighbors]; - list->cuda_list->sneighlist.maxneighbors=maxneighbors; - //printf("maxneighborsA1: %i %i %i %i %i\n",maxneighbors,pgsize,oneatom,atom->nmax,slist->maxlocal); - list->cuda_list->cu_neighbors= new cCudaData (list->cuda_list->neighbors , & list->cuda_list->sneighlist.neighbors, slist->maxlocal*maxneighbors ); - //printf("maxneighborsA2: %i %i %i %i\n",maxneighbors,pgsize,oneatom,atom->nmax); - - if(cuda->shared_data.overlap_comm) - { - list->cuda_list->sneighlist.maxneighbors=maxneighbors; - list->cuda_list->dev_free(); - list->cuda_list->dev_alloc(); - } - //printf("maxneighborsA3: %i %i %i %i\n",maxneighbors,pgsize,oneatom,atom->nmax); - } - //printf("maxneighborsB: %i %i %i %i\n",maxneighbors,pgsize,oneatom,atom->nmax); - if(cuda->shared_data.overlap_comm) - { - list->cuda_list->cu_inum_border->download(); - list->cuda_list->sneighlist.inum_border2=list->cuda_list->inum_border; - } - } - while(overflow<0); - - //cuda->cu_debugdata->download(); - // printf("Differences in: %i\n",cuda->debugdata[0]); - // for(int i=0;i<20;i++) printf("%i %i %i %i// ",cuda->debugdata[4*i+1],cuda->debugdata[4*i+2],cuda->debugdata[4*i+3],cuda->debugdata[4*i+4]); -// printf("\n"); -/*for(int i=0;i<10;i++) -{ - printf("%i %i // ",i,numneigh[i]); - for(int j=0;jcuda_list->neighbors[i+j*nlocal]); - printf("\n"); -}*/ -/* int count=0; - if(cuda->shared_data.overlap_comm) - { - list->cuda_list->cu_inum_border->download(); - list->cuda_list->cu_ilist_border->download(); - list->cuda_list->cu_numneigh_border->download(); - list->cuda_list->cu_numneigh_inner->download(); - list->cuda_list->cu_neighbors->download(); - list->cuda_list->cu_neighbors_inner->download(); - list->cuda_list->cu_neighbors_border->download(); - - //list->cuda_list->cu_firstneigh->download(); - // list->cuda_list->nl_download(); - list->cuda_list->cu_numneigh->download(); - int diff=0; - //for(int i=0;icuda_list->inum_border); - //for(int j=0;jnumneigh[i];j++) printf("%i ",list->firstneigh[i][j]);printf("\n"); - for(int j=0;jcuda_list->inum_border;j++) - if(list->cuda_list->ilist_border[j]==i) k=j; - int d=numneigh[i]-list->cuda_list->numneigh_inner[i]; - if(k>-1) d-=list->cuda_list->numneigh_border[k]; - if(d!=0) {printf("Error at %i %i %i %i %i\n",i,k,d,numneigh[i],list->cuda_list->numneigh_inner[i]); diff++;} - if(k>-1 && count<10) - { - printf("Numneighs: %i %i %i Border_i: %i %i\n",numneigh[i],list->cuda_list->numneigh_inner[i],list->cuda_list->numneigh_border[k],k,(int)list->cuda_list->cu_ilist_border->dev_data()); - cuda->shared_data.me=k; - for(int j=0;jcuda_list->neighbors[i+j*nlocal]); - printf("\n"); - for(int j=0;jcuda_list->numneigh_inner[i];j++) - printf("%i ",list->cuda_list->neighbors_inner[i+j*nlocal]); - printf(" // "); - for(int j=0;jcuda_list->numneigh_border[k];j++) - printf("%i ",list->cuda_list->neighbors_border[k+j*nlocal]); - printf("\n"); - count++; - } - } - printf("%i\n",diff); - }*/ - list->cuda_list->cu_numneigh->download(); - list->cuda_list->cu_ilist->download(); - cuda->shared_data.atom.update_neigh=2; - //printf("Done\n"); - - MYDBG(printf(" # CUDA::NeighFullBinCuda ... end\n");) - -} - - -void NeighborCuda::full_nsq_cuda(NeighList *list) -{ - printf("Full_Nsq cuda neighbor list build is not implemented anymore.\n"); -return; -/* - MYDBG(printf(" # CUDA::NeighFullNSQCuda ... start\n");) - int nlocal = atom->nlocal; - int nall = nlocal + atom->nghost; - - if(cuda->cu_xhold) cuda->cu_xhold->upload(); - - - if(not list->cuda_list) cuda->registerNeighborList(list); - list->cuda_list->build_cuda=true; - int maxneighbors=list->cuda_list->sneighlist.maxneighbors; - int neigh_lists_per_page=pgsize/maxneighbors; - int *ilist = list->ilist; - int *numneigh = list->numneigh; - int **firstneigh = list->firstneigh; - int **pages = list->pages; - - int overflow = 0; - int inum = 0; - int npage = 0; - int npnt = 0; - do - { - npage=0; - npnt=0; - inum=0; - overflow=0; - neigh_lists_per_page=pgsize/maxneighbors; - npage=(2*nlocal*maxneighbors-1)/pgsize; - while(npage>list->maxpage) list->add_pages(); - pages = list->pages; - npage=0; - list->cuda_list->sneighlist.neigh_lists_per_page=pgsize/maxneighbors; - list->cuda_list->grow_device(); - list->cuda_list->sneighlist.cutneighsq=cutneighsq; - list->cuda_list->sneighlist.maxneighbors=maxneighbors; - list->cuda_list->sneighlist.inum = list->inum = nlocal; - - cuda->shared_data.atom.nall=nall; - Cuda_NeighborReBuildFirstneigh(&cuda->shared_data, &list->cuda_list->sneighlist); - overflow= not Cuda_NeighborBuildFullNsq(&cuda->shared_data, &list->cuda_list->sneighlist); - - - - if(overflow) maxneighbors+=32; - } - while(overflow); - if(not cudable) list->cuda_list->nl_download(); - MYDBG(printf(" # CUDA::NeighFullNSQCuda ... end\n");) - */ -} diff --git a/src/USER-CUDA/neighbor_cuda.cpp b/src/USER-CUDA/neighbor_cuda.cpp deleted file mode 100644 index a455a717ba..0000000000 --- a/src/USER-CUDA/neighbor_cuda.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#include -#include "neighbor_cuda.h" -#include "user_cuda.h" -#include "atom.h" -#include "atom_vec.h" -#include "domain.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "force.h" -#include "group.h" -#include "memory.h" -#include "error.h" -#include "update.h" - -using namespace LAMMPS_NS; - - - - -enum {NSQ, BIN, MULTI}; // also in neigh_list.cpp - -/* ---------------------------------------------------------------------- */ - -NeighborCuda::NeighborCuda(LAMMPS* lmp) : Neighbor(lmp) -{ - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR, "You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); -} - -/* ---------------------------------------------------------------------- */ - -void NeighborCuda::init() -{ - cuda->set_neighinit(dist_check, 0.25 * skin * skin); - cudable = 1; - - Neighbor::init(); -} - -/* ---------------------------------------------------------------------- - overwrite either full_nsq or full_bin with CUDA-equivalent methods - any other neighbor build method is unchanged -------------------------------------------------------------------------- */ - -void NeighborCuda::choose_build(int index, NeighRequest* rq) -{ - Neighbor::choose_build(index, rq); - - if(rq->full && style == NSQ && rq->cudable) - pair_build[index] = (Neighbor::PairPtr) &NeighborCuda::full_nsq_cuda; - else if(rq->full && style == BIN && rq->cudable) - pair_build[index] = (Neighbor::PairPtr) &NeighborCuda::full_bin_cuda; -} - -/* ---------------------------------------------------------------------- */ - -int NeighborCuda::check_distance() -{ - double delx, dely, delz, rsq; - double delta, deltasq, delta1, delta2; - - if(boxcheck) { - if(triclinic == 0) { - delx = bboxlo[0] - boxlo_hold[0]; - dely = bboxlo[1] - boxlo_hold[1]; - delz = bboxlo[2] - boxlo_hold[2]; - delta1 = sqrt(delx * delx + dely * dely + delz * delz); - delx = bboxhi[0] - boxhi_hold[0]; - dely = bboxhi[1] - boxhi_hold[1]; - delz = bboxhi[2] - boxhi_hold[2]; - delta2 = sqrt(delx * delx + dely * dely + delz * delz); - delta = 0.5 * (skin - (delta1 + delta2)); - deltasq = delta * delta; - } else { - domain->box_corners(); - delta1 = delta2 = 0.0; - - for(int i = 0; i < 8; i++) { - delx = corners[i][0] - corners_hold[i][0]; - dely = corners[i][1] - corners_hold[i][1]; - delz = corners[i][2] - corners_hold[i][2]; - delta = sqrt(delx * delx + dely * dely + delz * delz); - - if(delta > delta1) delta1 = delta; - else if(delta > delta2) delta2 = delta; - } - - delta = 0.5 * (skin - (delta1 + delta2)); - deltasq = delta * delta; - } - } else deltasq = triggersq; - - double** x = atom->x; - int nlocal = atom->nlocal; - - if(includegroup) nlocal = atom->nfirst; - - int flag = 0; - - if(not cuda->neighbor_decide_by_integrator) { - cuda->cu_x_download(); - - for(int i = 0; i < nlocal; i++) { - delx = x[i][0] - xhold[i][0]; - dely = x[i][1] - xhold[i][1]; - delz = x[i][2] - xhold[i][2]; - rsq = delx * delx + dely * dely + delz * delz; - - if(rsq > deltasq) flag = 1; - } - } else flag = cuda->shared_data.atom.reneigh_flag; - - int flagall; - MPI_Allreduce(&flag, &flagall, 1, MPI_INT, MPI_MAX, world); - - if(flagall && ago == MAX(every, delay)) ndanger++; - - return flagall; -} - -/* ---------------------------------------------------------------------- */ - -void NeighborCuda::build(int topoflag) -{ - int i; - - ago = 0; - ncalls++; - lastcall = update->ntimestep; - // store current atom positions and box size if needed - - if(dist_check) { - if(cuda->decide_by_integrator()) - cuda->update_xhold(maxhold, &xhold[0][0]); - else { - if(cuda->finished_setup) cuda->cu_x_download(); - - double** x = atom->x; - int nlocal = atom->nlocal; - - if(includegroup) nlocal = atom->nfirst; - - if(atom->nmax > maxhold) { - maxhold = atom->nmax; - memory->destroy(xhold); - memory->create(xhold, maxhold, 3, "neigh:xhold"); - } - - for(i = 0; i < nlocal; i++) { - xhold[i][0] = x[i][0]; - xhold[i][1] = x[i][1]; - xhold[i][2] = x[i][2]; - } - - if(boxcheck) { - if(triclinic == 0) { - boxlo_hold[0] = bboxlo[0]; - boxlo_hold[1] = bboxlo[1]; - boxlo_hold[2] = bboxlo[2]; - boxhi_hold[0] = bboxhi[0]; - boxhi_hold[1] = bboxhi[1]; - boxhi_hold[2] = bboxhi[2]; - } else { - domain->box_corners(); - corners = domain->corners; - - for(i = 0; i < 8; i++) { - corners_hold[i][0] = corners[i][0]; - corners_hold[i][1] = corners[i][1]; - corners_hold[i][2] = corners[i][2]; - } - } - } - } - } - - if(not cudable && cuda->finished_setup && atom->avec->cudable) - cuda->downloadAll(); - - if(cudable && (not cuda->finished_setup)) { - cuda->checkResize(); - cuda->uploadAll(); - } - - // if any lists store neighbors of ghosts: - // invoke grow() if nlocal+nghost exceeds previous list size - // else only invoke grow() if nlocal exceeds previous list size - // only done for lists with growflag set and which are perpetual - - if(anyghostlist && atom->nmax > maxatom) { - maxatom = atom->nmax; - - for(i = 0; i < nglist; i++) lists[glist[i]]->grow(maxatom); - } else if(atom->nmax > maxatom) { - maxatom = atom->nmax; - - for(i = 0; i < nglist; i++) lists[glist[i]]->grow(maxatom); - } - - // extend atom bin list if necessary - - if(style != NSQ && atom->nmax > maxbin) { - maxbin = atom->nmax; - memory->destroy(bins); - memory->create(bins, maxbin, "bins"); - } - - // check that neighbor list with special bond flags will not overflow - - if(atom->nlocal + atom->nghost > NEIGHMASK) - error->one(FLERR, "Too many local+ghost atoms for neighbor list"); - - // invoke building of pair and molecular neighbor lists - // only for pairwise lists with buildflag set - - for(i = 0; i < nblist; i++) - (this->*pair_build[blist[i]])(lists[blist[i]]); - - if(atom->molecular && topoflag) { - if(force->bond)(this->*bond_build)(); - if(force->angle)(this->*angle_build)(); - if(force->dihedral)(this->*dihedral_build)(); - if(force->improper)(this->*improper_build)(); - } -} diff --git a/src/USER-CUDA/neighbor_cuda.h b/src/USER-CUDA/neighbor_cuda.h deleted file mode 100644 index 708f45fde2..0000000000 --- a/src/USER-CUDA/neighbor_cuda.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_NEIGHBOR_CUDA_H -#define LMP_NEIGHBOR_CUDA_H - -#include "neighbor.h" - -namespace LAMMPS_NS { - -class NeighborCuda : public Neighbor { - public: - NeighborCuda(class LAMMPS *); - void init(); - int check_distance(); - void build(int do_build_bonded=1); - - private: - class Cuda *cuda; - - void choose_build(int, class NeighRequest *); - typedef void (NeighborCuda::*PairPtr)(class NeighList *); - void full_nsq_cuda(class NeighList *); - void full_bin_cuda(class NeighList *); -}; - -} - -#endif diff --git a/src/USER-CUDA/pair_born_coul_long_cuda.cpp b/src/USER-CUDA/pair_born_coul_long_cuda.cpp deleted file mode 100644 index d01a5bf47f..0000000000 --- a/src/USER-CUDA/pair_born_coul_long_cuda.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_born_coul_long_cuda.h" -#include "pair_born_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -#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 -/* ---------------------------------------------------------------------- */ - -PairBornCoulLongCuda::PairBornCoulLongCuda(LAMMPS *lmp) : PairBornCoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairBornCoulLongCuda::allocate() -{ - if(! allocated) PairBornCoulLong::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = rhoinv; - cuda->shared_data.pair.coeff2 = sigma; - cuda->shared_data.pair.coeff3 = a; - cuda->shared_data.pair.coeff4 = c; - cuda->shared_data.pair.coeff5 = d; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairBornCoulLongCuda::compute(int eflag, int vflag) -{ - MYDBG( printf("PairBornCoulLongCuda compute start\n"); fflush(stdout);) - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - #ifdef CUDA_USE_BINNING - Cuda_PairBornCoulLongCuda(& cuda->shared_data, eflag, vflag); - #else - Cuda_PairBornCoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - #endif - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } - MYDBG( printf("PairBornCoulLongCuda compute end\n"); fflush(stdout);) -} - -/* ---------------------------------------------------------------------- */ - -void PairBornCoulLongCuda::settings(int narg, char **arg) -{ - PairBornCoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairBornCoulLongCuda::coeff(int narg, char **arg) -{ - PairBornCoulLong::coeff(narg, arg); - allocate(); -} - -void PairBornCoulLongCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style born/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - if (strstr(update->integrate_style,"respa")) error->all(FLERR,"Integrate Style Respa is not supported by pair style buck/coul/long/cuda"); - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cut_coulsq = cut_coul * cut_coul; - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - if (force->kspace == NULL) - error->all(FLERR,"Pair style is incompatible with KSpace style"); - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairBornCoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairBornCoulLongCuda::init_list\n");) - PairBornCoulLong::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairBornCoulLongCuda::init_list end\n");) -} - -void PairBornCoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairBornCoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_born_coul_long_cuda.h b/src/USER-CUDA/pair_born_coul_long_cuda.h deleted file mode 100644 index 6e4f42cf3b..0000000000 --- a/src/USER-CUDA/pair_born_coul_long_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(born/coul/long/cuda,PairBornCoulLongCuda) - -#else - -#ifndef LMP_PAIR_BORN_COUL_LONG_CUDA_H -#define LMP_PAIR_BORN_COUL_LONG_CUDA_H - -#include "pair_born_coul_long.h" - -namespace LAMMPS_NS { - -class PairBornCoulLongCuda : public PairBornCoulLong -{ - public: - PairBornCoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_buck_coul_cut_cuda.cpp b/src/USER-CUDA/pair_buck_coul_cut_cuda.cpp deleted file mode 100644 index 4291b82752..0000000000 --- a/src/USER-CUDA/pair_buck_coul_cut_cuda.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_buck_coul_cut_cuda.h" -#include "pair_buck_coul_cut_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairBuckCoulCutCuda::PairBuckCoulCutCuda(LAMMPS *lmp) : PairBuckCoulCut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairBuckCoulCutCuda::allocate() -{ - if(! allocated) PairBuckCoulCut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut_coul = cut_coul; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = rhoinv; - cuda->shared_data.pair.coeff2 = buck1; - cuda->shared_data.pair.coeff3 = buck2; - cuda->shared_data.pair.coeff4 = a; - cuda->shared_data.pair.coeff5 = c; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulCutCuda::compute(int eflag, int vflag) -{ - MYDBG( printf("PairBuckCoulCutCuda compute start\n"); fflush(stdout);) - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairBuckCoulCutCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } - MYDBG( printf("PairBuckCoulCutCuda compute end\n"); fflush(stdout);) -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulCutCuda::settings(int narg, char **arg) -{ - PairBuckCoulCut::settings(narg, arg); - cuda->shared_data.pair.cut_coul_global = (F_CFLOAT) cut_coul_global; - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulCutCuda::coeff(int narg, char **arg) -{ - PairBuckCoulCut::coeff(narg, arg); - allocate(); -} - -void PairBuckCoulCutCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style buck/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - if (strstr(update->integrate_style,"respa")) error->all(FLERR,"Integrate Style Respa is not supported by pair style buck/coul/long/cuda"); - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - cuda->shared_data.pair.cut_coulsq_global=cut_coul_global * cut_coul_global; - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairBuckCoulCutCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairBuckCoulCutCuda::init_list\n");) - PairBuckCoulCut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairBuckCoulCutCuda::init_list end\n");) -} - -void PairBuckCoulCutCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairBuckCoulCut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_buck_coul_cut_cuda.h b/src/USER-CUDA/pair_buck_coul_cut_cuda.h deleted file mode 100644 index f66b70fb00..0000000000 --- a/src/USER-CUDA/pair_buck_coul_cut_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(buck/coul/cut/cuda,PairBuckCoulCutCuda) - -#else - -#ifndef LMP_PAIR_BUCK_COUL_CUT_CUDA_H -#define LMP_PAIR_BUCK_COUL_CUT_CUDA_H - -#include "pair_buck_coul_cut.h" - -namespace LAMMPS_NS { - -class PairBuckCoulCutCuda : public PairBuckCoulCut -{ - public: - PairBuckCoulCutCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_buck_coul_long_cuda.cpp b/src/USER-CUDA/pair_buck_coul_long_cuda.cpp deleted file mode 100644 index 8c8d667165..0000000000 --- a/src/USER-CUDA/pair_buck_coul_long_cuda.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_buck_coul_long_cuda.h" -#include "pair_buck_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -#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 -/* ---------------------------------------------------------------------- */ - -PairBuckCoulLongCuda::PairBuckCoulLongCuda(LAMMPS *lmp) : PairBuckCoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairBuckCoulLongCuda::allocate() -{ - if(! allocated) PairBuckCoulLong::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = rhoinv; - cuda->shared_data.pair.coeff2 = buck1; - cuda->shared_data.pair.coeff3 = buck2; - cuda->shared_data.pair.coeff4 = a; - cuda->shared_data.pair.coeff5 = c; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulLongCuda::compute(int eflag, int vflag) -{ - MYDBG( printf("PairBuckCoulLongCuda compute start\n"); fflush(stdout);) - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairBuckCoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } - MYDBG( printf("PairBuckCoulLongCuda compute end\n"); fflush(stdout);) -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulLongCuda::settings(int narg, char **arg) -{ - PairBuckCoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCoulLongCuda::coeff(int narg, char **arg) -{ - PairBuckCoulLong::coeff(narg, arg); - allocate(); -} - -void PairBuckCoulLongCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style buck/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - if (strstr(update->integrate_style,"respa")) error->all(FLERR,"Integrate Style Respa is not supported by pair style buck/coul/long/cuda"); - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cut_coulsq = cut_coul * cut_coul; - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - if (force->kspace == NULL) - error->all(FLERR,"Pair style is incompatible with KSpace style"); - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairBuckCoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairBuckCoulLongCuda::init_list\n");) - PairBuckCoulLong::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairBuckCoulLongCuda::init_list end\n");) -} - -void PairBuckCoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairBuckCoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_buck_coul_long_cuda.h b/src/USER-CUDA/pair_buck_coul_long_cuda.h deleted file mode 100644 index 41d4637d9a..0000000000 --- a/src/USER-CUDA/pair_buck_coul_long_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(buck/coul/long/cuda,PairBuckCoulLongCuda) - -#else - -#ifndef LMP_PAIR_BUCK_COUL_LONG_CUDA_H -#define LMP_PAIR_BUCK_COUL_LONG_CUDA_H - -#include "pair_buck_coul_long.h" - -namespace LAMMPS_NS { - -class PairBuckCoulLongCuda : public PairBuckCoulLong -{ - public: - PairBuckCoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_buck_cuda.cpp b/src/USER-CUDA/pair_buck_cuda.cpp deleted file mode 100644 index bcb9314c5f..0000000000 --- a/src/USER-CUDA/pair_buck_cuda.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_buck_cuda.h" -#include "pair_buck_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairBuckCuda::PairBuckCuda(LAMMPS *lmp) : PairBuck(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairBuckCuda::allocate() -{ - if(! allocated) PairBuck::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = rhoinv; - cuda->shared_data.pair.coeff2 = buck1; - cuda->shared_data.pair.coeff3 = buck2; - cuda->shared_data.pair.coeff4 = a; - cuda->shared_data.pair.coeff5 = c; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCuda::compute(int eflag, int vflag) -{ - MYDBG( printf("PairBuckCuda compute start\n"); fflush(stdout);) - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairBuckCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } - MYDBG( printf("PairBuckCuda compute end\n"); fflush(stdout);) -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCuda::settings(int narg, char **arg) -{ - PairBuck::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairBuckCuda::coeff(int narg, char **arg) -{ - PairBuck::coeff(narg, arg); - allocate(); -} - -void PairBuckCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style buck/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - if (strstr(update->integrate_style,"respa")) error->all(FLERR,"Integrate Style Respa is not supported by pair style buck/coul/long/cuda"); - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairBuckCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairBuckCuda::init_list\n");) - PairBuck::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairBuckCuda::init_list end\n");) -} - -void PairBuckCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairBuck::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_buck_cuda.h b/src/USER-CUDA/pair_buck_cuda.h deleted file mode 100644 index 9dfb742ed0..0000000000 --- a/src/USER-CUDA/pair_buck_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(buck/cuda,PairBuckCuda) - -#else - -#ifndef LMP_PAIR_BUCK_CUDA_H -#define LMP_PAIR_BUCK_CUDA_H - -#include "pair_buck.h" - -namespace LAMMPS_NS { - -class PairBuckCuda : public PairBuck -{ - public: - PairBuckCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_eam_alloy_cuda.cpp b/src/USER-CUDA/pair_eam_alloy_cuda.cpp deleted file mode 100644 index c0b76c7e11..0000000000 --- a/src/USER-CUDA/pair_eam_alloy_cuda.cpp +++ /dev/null @@ -1,326 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing authors: Stephen Foiles (SNL), Murray Daw (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "pair_eam_alloy_cuda.h" -#include "atom.h" -#include "comm.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; - -#define MAXLINE 1024 - -/* ---------------------------------------------------------------------- */ - -PairEAMAlloyCuda::PairEAMAlloyCuda(LAMMPS *lmp) : PairEAMCuda(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - one_coeff = 1; -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs - read DYNAMO setfl file -------------------------------------------------------------------------- */ - -void PairEAMAlloyCuda::coeff(int narg, char **arg) -{ - int i,j; - - if (!allocated) allocate(); - - if (narg != 3 + atom->ntypes) - error->all(FLERR,"Incorrect args for pair coefficients"); - - // insure I,J args are * * - - if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); - - // read EAM setfl file - - if (setfl) { - for (i = 0; i < setfl->nelements; i++) delete [] setfl->elements[i]; - delete [] setfl->elements; - delete [] setfl->mass; - memory->destroy(setfl->frho); - memory->destroy(setfl->rhor); - memory->destroy(setfl->z2r); - delete setfl; - } - setfl = new Setfl(); - read_file(arg[2]); - - // read args that map atom types to elements in potential file - // map[i] = which element the Ith atom type is, -1 if NULL - - for (i = 3; i < narg; i++) { - if (strcmp(arg[i],"NULL") == 0) { - map[i-2] = -1; - continue; - } - for (j = 0; j < setfl->nelements; j++) - if (strcmp(arg[i],setfl->elements[j]) == 0) break; - if (j < setfl->nelements) map[i-2] = j; - else error->all(FLERR,"No matching element in EAM potential file"); - } - - // clear setflag since coeff() called once with I,J = * * - - int n = atom->ntypes; - for (i = 1; i <= n; i++) - for (j = i; j <= n; j++) - setflag[i][j] = 0; - - // set setflag i,j for type pairs where both are mapped to elements - // set mass of atom type if i = j - - int count = 0; - for (i = 1; i <= n; i++) { - for (j = i; j <= n; j++) { - if (map[i] >= 0 && map[j] >= 0) { - setflag[i][j] = 1; - if (i == j) atom->set_mass(i,setfl->mass[map[i]]); - count++; - } - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - -/* ---------------------------------------------------------------------- - read a multi-element DYNAMO setfl file -------------------------------------------------------------------------- */ - -void PairEAMAlloyCuda::read_file(char *filename) -{ - Setfl *file = setfl; - - // open potential file - - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; - - if (me == 0) { - fptr = fopen(filename,"r"); - if (fptr == NULL) { - char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } - - // read and broadcast header - // extract element names from nelements line - - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); - - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; - - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } - - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); - - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); - } - - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } - - // close the potential file - - if (me == 0) fclose(fptr); -} - -/* ---------------------------------------------------------------------- - copy read-in setfl potential to standard array format -------------------------------------------------------------------------- */ - -void PairEAMAlloyCuda::file2array() -{ - int i,j,m,n; - int ntypes = atom->ntypes; - - // set function params directly from setfl file - - nrho = setfl->nrho; - nr = setfl->nr; - drho = setfl->drho; - dr = setfl->dr; - - // ------------------------------------------------------------------ - // setup frho arrays - // ------------------------------------------------------------------ - - // allocate frho arrays - // nfrho = # of setfl elements + 1 for zero array - - nfrho = setfl->nelements + 1; - memory->destroy(frho); - memory->create(frho,nfrho,nrho+1,"pair:frho"); - - // copy each element's frho to global frho - - for (i = 0; i < setfl->nelements; i++) - for (m = 1; m <= nrho; m++) frho[i][m] = setfl->frho[i][m]; - - // add extra frho of zeroes for non-EAM types to point to (pair hybrid) - // this is necessary b/c fp is still computed for non-EAM atoms - - for (m = 1; m <= nrho; m++) frho[nfrho-1][m] = 0.0; - - // type2frho[i] = which frho array (0 to nfrho-1) each atom type maps to - // if atom type doesn't point to element (non-EAM atom in pair hybrid) - // then map it to last frho array of zeroes - - for (i = 1; i <= ntypes; i++) - if (map[i] >= 0) type2frho[i] = map[i]; - else type2frho[i] = nfrho-1; - - // ------------------------------------------------------------------ - // setup rhor arrays - // ------------------------------------------------------------------ - - // allocate rhor arrays - // nrhor = # of setfl elements - - nrhor = setfl->nelements; - memory->destroy(rhor); - memory->create(rhor,nrhor,nr+1,"pair:rhor"); - - // copy each element's rhor to global rhor - - for (i = 0; i < setfl->nelements; i++) - for (m = 1; m <= nr; m++) rhor[i][m] = setfl->rhor[i][m]; - - // type2rhor[i][j] = which rhor array (0 to nrhor-1) each type pair maps to - // for setfl files, I,J mapping only depends on I - // OK if map = -1 (non-EAM atom in pair hybrid) b/c type2rhor not used - - for (i = 1; i <= ntypes; i++) - for (j = 1; j <= ntypes; j++) - type2rhor[i][j] = map[i]; - - // ------------------------------------------------------------------ - // setup z2r arrays - // ------------------------------------------------------------------ - - // allocate z2r arrays - // nz2r = N*(N+1)/2 where N = # of setfl elements - - nz2r = setfl->nelements * (setfl->nelements+1) / 2; - memory->destroy(z2r); - memory->create(z2r,nz2r,nr+1,"pair:z2r"); - - // copy each element pair z2r to global z2r, only for I >= J - - n = 0; - for (i = 0; i < setfl->nelements; i++) - for (j = 0; j <= i; j++) { - for (m = 1; m <= nr; m++) z2r[n][m] = setfl->z2r[i][j][m]; - n++; - } - - // type2z2r[i][j] = which z2r array (0 to nz2r-1) each type pair maps to - // set of z2r arrays only fill lower triangular Nelement matrix - // value = n = sum over rows of lower-triangular matrix until reach irow,icol - // swap indices when irow < icol to stay lower triangular - // if map = -1 (non-EAM atom in pair hybrid): - // type2z2r is not used by non-opt - // but set type2z2r to 0 since accessed by opt - - int irow,icol; - for (i = 1; i <= ntypes; i++) { - for (j = 1; j <= ntypes; j++) { - irow = map[i]; - icol = map[j]; - if (irow == -1 || icol == -1) { - type2z2r[i][j] = 0; - continue; - } - if (irow < icol) { - irow = map[j]; - icol = map[i]; - } - n = 0; - for (m = 0; m < irow; m++) n += m + 1; - n += icol; - type2z2r[i][j] = n; - } - } -} diff --git a/src/USER-CUDA/pair_eam_alloy_cuda.h b/src/USER-CUDA/pair_eam_alloy_cuda.h deleted file mode 100644 index c46755d0f8..0000000000 --- a/src/USER-CUDA/pair_eam_alloy_cuda.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(eam/alloy/cuda,PairEAMAlloyCuda) - -#else - -#ifndef LMP_PAIR_EAM_CUDA_ALLOY_H -#define LMP_PAIR_EAM_CUDA_ALLOY_H - -#include "pair_eam_cuda.h" - -namespace LAMMPS_NS { - -// use virtual public since this class is parent in multiple inheritance - -class PairEAMAlloyCuda : virtual public PairEAMCuda { - public: - PairEAMAlloyCuda(class LAMMPS *); - virtual ~PairEAMAlloyCuda() {} - void coeff(int, char **); - - protected: - class Cuda *cuda; - void read_file(char *); - void file2array(); -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_eam_cuda.cpp b/src/USER-CUDA/pair_eam_cuda.cpp deleted file mode 100644 index 3db0c66cd6..0000000000 --- a/src/USER-CUDA/pair_eam_cuda.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_eam_cuda.h" -#include "pair_eam_cuda_cu.h" -#include "pair_virial_compute_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairEAMCuda::PairEAMCuda(LAMMPS* lmp) : PairEAM(lmp) -{ - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR, "You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.override_block_per_atom = 0; - - cuda->setSystemParams(); - cu_rho = NULL; - cu_fp = NULL; - cu_frho_spline = NULL; - cu_z2r_spline = NULL; - cu_rhor_spline = NULL; -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairEAMCuda::allocate() -{ - if(! allocated) PairEAM::allocate(); - - cuda->shared_data.pair.cutsq = cutsq; - cuda->shared_data.pair.cut_global = (F_CFLOAT) cutforcesq; -} - -/* ---------------------------------------------------------------------- */ - -void PairEAMCuda::compute(int eflag, int vflag) -{ - cuda->shared_data.pair.cut_global = (F_CFLOAT) cutforcesq; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->shared_data.pair.collect_forces_later = 0; - - if(atom->nmax > nmax || cuda->finished_setup == false) { - memory->destroy(rho); - memory->destroy(fp); - nmax = atom->nmax; - memory->create(rho, nmax, "pair:rho"); - memory->create(fp, nmax, "pair:fp"); - delete cu_rho; - delete cu_fp; - cu_rho = new cCudaData (rho, atom->nmax); - cu_fp = new cCudaData (fp, atom->nmax); - Cuda_PairEAMCuda_Init(&cuda->shared_data, rdr, rdrho, nfrho, nrhor, nr, nrho, nz2r, - cu_frho_spline->dev_data(), cu_rhor_spline->dev_data(), cu_z2r_spline->dev_data(), - cu_rho->dev_data(), cu_fp->dev_data(), type2frho, type2z2r, type2rhor); - } - - - - if(eflag || vflag) ev_setup(eflag, vflag); - - if(eflag) cuda->cu_eng_vdwl->upload(); - - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairEAM1Cuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - comm->forward_comm_pair(this); - - Cuda_PairEAM2Cuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(eflag) cuda->cu_eng_vdwl->download(); - - if(vflag) cuda->cu_virial->download(); -} - -/* ---------------------------------------------------------------------- */ - -void PairEAMCuda::settings(int narg, char** arg) -{ - PairEAM::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cutforcesq; -} - -/* ---------------------------------------------------------------------- */ - -void PairEAMCuda::coeff(int narg, char** arg) -{ - PairEAM::coeff(narg, arg); - allocate(); -} - -void PairEAMCuda::init_style() -{ - MYDBG(printf("# CUDA PairEAMCuda::init_style start\n");) - // request regular or rRESPA neighbor lists - file2array(); - array2spline(); - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - delete cu_rhor_spline; - delete cu_z2r_spline; - delete cu_frho_spline; - - cu_rhor_spline = new cCudaData((double*)rhor_spline, nrhor, nr + 1, EAM_COEFF_LENGTH); - cu_z2r_spline = new cCudaData((double*)z2r_spline, nz2r, nr + 1, EAM_COEFF_LENGTH); - cu_frho_spline = new cCudaData((double*)frho_spline, nfrho, nrho + 1, EAM_COEFF_LENGTH); - - cu_rhor_spline->upload(); - cu_z2r_spline->upload(); - cu_frho_spline->upload(); - - MYDBG(printf("# CUDA PairEAMCuda::init_style end\n");) -} - -void PairEAMCuda::init_list(int id, NeighList* ptr) -{ - MYDBG(printf("# CUDA PairEAMCuda::init_list\n");) - PairEAM::init_list(id, ptr); - - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - - // see Neighbor::init() for details on lammps lists' logic - MYDBG(printf("# CUDA PairEAMCuda::init_list end\n");) -} - -void PairEAMCuda::array2spline() -{ - rdr = 1.0 / dr; - rdrho = 1.0 / drho; - - memory->destroy(frho_spline); - memory->destroy(rhor_spline); - memory->destroy(z2r_spline); - - memory->create(frho_spline, nfrho, nrho + 1, 8, "pair:frho"); - memory->create(rhor_spline, nrhor, nr + 1, 8, "pair:rhor"); - memory->create(z2r_spline, nz2r, nr + 1, 8, "pair:z2r"); - - for(int i = 0; i < nfrho; i++) { - interpolate(nrho, drho, frho[i], frho_spline[i]); - - for(int j = 0; j < nrho + 1; j++) - frho_spline[i][j][7] = frho_spline[i][j][3]; - } - - for(int i = 0; i < nrhor; i++) { - interpolate(nr, dr, rhor[i], rhor_spline[i]); - - for(int j = 0; j < nr + 1; j++) - rhor_spline[i][j][7] = rhor_spline[i][j][3]; - } - - for(int i = 0; i < nz2r; i++) { - interpolate(nr, dr, z2r[i], z2r_spline[i]); - - for(int j = 0; j < nr + 1; j++) - z2r_spline[i][j][7] = z2r_spline[i][j][3]; - } -} - -/* ---------------------------------------------------------------------- */ - -int PairEAMCuda::pack_forward_comm(int n, int* iswap, double* buf, - int pbc_flag, int* pbc) -{ - Cuda_PairEAMCuda_PackComm(&cuda->shared_data, n, *iswap, buf); - - if(sizeof(F_CFLOAT) < sizeof(double)) return n; - else return n; -} - -/* ---------------------------------------------------------------------- */ - -void PairEAMCuda::unpack_forward_comm(int n, int first, double* buf) -{ - Cuda_PairEAMCuda_UnpackComm(&cuda->shared_data, n, first, buf, cu_fp->dev_data()); -} - -void PairEAMCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold = maxeatom; - PairEAM::ev_setup(eflag, vflag); - - if(eflag_atom && atom->nmax > maxeatomold) { - delete cuda->cu_eatom; - cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax); - } - - if(vflag_atom && atom->nmax > maxeatomold) { - delete cuda->cu_vatom; - cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6); - } - -} diff --git a/src/USER-CUDA/pair_eam_cuda.h b/src/USER-CUDA/pair_eam_cuda.h deleted file mode 100644 index 973fc20a45..0000000000 --- a/src/USER-CUDA/pair_eam_cuda.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ -#ifdef PAIR_CLASS - -PairStyle(eam/cuda,PairEAMCuda) - -#else - -#ifndef PAIR_EAM_CUDA_H -#define PAIR_EAM_CUDA_H - -#include "cuda_data.h" -#include "pair_eam.h" - -namespace LAMMPS_NS { - -class PairEAMCuda : public PairEAM -{ - public: - PairEAMCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void array2spline(); - int pack_forward_comm(int n, int *iswap, double *buf, - int pbc_flag, int *pbc); - void unpack_forward_comm(int n, int first, double *buf); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - virtual void ev_setup(int eflag, int vflag); - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_rho; - cCudaData* cu_fp; - cCudaData* cu_rhor_spline; - cCudaData* cu_z2r_spline; - cCudaData* cu_frho_spline; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_eam_fs_cuda.cpp b/src/USER-CUDA/pair_eam_fs_cuda.cpp deleted file mode 100644 index 6190213402..0000000000 --- a/src/USER-CUDA/pair_eam_fs_cuda.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing authors: Tim Lau (MIT) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "pair_eam_fs_cuda.h" -#include "atom.h" -#include "comm.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; - -#define MAXLINE 1024 - -/* ---------------------------------------------------------------------- */ - -PairEAMFSCuda::PairEAMFSCuda(LAMMPS *lmp) : PairEAMCuda(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - one_coeff = 1; -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs - read EAM Finnis-Sinclair file -------------------------------------------------------------------------- */ - -void PairEAMFSCuda::coeff(int narg, char **arg) -{ - int i,j; - - if (!allocated) allocate(); - - if (narg != 3 + atom->ntypes) - error->all(FLERR,"Incorrect args for pair coefficients"); - - // insure I,J args are * * - - if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); - - // read EAM Finnis-Sinclair file - - if (fs) { - for (i = 0; i < fs->nelements; i++) delete [] fs->elements[i]; - delete [] fs->elements; - delete [] fs->mass; - memory->destroy(fs->frho); - memory->destroy(fs->rhor); - memory->destroy(fs->z2r); - delete fs; - } - fs = new Fs(); - read_file(arg[2]); - - // read args that map atom types to elements in potential file - // map[i] = which element the Ith atom type is, -1 if NULL - - for (i = 3; i < narg; i++) { - if (strcmp(arg[i],"NULL") == 0) { - map[i-2] = -1; - continue; - } - for (j = 0; j < fs->nelements; j++) - if (strcmp(arg[i],fs->elements[j]) == 0) break; - if (j < fs->nelements) map[i-2] = j; - else error->all(FLERR,"No matching element in EAM potential file"); - } - - // clear setflag since coeff() called once with I,J = * * - - int n = atom->ntypes; - for (i = 1; i <= n; i++) - for (j = i; j <= n; j++) - setflag[i][j] = 0; - - // set setflag i,j for type pairs where both are mapped to elements - // set mass of atom type if i = j - - int count = 0; - for (i = 1; i <= n; i++) { - for (j = i; j <= n; j++) { - if (map[i] >= 0 && map[j] >= 0) { - setflag[i][j] = 1; - if (i == j) atom->set_mass(i,fs->mass[map[i]]); - count++; - } - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - -/* ---------------------------------------------------------------------- - read a multi-element DYNAMO setfl file -------------------------------------------------------------------------- */ - -void PairEAMFSCuda::read_file(char *filename) -{ - Fs *file = fs; - - // open potential file - - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; - - if (me == 0) { - fptr = fopen(filename,"r"); - if (fptr == NULL) { - char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } - - // read and broadcast header - // extract element names from nelements line - - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); - - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; - - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } - - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); - - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); - } - } - - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } - - // close the potential file - - if (me == 0) fclose(fptr); -} - -/* ---------------------------------------------------------------------- - copy read-in setfl potential to standard array format -------------------------------------------------------------------------- */ - -void PairEAMFSCuda::file2array() -{ - int i,j,m,n; - int ntypes = atom->ntypes; - - // set function params directly from fs file - - nrho = fs->nrho; - nr = fs->nr; - drho = fs->drho; - dr = fs->dr; - - // ------------------------------------------------------------------ - // setup frho arrays - // ------------------------------------------------------------------ - - // allocate frho arrays - // nfrho = # of fs elements + 1 for zero array - - nfrho = fs->nelements + 1; - memory->destroy(frho); - memory->create(frho,nfrho,nrho+1,"pair:frho"); - - // copy each element's frho to global frho - - for (i = 0; i < fs->nelements; i++) - for (m = 1; m <= nrho; m++) frho[i][m] = fs->frho[i][m]; - - // add extra frho of zeroes for non-EAM types to point to (pair hybrid) - // this is necessary b/c fp is still computed for non-EAM atoms - - for (m = 1; m <= nrho; m++) frho[nfrho-1][m] = 0.0; - - // type2frho[i] = which frho array (0 to nfrho-1) each atom type maps to - // if atom type doesn't point to element (non-EAM atom in pair hybrid) - // then map it to last frho array of zeroes - - for (i = 1; i <= ntypes; i++) - if (map[i] >= 0) type2frho[i] = map[i]; - else type2frho[i] = nfrho-1; - - // ------------------------------------------------------------------ - // setup rhor arrays - // ------------------------------------------------------------------ - - // allocate rhor arrays - // nrhor = square of # of fs elements - - nrhor = fs->nelements * fs->nelements; - memory->destroy(rhor); - memory->create(rhor,nrhor,nr+1,"pair:rhor"); - - // copy each element pair rhor to global rhor - - n = 0; - for (i = 0; i < fs->nelements; i++) - for (j = 0; j < fs->nelements; j++) { - for (m = 1; m <= nr; m++) rhor[n][m] = fs->rhor[i][j][m]; - n++; - } - - // type2rhor[i][j] = which rhor array (0 to nrhor-1) each type pair maps to - // for fs files, there is a full NxN set of rhor arrays - // OK if map = -1 (non-EAM atom in pair hybrid) b/c type2rhor not used - - for (i = 1; i <= ntypes; i++) - for (j = 1; j <= ntypes; j++) - type2rhor[i][j] = map[i] * fs->nelements + map[j]; - - // ------------------------------------------------------------------ - // setup z2r arrays - // ------------------------------------------------------------------ - - // allocate z2r arrays - // nz2r = N*(N+1)/2 where N = # of fs elements - - nz2r = fs->nelements * (fs->nelements+1) / 2; - memory->destroy(z2r); - memory->create(z2r,nz2r,nr+1,"pair:z2r"); - - // copy each element pair z2r to global z2r, only for I >= J - - n = 0; - for (i = 0; i < fs->nelements; i++) - for (j = 0; j <= i; j++) { - for (m = 1; m <= nr; m++) z2r[n][m] = fs->z2r[i][j][m]; - n++; - } - - // type2z2r[i][j] = which z2r array (0 to nz2r-1) each type pair maps to - // set of z2r arrays only fill lower triangular Nelement matrix - // value = n = sum over rows of lower-triangular matrix until reach irow,icol - // swap indices when irow < icol to stay lower triangular - // if map = -1 (non-EAM atom in pair hybrid): - // type2z2r is not used by non-opt - // but set type2z2r to 0 since accessed by opt - - int irow,icol; - for (i = 1; i <= ntypes; i++) { - for (j = 1; j <= ntypes; j++) { - irow = map[i]; - icol = map[j]; - if (irow == -1 || icol == -1) { - type2z2r[i][j] = 0; - continue; - } - if (irow < icol) { - irow = map[j]; - icol = map[i]; - } - n = 0; - for (m = 0; m < irow; m++) n += m + 1; - n += icol; - type2z2r[i][j] = n; - } - } -} diff --git a/src/USER-CUDA/pair_eam_fs_cuda.h b/src/USER-CUDA/pair_eam_fs_cuda.h deleted file mode 100644 index 698b485875..0000000000 --- a/src/USER-CUDA/pair_eam_fs_cuda.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(eam/fs/cuda,PairEAMFSCuda) - -#else - -#ifndef LMP_PAIR_EAM_FS_CUDA_H -#define LMP_PAIR_EAM_FS_CUDA_H - -#include "pair_eam_cuda.h" - -namespace LAMMPS_NS { - -// use virtual public since this class is parent in multiple inheritance - -class PairEAMFSCuda : virtual public PairEAMCuda { - public: - PairEAMFSCuda(class LAMMPS *); - virtual ~PairEAMFSCuda() {} - void coeff(int, char **); - - protected: - class Cuda *cuda; - void read_file(char *); - void file2array(); -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_gran_hooke_cuda.cpp b/src/USER-CUDA/pair_gran_hooke_cuda.cpp deleted file mode 100644 index 3f60475ad5..0000000000 --- a/src/USER-CUDA/pair_gran_hooke_cuda.cpp +++ /dev/null @@ -1,250 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_gran_hooke_cuda.h" -#include "pair_gran_hooke_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "modify.h" -#include "fix_pour.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairGranHookeCuda::PairGranHookeCuda(LAMMPS *lmp) : PairGranHooke(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairGranHookeCuda::allocate() -{ - if(! allocated) PairGranHooke::allocate(); - if(! allocated2) - { - allocated2 = true; - int n = atom->ntypes; - cuda->shared_data.pair.cutsq = cutsq; - memory->create(cuda->shared_data.pair.coeff1,n+1,n+1, - "pair:cuda_coeff1"); - memory->create(cuda->shared_data.pair.coeff2, - n+1,n+1,"pair:cuda_coeff2"); - cuda->shared_data.pair.coeff1[0][0]=kn; - cuda->shared_data.pair.coeff1[0][1]=kt; - cuda->shared_data.pair.coeff1[1][0]=gamman; - cuda->shared_data.pair.coeff1[1][1]=gammat; - cuda->shared_data.pair.coeff2[0][0]=xmu; - cuda->shared_data.pair.coeff2[0][1]=dampflag; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairGranHookeCuda::compute(int eflag, int vflag) -{ - cuda->shared_data.pair.use_block_per_atom = 0; - //cuda->cu_debugdata->memset_device(0); - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairGranHookeCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - //cuda->cu_debugdata->download(); - //printf("%lf %lf %lf %lf %lf %lf\n",1.0e-6*cuda->debugdata[0],1.0e-6*cuda->debugdata[1],1.0e-6*cuda->debugdata[2],1.0e-6*cuda->debugdata[3],1.0e-6*cuda->debugdata[4],1.0e-6*cuda->debugdata[5]); - -} - -/* ---------------------------------------------------------------------- */ - -void PairGranHookeCuda::settings(int narg, char **arg) -{ - PairGranHooke::settings(narg, arg); - } - -/* ---------------------------------------------------------------------- */ - -void PairGranHookeCuda::coeff(int narg, char **arg) -{ - PairGranHooke::coeff(narg, arg); - allocate(); -} - -void PairGranHookeCuda::init_style() -{ - int i; - MYDBG(printf("# CUDA PairGranHookeCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->gran = 1; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - if (!atom->radius_flag || !atom->omega_flag || !atom->torque_flag) - error->all(FLERR,"Pair granular requires atom attributes radius, omega, torque"); - if (comm->ghost_velocity == 0) - error->all(FLERR,"Pair granular requires ghost atoms store velocity"); - - // need a half neigh list and optionally a granular history neigh list - - dt = update->dt; - - // check for Fix freeze and set freeze_group_bit - - for (i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"freeze") == 0) break; - if (i < modify->nfix) freeze_group_bit = modify->fix[i]->groupbit; - else freeze_group_bit = 0; - - cuda->shared_data.pair.freeze_group_bit=freeze_group_bit; - - // check for FixPour and FixDeposit so can extract particle radii - - int ipour; - for (ipour = 0; ipour < modify->nfix; ipour++) - if (strcmp(modify->fix[ipour]->style,"pour") == 0) break; - if (ipour == modify->nfix) ipour = -1; - - int idep; - for (idep = 0; idep < modify->nfix; idep++) - if (strcmp(modify->fix[idep]->style,"deposit") == 0) break; - if (idep == modify->nfix) idep = -1; - - // set maxrad_dynamic and maxrad_frozen for each type - // include future FixPour and FixDeposit particles as dynamic - - int itype; - for (i = 1; i <= atom->ntypes; i++) { - onerad_dynamic[i] = onerad_frozen[i] = 0.0; - if (ipour >= 0) { - itype = i; - onerad_dynamic[i] = - *((double *) modify->fix[ipour]->extract("radius",itype)); - } - if (idep >= 0) { - itype = i; - onerad_dynamic[i] = - *((double *) modify->fix[idep]->extract("radius",itype)); - } - } - - double *radius = atom->radius; - int *mask = atom->mask; - int *type = atom->type; - int nlocal = atom->nlocal; - - for (i = 0; i < nlocal; i++) - if (mask[i] & freeze_group_bit) - onerad_frozen[type[i]] = MAX(onerad_frozen[type[i]],radius[i]); - else - onerad_dynamic[type[i]] = MAX(onerad_dynamic[type[i]],radius[i]); - - MPI_Allreduce(&onerad_dynamic[1],&maxrad_dynamic[1],atom->ntypes, - MPI_DOUBLE,MPI_MAX,world); - MPI_Allreduce(&onerad_frozen[1],&maxrad_frozen[1],atom->ntypes, - MPI_DOUBLE,MPI_MAX,world); -} - -void PairGranHookeCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairGranHookeCuda::init_list\n");) - PairGranHooke::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairGranHookeCuda::init_list end\n");) -} - -void PairGranHookeCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairGranHooke::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.eatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_gran_hooke_cuda.h b/src/USER-CUDA/pair_gran_hooke_cuda.h deleted file mode 100644 index 6fa622ab40..0000000000 --- a/src/USER-CUDA/pair_gran_hooke_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(gran/hooke/cuda,PairGranHookeCuda) - -#else - -#ifndef PAIR_GRAN_HOOKE_CUDA_H -#define PAIR_GRAN_HOOKE_CUDA_H - -#include "pair_gran_hooke.h" - -namespace LAMMPS_NS { - -class PairGranHookeCuda : public PairGranHooke -{ - public: - PairGranHookeCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj96_cut_cuda.cpp b/src/USER-CUDA/pair_lj96_cut_cuda.cpp deleted file mode 100644 index 7edb722d36..0000000000 --- a/src/USER-CUDA/pair_lj96_cut_cuda.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj96_cut_cuda.h" -#include "pair_lj96_cut_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJ96CutCuda::PairLJ96CutCuda(LAMMPS *lmp) : PairLJ96Cut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJ96CutCuda::allocate() -{ - if(! allocated) PairLJ96Cut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJ96CutCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJ96CutCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJ96CutCuda::settings(int narg, char **arg) -{ - PairLJ96Cut::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJ96CutCuda::coeff(int narg, char **arg) -{ - PairLJ96Cut::coeff(narg, arg); - allocate(); -} - -void PairLJ96CutCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJ96CutCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - - cut_respa = NULL; - MYDBG(printf("# CUDA PairLJ96CutCuda::init_style end\n"); ) -} - -void PairLJ96CutCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJ96CutCuda::init_list\n");) - PairLJ96Cut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJ96CutCuda::init_list end\n");) -} - -void PairLJ96CutCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJ96Cut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj96_cut_cuda.h b/src/USER-CUDA/pair_lj96_cut_cuda.h deleted file mode 100644 index 8a8f36e504..0000000000 --- a/src/USER-CUDA/pair_lj96_cut_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj96/cut/cuda,PairLJ96CutCuda) - -#else - -#ifndef PAIR_LJ96_CUT_CUDA_H -#define PAIR_LJ96_CUT_CUDA_H - -#include "pair_lj96_cut.h" - -namespace LAMMPS_NS { - -class PairLJ96CutCuda : public PairLJ96Cut -{ - public: - PairLJ96CutCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.cpp b/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.cpp deleted file mode 100644 index 3a0ad0e288..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_charmm_coul_charmm_cuda.h" -#include "pair_lj_charmm_coul_charmm_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCharmmCoulCharmmCuda::PairLJCharmmCoulCharmmCuda(LAMMPS *lmp) : PairLJCharmmCoulCharmm(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmCuda::allocate() -{ - if(! allocated) PairLJCharmmCoulCharmm::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJCharmmCoulCharmmCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom,denom_lj,cut_coul_innersq,denom_coul); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmCuda::settings(int narg, char **arg) -{ - PairLJCharmmCoulCharmm::settings(narg, arg); - cuda->shared_data.pair.cut_global = (X_CFLOAT) cut_lj; - cuda->shared_data.pair.cut_coulsq_global = (X_CFLOAT) cut_coulsq; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_lj_inner; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmCuda::coeff(int narg, char **arg) -{ - PairLJCharmmCoulCharmm::coeff(narg, arg); - allocate(); -} - -void PairLJCharmmCoulCharmmCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/charmm/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - if(atom->molecular) - { - cuda->shared_data.pair.collect_forces_later = 1; - } - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - if (cut_lj_inner >= cut_lj || cut_coul_inner >= cut_coul) - error->all(FLERR,"Pair inner cutoff >= Pair outer cutoff"); - - cut_lj_innersq = cut_lj_inner * cut_lj_inner; - cut_ljsq = cut_lj * cut_lj; - cut_coul_innersq = cut_coul_inner * cut_coul_inner; - cut_coulsq = cut_coul * cut_coul; - cut_bothsq = MAX(cut_ljsq,cut_coulsq); - - denom_lj = (cut_ljsq-cut_lj_innersq) * (cut_ljsq-cut_lj_innersq) * - (cut_ljsq-cut_lj_innersq); - denom_coul = (cut_coulsq-cut_coul_innersq) * (cut_coulsq-cut_coul_innersq) * - (cut_coulsq-cut_coul_innersq); - - cut_coulsq = cut_coul * cut_coul; - - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; -} - -void PairLJCharmmCoulCharmmCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCharmmCoulCharmmCuda::init_list\n");) - PairLJCharmmCoulCharmm::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCharmmCoulCharmmCuda::init_list end\n");) -} - -void PairLJCharmmCoulCharmmCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCharmmCoulCharmm::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.h b/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.h deleted file mode 100644 index c19411f03c..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_charmm_cuda.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/charmm/coul/charmm/cuda,PairLJCharmmCoulCharmmCuda) - -#else - -#ifndef LMP_PAIR_LJ_CHARMM_COUL_CHARMM_CUDA_H -#define LMP_PAIR_LJ_CHARMM_COUL_CHARMM_CUDA_H - -#include "pair_lj_charmm_coul_charmm.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJCharmmCoulCharmmCuda : public PairLJCharmmCoulCharmm -{ - public: - PairLJCharmmCoulCharmmCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.cpp b/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.cpp deleted file mode 100644 index c2f2ca871f..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_charmm_coul_charmm_implicit_cuda.h" -#include "pair_lj_charmm_coul_charmm_implicit_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCharmmCoulCharmmImplicitCuda::PairLJCharmmCoulCharmmImplicitCuda(LAMMPS *lmp) : PairLJCharmmCoulCharmmImplicit(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.collect_forces_later = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmImplicitCuda::allocate() -{ - if(! allocated) PairLJCharmmCoulCharmmImplicit::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmImplicitCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJCharmmCoulCharmmImplicitCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom,denom_lj,cut_coul_innersq,denom_coul); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmImplicitCuda::settings(int narg, char **arg) -{ - PairLJCharmmCoulCharmmImplicit::settings(narg, arg); - cuda->shared_data.pair.cut_global = (X_CFLOAT) cut_lj; - cuda->shared_data.pair.cut_coulsq_global = (X_CFLOAT) cut_coulsq; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_lj_inner; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulCharmmImplicitCuda::coeff(int narg, char **arg) -{ - PairLJCharmmCoulCharmmImplicit::coeff(narg, arg); - allocate(); -} - -void PairLJCharmmCoulCharmmImplicitCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/charmm/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - if (cut_lj_inner >= cut_lj || cut_coul_inner >= cut_coul) - error->all(FLERR,"Pair inner cutoff >= Pair outer cutoff"); - - cut_lj_innersq = cut_lj_inner * cut_lj_inner; - cut_ljsq = cut_lj * cut_lj; - cut_coul_innersq = cut_coul_inner * cut_coul_inner; - cut_coulsq = cut_coul * cut_coul; - cut_bothsq = MAX(cut_ljsq,cut_coulsq); - - denom_lj = (cut_ljsq-cut_lj_innersq) * (cut_ljsq-cut_lj_innersq) * - (cut_ljsq-cut_lj_innersq); - denom_coul = (cut_coulsq-cut_coul_innersq) * (cut_coulsq-cut_coul_innersq) * - (cut_coulsq-cut_coul_innersq); - - cut_coulsq = cut_coul * cut_coul; - - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; -} - -void PairLJCharmmCoulCharmmImplicitCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCharmmCoulCharmmImplicitCuda::init_list\n");) - PairLJCharmmCoulCharmmImplicit::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCharmmCoulCharmmImplicitCuda::init_list end\n");) -} - -void PairLJCharmmCoulCharmmImplicitCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCharmmCoulCharmmImplicit::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.h b/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.h deleted file mode 100644 index b3cc8c9336..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_charmm_implicit_cuda.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/charmm/coul/charmm/implicit/cuda,PairLJCharmmCoulCharmmImplicitCuda) - -#else - -#ifndef LMP_PAIR_LJ_CHARMM_COUL_CHARMM_IMPLICIT_CUDA_H -#define LMP_PAIR_LJ_CHARMM_COUL_CHARMM_IMPLICIT_CUDA_H - -#include "pair_lj_charmm_coul_charmm_implicit.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJCharmmCoulCharmmImplicitCuda : public PairLJCharmmCoulCharmmImplicit -{ - public: - PairLJCharmmCoulCharmmImplicitCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.cpp b/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.cpp deleted file mode 100644 index b228bd6f41..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_charmm_coul_long_cuda.h" -#include "pair_lj_charmm_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -#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 -/* ---------------------------------------------------------------------- */ - -PairLJCharmmCoulLongCuda::PairLJCharmmCoulLongCuda(LAMMPS *lmp) : PairLJCharmmCoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.collect_forces_later = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCharmmCoulLongCuda::allocate() -{ - if(! allocated) PairLJCharmmCoulLong::allocate(); - if(! allocated2) - { - allocated2 = true; - //cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulLongCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJCharmmCoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom,denom_lj); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulLongCuda::settings(int narg, char **arg) -{ - PairLJCharmmCoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (X_CFLOAT) cut_lj; - cuda->shared_data.pair.cut_coulsq_global = (X_CFLOAT) cut_coulsq; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_lj_inner; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCharmmCoulLongCuda::coeff(int narg, char **arg) -{ - PairLJCharmmCoulLong::coeff(narg, arg); - allocate(); -} - -void PairLJCharmmCoulLongCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/charmm/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - if (cut_lj_inner >= cut_lj) - error->all(FLERR,"Pair inner cutoff >= Pair outer cutoff"); - - cut_lj_innersq = cut_lj_inner * cut_lj_inner; - cut_ljsq = cut_lj * cut_lj; - cut_coulsq = cut_coul * cut_coul; - cut_bothsq = MAX(cut_ljsq,cut_coulsq); - - denom_lj = (cut_ljsq-cut_lj_innersq) * (cut_ljsq-cut_lj_innersq) * - (cut_ljsq-cut_lj_innersq); - - cut_coulsq = cut_coul * cut_coul; - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - if (force->kspace == NULL) - error->all(FLERR,"Pair style is incompatible with KSpace style"); - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairLJCharmmCoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCharmmCoulLongCuda::init_list\n");) - PairLJCharmmCoulLong::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCharmmCoulLongCuda::init_list end\n");) -} - -void PairLJCharmmCoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCharmmCoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.h b/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.h deleted file mode 100644 index 8d9048a341..0000000000 --- a/src/USER-CUDA/pair_lj_charmm_coul_long_cuda.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/charmm/coul/long/cuda,PairLJCharmmCoulLongCuda) - -#else - -#ifndef LMP_PAIR_LJ_CHARMM_COUL_LONG_CUDA_H -#define LMP_PAIR_LJ_CHARMM_COUL_LONG_CUDA_H - -#include "pair_lj_charmm_coul_long.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJCharmmCoulLongCuda : public PairLJCharmmCoulLong -{ - public: - PairLJCharmmCoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.cpp b/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.cpp deleted file mode 100644 index 01b6dc071f..0000000000 --- a/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_class2_coul_cut_cuda.h" -#include "pair_lj_class2_coul_cut_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJClass2CoulCutCuda::PairLJClass2CoulCutCuda(LAMMPS *lmp) : PairLJClass2CoulCut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJClass2CoulCutCuda::allocate() -{ - if(! allocated) PairLJClass2CoulCut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.cut_coul= cut_coul; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulCutCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJClass2CoulCutCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulCutCuda::settings(int narg, char **arg) -{ - PairLJClass2CoulCut::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; - cuda->shared_data.pair.cut_coul_global = (F_CFLOAT) cut_coul_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulCutCuda::coeff(int narg, char **arg) -{ - PairLJClass2CoulCut::coeff(narg, arg); - allocate(); -} - -void PairLJClass2CoulCutCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/cut/coul/cut/cuda requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - -} - -void PairLJClass2CoulCutCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJClass2CoulCutCuda::init_list\n");) - PairLJClass2CoulCut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJClass2CoulCutCuda::init_list end\n");) -} - -void PairLJClass2CoulCutCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJClass2CoulCut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.h b/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.h deleted file mode 100644 index 6601e2797c..0000000000 --- a/src/USER-CUDA/pair_lj_class2_coul_cut_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/class2/coul/cut/cuda,PairLJClass2CoulCutCuda) - -#else - -#ifndef LMP_PAIR_LJ_CLASS2_COUL_CUT_CUDA_H -#define LMP_PAIR_LJ_CLASS2_COUL_CUT_CUDA_H - -#include "pair_lj_class2_coul_cut.h" - -namespace LAMMPS_NS { - -class PairLJClass2CoulCutCuda : public PairLJClass2CoulCut -{ - public: - PairLJClass2CoulCutCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_class2_coul_long_cuda.cpp b/src/USER-CUDA/pair_lj_class2_coul_long_cuda.cpp deleted file mode 100644 index 20f257ffea..0000000000 --- a/src/USER-CUDA/pair_lj_class2_coul_long_cuda.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_class2_coul_long_cuda.h" -#include "pair_lj_class2_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -#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 -/* ---------------------------------------------------------------------- */ - -PairLJClass2CoulLongCuda::PairLJClass2CoulLongCuda(LAMMPS *lmp) : PairLJClass2CoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJClass2CoulLongCuda::allocate() -{ - if(! allocated) PairLJClass2CoulLong::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulLongCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJClass2CoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulLongCuda::settings(int narg, char **arg) -{ - PairLJClass2CoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2CoulLongCuda::coeff(int narg, char **arg) -{ - PairLJClass2CoulLong::coeff(narg, arg); - allocate(); -} - -void PairLJClass2CoulLongCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/cut/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - cut_coulsq = cut_coul * cut_coul; - cuda->shared_data.pair.cut_coul_global=cut_coul; - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - // set rRESPA cutoffs - - if (force->newton) error->warning(FLERR,"Pair style uses does not use \"newton\" setting. You might test if \"newton off\" makes the simulation run faster."); - if (force->kspace == NULL) - error->all(FLERR,"Pair style is incompatible with KSpace style"); - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairLJClass2CoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJClass2CoulLongCuda::init_list\n");) - PairLJClass2CoulLong::init_list(id, ptr); - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - MYDBG(printf("# CUDA PairLJClass2CoulLongCuda::init_list end\n");) -} - -void PairLJClass2CoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJClass2CoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_class2_coul_long_cuda.h b/src/USER-CUDA/pair_lj_class2_coul_long_cuda.h deleted file mode 100644 index 43af51b4ed..0000000000 --- a/src/USER-CUDA/pair_lj_class2_coul_long_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/class2/coul/long/cuda,PairLJClass2CoulLongCuda) - -#else - -#ifndef LMP_PAIR_LJ_CLASS2_COUL_LONG_CUDA_H -#define LMP_PAIR_LJ_CLASS2_COUL_LONG_CUDA_H - -#include "pair_lj_class2_coul_long.h" - -namespace LAMMPS_NS { - -class PairLJClass2CoulLongCuda : public PairLJClass2CoulLong -{ - public: - PairLJClass2CoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_class2_cuda.cpp b/src/USER-CUDA/pair_lj_class2_cuda.cpp deleted file mode 100644 index 6b9f686c13..0000000000 --- a/src/USER-CUDA/pair_lj_class2_cuda.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_class2_cuda.h" -#include "pair_lj_class2_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJClass2Cuda::PairLJClass2Cuda(LAMMPS *lmp) : PairLJClass2(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJClass2Cuda::allocate() -{ - if(! allocated) PairLJClass2::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2Cuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJClass2Cuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2Cuda::settings(int narg, char **arg) -{ - PairLJClass2::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2Cuda::coeff(int narg, char **arg) -{ - PairLJClass2::coeff(narg, arg); - allocate(); -} - -void PairLJClass2Cuda::init_style() -{ - MYDBG(printf("# CUDA PairLJClass2Cuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - MYDBG(printf("# CUDA PairLJClass2Cuda::init_style end\n"); ) -} - -void PairLJClass2Cuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJClass2Cuda::init_list\n");) - PairLJClass2::init_list(id, ptr); - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - MYDBG(printf("# CUDA PairLJClass2Cuda::init_list end\n");) -} - -void PairLJClass2Cuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJClass2::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_class2_cuda.h b/src/USER-CUDA/pair_lj_class2_cuda.h deleted file mode 100644 index 6f2673c4a3..0000000000 --- a/src/USER-CUDA/pair_lj_class2_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/class2/cuda,PairLJClass2Cuda) - -#else - -#ifndef PAIR_LJ_CLASS2_CUDA_H -#define PAIR_LJ_CLASS2_CUDA_H - -#include "pair_lj_class2.h" - -namespace LAMMPS_NS { - -class PairLJClass2Cuda : public PairLJClass2 -{ - public: - PairLJClass2Cuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.cpp b/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.cpp deleted file mode 100644 index 3872be0d0e..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_cut_coul_cut_cuda.h" -#include "pair_lj_cut_coul_cut_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCutCoulCutCuda::PairLJCutCoulCutCuda(LAMMPS *lmp) : PairLJCutCoulCut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCutCoulCutCuda::allocate() -{ - if(! allocated) PairLJCutCoulCut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.cut_coul= cut_coul; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulCutCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJCutCoulCutCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulCutCuda::settings(int narg, char **arg) -{ - PairLJCutCoulCut::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; - cuda->shared_data.pair.cut_coul_global = (F_CFLOAT) cut_coul_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulCutCuda::coeff(int narg, char **arg) -{ - PairLJCutCoulCut::coeff(narg, arg); - allocate(); -} - -void PairLJCutCoulCutCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/cut/coul/cut/cuda requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - -} - -void PairLJCutCoulCutCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCutCoulCutCuda::init_list\n");) - PairLJCutCoulCut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCutCoulCutCuda::init_list end\n");) -} - -void PairLJCutCoulCutCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCutCoulCut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.h b/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.h deleted file mode 100644 index 10f44c76da..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_cut_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/cut/coul/cut/cuda,PairLJCutCoulCutCuda) - -#else - -#ifndef LMP_PAIR_LJ_CUT_COUL_CUT_CUDA_H -#define LMP_PAIR_LJ_CUT_COUL_CUT_CUDA_H - -#include "pair_lj_cut_coul_cut.h" - -namespace LAMMPS_NS { - -class PairLJCutCoulCutCuda : public PairLJCutCoulCut -{ - public: - PairLJCutCoulCutCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.cpp b/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.cpp deleted file mode 100644 index 43bcce68c9..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_cut_coul_debye_cuda.h" -#include "pair_lj_cut_coul_debye_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCutCoulDebyeCuda::PairLJCutCoulDebyeCuda(LAMMPS *lmp) : PairLJCutCoulDebye(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCutCoulDebyeCuda::allocate() -{ - if(! allocated) PairLJCutCoulDebye::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.cut_coul= cut_coul; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulDebyeCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJCutCoulDebyeCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulDebyeCuda::settings(int narg, char **arg) -{ - PairLJCutCoulDebye::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; - cuda->shared_data.pair.cut_coul_global = (F_CFLOAT) cut_coul_global; - cuda->shared_data.pair.kappa = (F_CFLOAT) kappa; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulDebyeCuda::coeff(int narg, char **arg) -{ - PairLJCutCoulDebye::coeff(narg, arg); - allocate(); -} - -void PairLJCutCoulDebyeCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/cut/coul/debye/cuda requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - -} - -void PairLJCutCoulDebyeCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCutCoulDebyeCuda::init_list\n");) - PairLJCutCoulDebye::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCutCoulDebyeCuda::init_list end\n");) -} - -void PairLJCutCoulDebyeCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCutCoulDebye::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.h b/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.h deleted file mode 100644 index aea3a42f66..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_debye_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/cut/coul/debye/cuda,PairLJCutCoulDebyeCuda) - -#else - -#ifndef LMP_PAIR_LJ_CUT_COUL_DEBYE_CUDA_H -#define LMP_PAIR_LJ_CUT_COUL_DEBYE_CUDA_H - -#include "pair_lj_cut_coul_debye.h" - -namespace LAMMPS_NS { - -class PairLJCutCoulDebyeCuda : public PairLJCutCoulDebye -{ - public: - PairLJCutCoulDebyeCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_cut_coul_long_cuda.cpp b/src/USER-CUDA/pair_lj_cut_coul_long_cuda.cpp deleted file mode 100644 index 52397f9429..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_long_cuda.cpp +++ /dev/null @@ -1,216 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_cut_coul_long_cuda.h" -#include "pair_lj_cut_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -#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 -/* ---------------------------------------------------------------------- */ - -PairLJCutCoulLongCuda::PairLJCutCoulLongCuda(LAMMPS *lmp) : PairLJCutCoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCutCoulLongCuda::allocate() -{ - if(! allocated) PairLJCutCoulLong::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulLongCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJCutCoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulLongCuda::settings(int narg, char **arg) -{ - PairLJCutCoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCoulLongCuda::coeff(int narg, char **arg) -{ - PairLJCutCoulLong::coeff(narg, arg); - allocate(); -} - -void PairLJCutCoulLongCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/cut/coul/long requires atom attribute q"); - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - int respa = 0; - if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; - if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; - - if (respa == 0) irequest = neighbor->request(this,instance_me); - else if (respa == 1) { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respainner = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 3; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respaouter = 1; - } else { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respainner = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 2; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respamiddle = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 3; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respaouter = 1; - } - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - } - - cut_coulsq = cut_coul * cut_coul; - cuda->shared_data.pair.cut_coul_global=cut_coul; - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - // set rRESPA cutoffs - - if (strstr(update->integrate_style,"respa") && - ((Respa *) update->integrate)->level_inner >= 0) - cut_respa = ((Respa *) update->integrate)->cutoff; - else cut_respa = NULL; - - if (force->newton) error->warning(FLERR,"Pair style uses does not use \"newton\" setting. You might test if \"newton off\" makes the simulation run faster."); - if (force->kspace == NULL) - error->all(FLERR,"Pair style is incompatible with KSpace style"); - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - - - if(ncoultablebits) error->warning(FLERR,"# CUDA: You asked for the usage of Coulomb Tables. This is not supported in CUDA Pair forces. Setting is ignored.\n"); -} - -void PairLJCutCoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCutCoulLongCuda::init_list\n");) - PairLJCutCoulLong::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCutCoulLongCuda::init_list end\n");) -} - -void PairLJCutCoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCutCoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_cut_coul_long_cuda.h b/src/USER-CUDA/pair_lj_cut_coul_long_cuda.h deleted file mode 100644 index 2c7e55eb1e..0000000000 --- a/src/USER-CUDA/pair_lj_cut_coul_long_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/cut/coul/long/cuda,PairLJCutCoulLongCuda) - -#else - -#ifndef LMP_PAIR_LJ_CUT_COUL_LONG_CUDA_H -#define LMP_PAIR_LJ_CUT_COUL_LONG_CUDA_H - -#include "pair_lj_cut_coul_long.h" - -namespace LAMMPS_NS { - -class PairLJCutCoulLongCuda : public PairLJCutCoulLong -{ - public: - PairLJCutCoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_cut_cuda.cpp b/src/USER-CUDA/pair_lj_cut_cuda.cpp deleted file mode 100644 index a5d4f47a51..0000000000 --- a/src/USER-CUDA/pair_lj_cut_cuda.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_cut_cuda.h" -#include "pair_lj_cut_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCutCuda::PairLJCutCuda(LAMMPS *lmp) : PairLJCut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCutCuda::allocate() -{ - if(! allocated) PairLJCut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJCutCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCuda::settings(int narg, char **arg) -{ - PairLJCut::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutCuda::coeff(int narg, char **arg) -{ - PairLJCut::coeff(narg, arg); - allocate(); -} - -void PairLJCutCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJCutCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - - cut_respa = NULL; - MYDBG(printf("# CUDA PairLJCutCuda::init_style end\n"); ) -} - -void PairLJCutCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCutCuda::init_list\n");) - PairLJCut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCutCuda::init_list end\n");) -} - -void PairLJCutCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_cut_cuda.h b/src/USER-CUDA/pair_lj_cut_cuda.h deleted file mode 100644 index f42c7d04c0..0000000000 --- a/src/USER-CUDA/pair_lj_cut_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/cut/cuda,PairLJCutCuda) - -#else - -#ifndef PAIR_LJ_CUT_CUDA_H -#define PAIR_LJ_CUT_CUDA_H - -#include "pair_lj_cut.h" - -namespace LAMMPS_NS { - -class PairLJCutCuda : public PairLJCut -{ - public: - PairLJCutCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_cut_experimental_cuda.cpp b/src/USER-CUDA/pair_lj_cut_experimental_cuda.cpp deleted file mode 100644 index f60aaa6f38..0000000000 --- a/src/USER-CUDA/pair_lj_cut_experimental_cuda.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_cut_experimental_cuda.h" -#include "pair_lj_cut_experimental_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJCutExperimentalCuda::PairLJCutExperimentalCuda(LAMMPS *lmp) : PairLJCut(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJCutExperimentalCuda::allocate() -{ - if(! allocated) PairLJCut::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutExperimentalCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - Cuda_PairLJCutExperimentalCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - CudaWrapper_Sync(); - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - } - -/* ---------------------------------------------------------------------- */ - -void PairLJCutExperimentalCuda::settings(int narg, char **arg) -{ - PairLJCut::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJCutExperimentalCuda::coeff(int narg, char **arg) -{ - PairLJCut::coeff(narg, arg); - allocate(); -} - -void PairLJCutExperimentalCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJCutExperimentalCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - - cut_respa = NULL; - MYDBG(printf("# CUDA PairLJCutExperimentalCuda::init_style end\n"); ) -} - -void PairLJCutExperimentalCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJCutExperimentalCuda::init_list\n");) - PairLJCut::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJCutExperimentalCuda::init_list end\n");) -} - -void PairLJCutExperimentalCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJCut::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_cut_experimental_cuda.h b/src/USER-CUDA/pair_lj_cut_experimental_cuda.h deleted file mode 100644 index fafb2d63d4..0000000000 --- a/src/USER-CUDA/pair_lj_cut_experimental_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/cut/experimental/cuda,PairLJCutExperimentalCuda) - -#else - -#ifndef PAIR_LJ_CUT_EXPERIMENTAL_CUDA_H -#define PAIR_LJ_CUT_EXPERIMENTAL_CUDA_H - -#include "pair_lj_cut.h" - -namespace LAMMPS_NS { - -class PairLJCutExperimentalCuda : public PairLJCut -{ - public: - PairLJCutExperimentalCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_expand_cuda.cpp b/src/USER-CUDA/pair_lj_expand_cuda.cpp deleted file mode 100644 index a102dea75a..0000000000 --- a/src/USER-CUDA/pair_lj_expand_cuda.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_expand_cuda.h" -#include "pair_lj_expand_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJExpandCuda::PairLJExpandCuda(LAMMPS *lmp) : PairLJExpand(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJExpandCuda::allocate() -{ - if(! allocated) PairLJExpand::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.cutsq = cutsq; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = shift; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJExpandCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJExpandCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJExpandCuda::settings(int narg, char **arg) -{ - PairLJExpand::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJExpandCuda::coeff(int narg, char **arg) -{ - PairLJExpand::coeff(narg, arg); - allocate(); -} - -void PairLJExpandCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJExpandCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - - MYDBG(printf("# CUDA PairLJExpandCuda::init_style end\n"); ) -} - -void PairLJExpandCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJExpandCuda::init_list\n");) - PairLJExpand::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJExpandCuda::init_list end\n");) -} - -void PairLJExpandCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJExpand::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_expand_cuda.h b/src/USER-CUDA/pair_lj_expand_cuda.h deleted file mode 100644 index b61578c295..0000000000 --- a/src/USER-CUDA/pair_lj_expand_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/expand/cuda,PairLJExpandCuda) - -#else - -#ifndef PAIR_LJ_EXPAND_CUDA_H -#define PAIR_LJ_EXPAND_CUDA_H - -#include "pair_lj_expand.h" - -namespace LAMMPS_NS { - -class PairLJExpandCuda : public PairLJExpand -{ - public: - PairLJExpandCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.cpp b/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.cpp deleted file mode 100644 index 73df6a66cb..0000000000 --- a/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_gromacs_coul_gromacs_cuda.h" -#include "pair_lj_gromacs_coul_gromacs_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJGromacsCoulGromacsCuda::PairLJGromacsCoulGromacsCuda(LAMMPS *lmp) : PairLJGromacsCoulGromacs(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJGromacsCoulGromacsCuda::allocate() -{ - if(! allocated) PairLJGromacsCoulGromacs::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = ljsw1; - cuda->shared_data.pair.coeff6 = ljsw2; - cuda->shared_data.pair.coeff7 = ljsw3; - cuda->shared_data.pair.coeff8 = ljsw4; - cuda->shared_data.pair.coeff9 = ljsw5; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw1_gm = new cCudaData ((double*)ljsw1, &cuda->shared_data.pair.coeff5_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw2_gm = new cCudaData ((double*)ljsw2, &cuda->shared_data.pair.coeff6_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw3_gm = new cCudaData ((double*)ljsw3, &cuda->shared_data.pair.coeff7_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw4_gm = new cCudaData ((double*)ljsw4, &cuda->shared_data.pair.coeff8_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw5_gm = new cCudaData ((double*)ljsw5, &cuda->shared_data.pair.coeff9_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCoulGromacsCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJGromacsCoulGromacsCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom,cut_coul_inner,coulsw1,coulsw2,coulsw5); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCoulGromacsCuda::settings(int narg, char **arg) -{ - PairLJGromacsCoulGromacs::settings(narg, arg); - cuda->shared_data.pair.cut_global = (X_CFLOAT) cut_lj; - cuda->shared_data.pair.cut_coulsq_global = (X_CFLOAT) cut_coulsq; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_lj_inner; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCoulGromacsCuda::coeff(int narg, char **arg) -{ - PairLJGromacsCoulGromacs::coeff(narg, arg); - allocate(); -} - -void PairLJGromacsCoulGromacsCuda::init_style() -{ - if (!atom->q_flag) - error->all(FLERR,"Pair style lj/gromacs/coul/gromacs requires atom attribute q"); - // request regular or rRESPA neighbor lists - - if(atom->molecular) - { - cuda->shared_data.pair.collect_forces_later = 1; - } - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - if (cut_lj_inner >= cut_lj || cut_coul_inner >= cut_coul) - error->all(FLERR,"Pair inner cutoff >= Pair outer cutoff"); - - cut_lj_innersq = cut_lj_inner * cut_lj_inner; - cut_ljsq = cut_lj * cut_lj; - cut_coul_innersq = cut_coul_inner * cut_coul_inner; - cut_coulsq = cut_coul * cut_coul; - cut_bothsq = MAX(cut_ljsq,cut_coulsq); - - - cut_coulsq = cut_coul * cut_coul; - - cuda->shared_data.pair.cut_coulsq_global=cut_coulsq; - - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; -} - -void PairLJGromacsCoulGromacsCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJGromacsCoulGromacsCuda::init_list\n");) - PairLJGromacsCoulGromacs::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJGromacsCoulGromacsCuda::init_list end\n");) -} - -void PairLJGromacsCoulGromacsCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJGromacsCoulGromacs::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.h b/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.h deleted file mode 100644 index 6e48df1931..0000000000 --- a/src/USER-CUDA/pair_lj_gromacs_coul_gromacs_cuda.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/gromacs/coul/gromacs/cuda,PairLJGromacsCoulGromacsCuda) - -#else - -#ifndef LMP_PAIR_LJ_GROMACS_COUL_GROMACS_CUDA_H -#define LMP_PAIR_LJ_GROMACS_COUL_GROMACS_CUDA_H - -#include "pair_lj_gromacs_coul_gromacs.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJGromacsCoulGromacsCuda : public PairLJGromacsCoulGromacs -{ - public: - PairLJGromacsCoulGromacsCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; - cCudaData* cu_ljsw1_gm; - cCudaData* cu_ljsw2_gm; - cCudaData* cu_ljsw3_gm; - cCudaData* cu_ljsw4_gm; - cCudaData* cu_ljsw5_gm; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_gromacs_cuda.cpp b/src/USER-CUDA/pair_lj_gromacs_cuda.cpp deleted file mode 100644 index b2786d81ab..0000000000 --- a/src/USER-CUDA/pair_lj_gromacs_cuda.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_gromacs_cuda.h" -#include "pair_lj_gromacs_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJGromacsCuda::PairLJGromacsCuda(LAMMPS *lmp) : PairLJGromacs(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJGromacsCuda::allocate() -{ - if(! allocated) PairLJGromacs::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.cut_inner = cut_inner; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = ljsw1; - cuda->shared_data.pair.coeff6 = ljsw2; - cuda->shared_data.pair.coeff7 = ljsw3; - cuda->shared_data.pair.coeff8 = ljsw4; - cuda->shared_data.pair.coeff9 = ljsw5; - cuda->shared_data.pair.special_lj = force->special_lj; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw1_gm = new cCudaData ((double*)ljsw1, &cuda->shared_data.pair.coeff5_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw2_gm = new cCudaData ((double*)ljsw2, &cuda->shared_data.pair.coeff6_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw3_gm = new cCudaData ((double*)ljsw3, &cuda->shared_data.pair.coeff7_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw4_gm = new cCudaData ((double*)ljsw4, &cuda->shared_data.pair.coeff8_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw5_gm = new cCudaData ((double*)ljsw5, &cuda->shared_data.pair.coeff9_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJGromacsCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCuda::settings(int narg, char **arg) -{ - PairLJGromacs::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_inner_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJGromacsCuda::coeff(int narg, char **arg) -{ - PairLJGromacs::coeff(narg, arg); - allocate(); -} - -void PairLJGromacsCuda::init_style() -{ - // request regular or rRESPA neighbor lists - - if(atom->molecular) - { - cuda->shared_data.pair.collect_forces_later = 1; - } - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - -} - -void PairLJGromacsCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJGromacsCuda::init_list\n");) - PairLJGromacs::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJGromacsCuda::init_list end\n");) -} - -void PairLJGromacsCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJGromacs::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_gromacs_cuda.h b/src/USER-CUDA/pair_lj_gromacs_cuda.h deleted file mode 100644 index b4bbc15c6d..0000000000 --- a/src/USER-CUDA/pair_lj_gromacs_cuda.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/gromacs/cuda,PairLJGromacsCuda) - -#else - -#ifndef LMP_PAIR_LJ_GROMACS_CUDA_H -#define LMP_PAIR_LJ_GROMACS_CUDA_H - -#include "pair_lj_gromacs.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJGromacsCuda : public PairLJGromacs -{ - public: - PairLJGromacsCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; - cCudaData* cu_ljsw1_gm; - cCudaData* cu_ljsw2_gm; - cCudaData* cu_ljsw3_gm; - cCudaData* cu_ljsw4_gm; - cCudaData* cu_ljsw5_gm; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.cpp b/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.cpp deleted file mode 100644 index aca0f6d013..0000000000 --- a/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_sdk_coul_long_cuda.h" -#include "pair_lj_sdk_coul_long_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJSDKCoulLongCuda::PairLJSDKCoulLongCuda(LAMMPS *lmp) : PairLJSDKCoulLong(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - lj_type_double = NULL; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJSDKCoulLongCuda::allocate() -{ - if(! allocated) PairLJSDKCoulLong::allocate(); - int n = atom->ntypes; - if(! allocated2) - { - allocated2 = true; - - - memory->create(lj_type_double,n+1,n+1,"pairlj:ljtypedouble"); - - cuda->shared_data.pair.cut = cut_lj; - cuda->shared_data.pair.cut_coul= NULL; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = lj_type_double; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - - } - for (int i = 1; i <= n; i++) { - for (int j = i; j <= n; j++) { - lj_type_double[i][j] = lj_type[i][j]; - lj_type_double[j][i] = lj_type[i][j]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCoulLongCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(eflag) cuda->cu_eng_coul->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJSDKCoulLongCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(eflag) cuda->cu_eng_coul->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCoulLongCuda::settings(int narg, char **arg) -{ - PairLJSDKCoulLong::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_lj_global; - cuda->shared_data.pair.cut_coul_global = (F_CFLOAT) cut_coul; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCoulLongCuda::coeff(int narg, char **arg) -{ - PairLJSDKCoulLong::coeff(narg, arg); - allocate(); -} - -void PairLJSDKCoulLongCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJSDKCoulLongCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - g_ewald = force->kspace->g_ewald; - cuda->shared_data.pair.g_ewald=g_ewald; - cuda->shared_data.pppm.qqrd2e=force->qqrd2e; - if (force->newton) error->warning(FLERR,"Pair style uses does not use \"newton\" setting. You might test if \"newton off\" makes the simulation run faster."); - MYDBG(printf("# CUDA PairLJSDKCoulLongCuda::init_style end\n"); ) -} - -void PairLJSDKCoulLongCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJSDKCoulLongCuda::init_list\n");) - PairLJSDKCoulLong::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJSDKCoulLongCuda::init_list end\n");) -} - -void PairLJSDKCoulLongCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJSDKCoulLong::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.h b/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.h deleted file mode 100644 index 4b5c07c79d..0000000000 --- a/src/USER-CUDA/pair_lj_sdk_coul_long_cuda.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(cg/cmm/coul/long/cuda,PairLJSDKCoulLongCuda) -PairStyle(lj/sdk/coul/long/cuda,PairLJSDKCoulLongCuda) - -#else - -#ifndef PAIR_LJ_SDK_COUL_LONG_CUDA_H -#define PAIR_LJ_SDK_COUL_LONG_CUDA_H - -#include "pair_lj_sdk_coul_long.h" - -namespace LAMMPS_NS { - -class PairLJSDKCoulLongCuda : public PairLJSDKCoulLong -{ - public: - PairLJSDKCoulLongCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - double** lj_type_double; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_sdk_cuda.cpp b/src/USER-CUDA/pair_lj_sdk_cuda.cpp deleted file mode 100644 index f6eba1ba7b..0000000000 --- a/src/USER-CUDA/pair_lj_sdk_cuda.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_sdk_cuda.h" -#include "pair_lj_sdk_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJSDKCuda::PairLJSDKCuda(LAMMPS *lmp) : PairLJSDK(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - lj_type_double = NULL; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJSDKCuda::allocate() -{ - if(! allocated) PairLJSDK::allocate(); - int n = atom->ntypes; - if(! allocated2) - { - allocated2 = true; - - - memory->create(lj_type_double,n+1,n+1,"pairlj:ljtypedouble"); - - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = lj_type_double; - /*cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj_type_double_gm = new cCudaData ((double*)lj_type_double, &cuda->shared_data.pair.coeff5_gm, (atom->ntypes+1)*(atom->ntypes+1));*/ - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - } - for (int i = 1; i <= n; i++) { - for (int j = i; j <= n; j++) { - lj_type_double[i][j] = lj_type[i][j]; - lj_type_double[j][i] = lj_type[i][j]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairLJSDKCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCuda::settings(int narg, char **arg) -{ - PairLJSDK::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSDKCuda::coeff(int narg, char **arg) -{ - PairLJSDK::coeff(narg, arg); - allocate(); -} - -void PairLJSDKCuda::init_style() -{ - MYDBG(printf("# CUDA PairLJSDKCuda::init_style start\n"); ) - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - MYDBG(printf("# CUDA PairLJSDKCuda::init_style end\n"); ) -} - -void PairLJSDKCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJSDKCuda::init_list\n");) - PairLJSDK::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJSDKCuda::init_list end\n");) -} - -void PairLJSDKCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJSDK::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_sdk_cuda.h b/src/USER-CUDA/pair_lj_sdk_cuda.h deleted file mode 100644 index 5e7807cbd7..0000000000 --- a/src/USER-CUDA/pair_lj_sdk_cuda.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/sdk/cuda,PairLJSDKCuda) -PairStyle(cg/cmm/cuda,PairLJSDKCuda) - -#else - -#ifndef PAIR_LJ_SDK_CUDA_H -#define PAIR_LJ_SDK_CUDA_H - -#include "pair_lj_sdk.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJSDKCuda : public PairLJSDK -{ - public: - PairLJSDKCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - double** lj_type_double; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; - cCudaData* cu_lj_type_double_gm; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_lj_smooth_cuda.cpp b/src/USER-CUDA/pair_lj_smooth_cuda.cpp deleted file mode 100644 index 3a51e94fef..0000000000 --- a/src/USER-CUDA/pair_lj_smooth_cuda.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - Contributing author: Paul Crozier (SNL) - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_smooth_cuda.h" -#include "pair_lj_smooth_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "kspace.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairLJSmoothCuda::PairLJSmoothCuda(LAMMPS *lmp) : PairLJSmooth(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.use_block_per_atom = 0; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairLJSmoothCuda::allocate() -{ - if(! allocated) PairLJSmooth::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.cut_inner = cut_inner; - cuda->shared_data.pair.coeff1 = lj1; - cuda->shared_data.pair.coeff2 = lj2; - cuda->shared_data.pair.coeff3 = lj3; - cuda->shared_data.pair.coeff4 = lj4; - cuda->shared_data.pair.coeff5 = ljsw1; - cuda->shared_data.pair.coeff6 = ljsw2; - cuda->shared_data.pair.coeff7 = ljsw3; - cuda->shared_data.pair.coeff8 = ljsw4; - cuda->shared_data.pair.coeff9 = ljsw0; - cuda->shared_data.pair.special_lj = force->special_lj; - cu_lj1_gm = new cCudaData ((double*)lj1, &cuda->shared_data.pair.coeff1_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj2_gm = new cCudaData ((double*)lj2, &cuda->shared_data.pair.coeff2_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj3_gm = new cCudaData ((double*)lj3, &cuda->shared_data.pair.coeff3_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_lj4_gm = new cCudaData ((double*)lj4, &cuda->shared_data.pair.coeff4_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw0_gm = new cCudaData ((double*)ljsw0, &cuda->shared_data.pair.coeff9_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw1_gm = new cCudaData ((double*)ljsw1, &cuda->shared_data.pair.coeff5_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw2_gm = new cCudaData ((double*)ljsw2, &cuda->shared_data.pair.coeff6_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw3_gm = new cCudaData ((double*)ljsw3, &cuda->shared_data.pair.coeff7_gm, (atom->ntypes+1)*(atom->ntypes+1)); - cu_ljsw4_gm = new cCudaData ((double*)ljsw4, &cuda->shared_data.pair.coeff8_gm, (atom->ntypes+1)*(atom->ntypes+1)); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSmoothCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - } - - Cuda_PairLJSmoothCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSmoothCuda::settings(int narg, char **arg) -{ - PairLJSmooth::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; - cuda->shared_data.pair.cut_inner_global = (F_CFLOAT) cut_inner_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairLJSmoothCuda::coeff(int narg, char **arg) -{ - PairLJSmooth::coeff(narg, arg); - allocate(); -} - -void PairLJSmoothCuda::init_style() -{ - // request regular or rRESPA neighbor lists - - if(atom->molecular) - { - cuda->shared_data.pair.collect_forces_later = 1; - } - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - - - -} - -void PairLJSmoothCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairLJSmoothCuda::init_list\n");) - PairLJSmooth::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairLJSmoothCuda::init_list end\n");) -} - -void PairLJSmoothCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairLJSmooth::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_lj_smooth_cuda.h b/src/USER-CUDA/pair_lj_smooth_cuda.h deleted file mode 100644 index 0a57e6f663..0000000000 --- a/src/USER-CUDA/pair_lj_smooth_cuda.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(lj/smooth/cuda,PairLJSmoothCuda) - -#else - -#ifndef LMP_PAIR_LJ_SMOOTH_CUDA_H -#define LMP_PAIR_LJ_SMOOTH_CUDA_H - -#include "pair_lj_smooth.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairLJSmoothCuda : public PairLJSmooth -{ - public: - PairLJSmoothCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - cCudaData* cu_lj1_gm; - cCudaData* cu_lj2_gm; - cCudaData* cu_lj3_gm; - cCudaData* cu_lj4_gm; - cCudaData* cu_ljsw0_gm; - cCudaData* cu_ljsw1_gm; - cCudaData* cu_ljsw2_gm; - cCudaData* cu_ljsw3_gm; - cCudaData* cu_ljsw4_gm; - -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_morse_cuda.cpp b/src/USER-CUDA/pair_morse_cuda.cpp deleted file mode 100644 index a38712aabe..0000000000 --- a/src/USER-CUDA/pair_morse_cuda.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_morse_cuda.h" -#include "pair_morse_cuda_cu.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairMorseCuda::PairMorseCuda(LAMMPS *lmp) : PairMorse(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - cuda->shared_data.pair.cudable_force = 1; - cuda->setSystemParams(); -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairMorseCuda::allocate() -{ - if(! allocated) PairMorse::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cut = cut; - cuda->shared_data.pair.coeff1 = r0; - cuda->shared_data.pair.coeff2 = alpha; - cuda->shared_data.pair.coeff3 = morse1; - cuda->shared_data.pair.coeff4 = d0; - cuda->shared_data.pair.offset = offset; - cuda->shared_data.pair.special_lj = force->special_lj; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairMorseCuda::compute(int eflag, int vflag) -{ - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairMorseCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom); - - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } - -} - -/* ---------------------------------------------------------------------- */ - -void PairMorseCuda::settings(int narg, char **arg) -{ - PairMorse::settings(narg, arg); - cuda->shared_data.pair.cut_global = (F_CFLOAT) cut_global; -} - -/* ---------------------------------------------------------------------- */ - -void PairMorseCuda::coeff(int narg, char **arg) -{ - PairMorse::coeff(narg, arg); - allocate(); -} - -void PairMorseCuda::init_style() -{ - MYDBG(printf("# CUDA PairMorseCuda::init_style start\n"); ) - // request regular or rRESPA neighbor lists - - int irequest; - - if (update->whichflag == 0 && strstr(update->integrate_style,"respa")) { - - } - else - { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - //neighbor->style=0; //0=NSQ neighboring - } - - - MYDBG(printf("# CUDA PairMorseCuda::init_style end\n"); ) -} - -void PairMorseCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairMorseCuda::init_list\n");) - PairMorse::init_list(id, ptr); - #ifndef CUDA_USE_BINNING - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - #endif - MYDBG(printf("# CUDA PairMorseCuda::init_list end\n");) -} - -void PairMorseCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairMorse::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} - -} diff --git a/src/USER-CUDA/pair_morse_cuda.h b/src/USER-CUDA/pair_morse_cuda.h deleted file mode 100644 index f76e687527..0000000000 --- a/src/USER-CUDA/pair_morse_cuda.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(morse/cuda,PairMorseCuda) - -#else - -#ifndef PAIR_MORSE_CUDA_H -#define PAIR_MORSE_CUDA_H - -#include "pair_morse.h" - -namespace LAMMPS_NS { - -class PairMorseCuda : public PairMorse -{ - public: - PairMorseCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_sw_cuda.cpp b/src/USER-CUDA/pair_sw_cuda.cpp deleted file mode 100644 index 1dfccc4e7b..0000000000 --- a/src/USER-CUDA/pair_sw_cuda.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_sw_cuda.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - - - - -/* ---------------------------------------------------------------------- */ - -PairSWCuda::PairSWCuda(LAMMPS *lmp) : PairSW(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - params_f = NULL; - cuda->setSystemParams(); - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.override_block_per_atom = 0; - cuda->shared_data.pair.neighall = true; - init = false; -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairSWCuda::allocate() -{ - if(! allocated) PairSW::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cutsq = cutsq; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairSWCuda::compute(int eflag, int vflag) -{ - if(!init) {Cuda_PairSWCuda_Init(&cuda->shared_data,params_f,map, &elem2param[0][0][0],nelements); init=true;} - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairSWCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom);//,&elem2param[0][0][0],map - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairSWCuda::settings(int narg, char **arg) -{ - PairSW::settings(narg, arg); -} - -/* ---------------------------------------------------------------------- */ - -void PairSWCuda::coeff(int narg, char **arg) -{ - PairSW::coeff(narg, arg); - allocate(); - params_f = (ParamSW_Float *) memory->srealloc(params_f,maxparam*sizeof(ParamSW_Float), - "pair:params_f"); - for(int i=0;ishared_data.pair.cut_global = cutmax; -} - -void PairSWCuda::init_style() -{ - MYDBG(printf("# CUDA PairSWCuda::init_style start\n"); ) - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - neighbor->requests[irequest]->ghost = 1; - - - MYDBG(printf("# CUDA PairSWCuda::init_style end\n"); ) -} - -void PairSWCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairSWCuda::init_list\n");) - PairSW::init_list(id, ptr); - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - MYDBG(printf("# CUDA PairSWCuda::init_list end\n");) - cu_params_f = (ParamSW_Float*) CudaWrapper_AllocCudaData(sizeof(ParamSW_Float)*maxparam); - CudaWrapper_UploadCudaData((void*) params_f,(void*) cu_params_f,sizeof(ParamSW_Float)*maxparam); - cu_elem2param = new cCudaData ((int*) elem2param, nelements,nelements,nelements); - cu_elem2param->upload(); - cu_map = new cCudaData ( map,atom->ntypes+1 ); - cu_map->upload(); -} - -void PairSWCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairSW::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} -} diff --git a/src/USER-CUDA/pair_sw_cuda.h b/src/USER-CUDA/pair_sw_cuda.h deleted file mode 100644 index c61f849a1f..0000000000 --- a/src/USER-CUDA/pair_sw_cuda.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(sw/cuda,PairSWCuda) - -#else - -#ifndef PAIR_SW_CUDA_H -#define PAIR_SW_CUDA_H - -#include "pair_sw_cuda_cu.h" -#include "pair_sw.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairSWCuda : public PairSW -{ - public: - PairSWCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - ParamSW_Float* params_f; - ParamSW_Float* cu_params_f; - cCudaData* cu_elem2param; - cCudaData* cu_map; - bool init; - bool iszbl; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_tersoff_cuda.cpp b/src/USER-CUDA/pair_tersoff_cuda.cpp deleted file mode 100644 index f22b551284..0000000000 --- a/src/USER-CUDA/pair_tersoff_cuda.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_tersoff_cuda.h" -#include "cuda_data.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "cuda_neigh_list.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "memory.h" -#include "error.h" -#include "user_cuda.h" - -using namespace LAMMPS_NS; - - - - -/* ---------------------------------------------------------------------- */ - -PairTersoffCuda::PairTersoffCuda(LAMMPS *lmp) : PairTersoff(lmp) -{ - cuda = lmp->cuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - allocated2 = false; - params_f = NULL; - cuda->setSystemParams(); - cuda->shared_data.pair.cudable_force = 1; - cuda->shared_data.pair.override_block_per_atom = 0; - cuda->shared_data.pair.neighall = true; - init = false; - iszbl = false; -} - -/* ---------------------------------------------------------------------- - remember pointer to arrays in cuda shared data -------------------------------------------------------------------------- */ - -void PairTersoffCuda::allocate() -{ - if(! allocated) PairTersoff::allocate(); - if(! allocated2) - { - allocated2 = true; - cuda->shared_data.pair.cutsq = cutsq; - cuda->shared_data.pair.special_lj = force->special_lj; - cuda->shared_data.pair.special_coul = force->special_coul; - } -} - -/* ---------------------------------------------------------------------- */ - -void PairTersoffCuda::compute(int eflag, int vflag) -{ - if(!init) {Cuda_PairTersoffCuda_Init(&cuda->shared_data,params_f,map, &elem2param[0][0][0],nelements,iszbl); init=true;} - if (eflag || vflag) ev_setup(eflag,vflag); - if(eflag) cuda->cu_eng_vdwl->upload(); - if(vflag) cuda->cu_virial->upload(); - - Cuda_PairTersoffCuda(& cuda->shared_data, & cuda_neigh_list->sneighlist, eflag, vflag, eflag_atom, vflag_atom);//,&elem2param[0][0][0],map - if(not cuda->shared_data.pair.collect_forces_later) - { - if(eflag) cuda->cu_eng_vdwl->download(); - if(vflag) cuda->cu_virial->download(); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairTersoffCuda::settings(int narg, char **arg) -{ - PairTersoff::settings(narg, arg); -} - -/* ---------------------------------------------------------------------- */ - -void PairTersoffCuda::coeff(int narg, char **arg) -{ - PairTersoff::coeff(narg, arg); - allocate(); - params_f = (Param_Float *) memory->srealloc(params_f,maxparam*sizeof(Param_Float), - "pair:params_f"); - for(int i=0;ishared_data.pair.cut_global = cutmax; -} - -void PairTersoffCuda::init_style() -{ - MYDBG(printf("# CUDA PairTersoffCuda::init_style start\n"); ) - - int irequest; - - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->cudable = 1; - neighbor->requests[irequest]->ghost = 1; - - - MYDBG(printf("# CUDA PairTersoffCuda::init_style end\n"); ) -} - -void PairTersoffCuda::init_list(int id, NeighList *ptr) -{ - MYDBG(printf("# CUDA PairTersoffCuda::init_list\n");) - PairTersoff::init_list(id, ptr); - // right now we can only handle verlet (id 0), not respa - if(id == 0) cuda_neigh_list = cuda->registerNeighborList(ptr); - // see Neighbor::init() for details on lammps lists' logic - MYDBG(printf("# CUDA PairTersoffCuda::init_list end\n");) - cu_params_f = (Param_Float*) CudaWrapper_AllocCudaData(sizeof(Param_Float)*maxparam); - CudaWrapper_UploadCudaData((void*) params_f,(void*) cu_params_f,sizeof(Param_Float)*maxparam); - cu_elem2param = new cCudaData ((int*) elem2param, nelements,nelements,nelements); - cu_elem2param->upload(); - cu_map = new cCudaData ( map,atom->ntypes+1 ); - cu_map->upload(); -} - -void PairTersoffCuda::ev_setup(int eflag, int vflag) -{ - int maxeatomold=maxeatom; - PairTersoff::ev_setup(eflag,vflag); - - if (eflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_eatom; cuda->cu_eatom = new cCudaData ((double*)eatom, & cuda->shared_data.atom.eatom , atom->nmax );} - - if (vflag_atom && atom->nmax > maxeatomold) - {delete cuda->cu_vatom; cuda->cu_vatom = new cCudaData ((double*)vatom, & cuda->shared_data.atom.vatom , atom->nmax, 6 );} -} diff --git a/src/USER-CUDA/pair_tersoff_cuda.h b/src/USER-CUDA/pair_tersoff_cuda.h deleted file mode 100644 index 5b829114f2..0000000000 --- a/src/USER-CUDA/pair_tersoff_cuda.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(tersoff/cuda,PairTersoffCuda) - -#else - -#ifndef PAIR_TERSOFF_CUDA_H -#define PAIR_TERSOFF_CUDA_H - -#include "pair_tersoff_cuda_cu.h" -#include "pair_tersoff.h" -#include "cuda_data.h" - -namespace LAMMPS_NS { - -class PairTersoffCuda : public PairTersoff -{ - public: - PairTersoffCuda(class LAMMPS *); - void compute(int, int); - void settings(int, char **); - void coeff(int, char **); - void init_list(int, class NeighList *); - void init_style(); - void ev_setup(int eflag, int vflag); - protected: - - class Cuda *cuda; - void allocate(); - bool allocated2; - class CudaNeighList* cuda_neigh_list; - Param_Float* params_f; - Param_Float* cu_params_f; - cCudaData* cu_elem2param; - cCudaData* cu_map; - bool init; - bool iszbl; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pair_tersoff_zbl_cuda.cpp b/src/USER-CUDA/pair_tersoff_zbl_cuda.cpp deleted file mode 100644 index 91dcf6189e..0000000000 --- a/src/USER-CUDA/pair_tersoff_zbl_cuda.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Aidan Thompson (SNL) - original Tersoff implementation - David Farrell (NWU) - ZBL addition -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_tersoff_zbl_cuda.h" -#include "atom.h" -#include "update.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "force.h" -#include "comm.h" -#include "memory.h" -#include "error.h" -#include "math_const.h" - -using namespace LAMMPS_NS; -using namespace MathConst; - -#define MAXLINE 1024 -#define DELTA 4 - -/* ---------------------------------------------------------------------- */ - -PairTersoffZBLCuda::PairTersoffZBLCuda(LAMMPS *lmp) : PairTersoffCuda(lmp) -{ - // hard-wired constants in metal or real units - // a0 = Bohr radius - // epsilon0 = permittivity of vacuum = q / energy-distance units - // e = unit charge - // 1 Kcal/mole = 0.043365121 eV - - if (strcmp(update->unit_style,"metal") == 0) { - global_a_0 = 0.529; - global_epsilon_0 = 0.00552635; - global_e = 1.0; - } else if (strcmp(update->unit_style,"real") == 0) { - global_a_0 = 0.529; - global_epsilon_0 = 0.00552635 * 0.043365121; - global_e = 1.0; - } else error->all(FLERR,"Pair tersoff/zbl requires metal or real units"); - iszbl = true; -} - -/* ---------------------------------------------------------------------- */ - -void PairTersoffZBLCuda::read_file(char *file) -{ - int params_per_line = 21; - char **words = new char*[params_per_line+1]; - - delete [] params; - params = NULL; - nparams = 0; - - // open file on proc 0 - - FILE *fp; - if (comm->me == 0) { - fp = fopen(file,"r"); - if (fp == NULL) { - char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Tersoff potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); - } - - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].gamma = atof(words[4]); - params[nparams].lam3 = atof(words[5]); - params[nparams].c = atof(words[6]); - params[nparams].d = atof(words[7]); - params[nparams].h = atof(words[8]); - params[nparams].powern = atof(words[9]); - params[nparams].beta = atof(words[10]); - params[nparams].lam2 = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam1 = atof(words[15]); - params[nparams].biga = atof(words[16]); - params[nparams].Z_i = atof(words[17]); - params[nparams].Z_j = atof(words[18]); - params[nparams].ZBLcut = atof(words[19]); - params[nparams].ZBLexpscale = atof(words[20]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if ( - params[nparams].lam3 < 0.0 || params[nparams].c < 0.0 || - params[nparams].d < 0.0 || params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam3 < 0.0 || params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && params[nparams].powermint != 1) || - params[nparams].gamma < 0.0 || - params[nparams].Z_i < 1.0 || params[nparams].Z_j < 1.0 || - params[nparams].ZBLcut < 0.0 || params[nparams].ZBLexpscale < 0.0) - error->all(FLERR,"Illegal Tersoff parameter"); - - nparams++; - } - - delete [] words; -} - -void PairTersoffZBLCuda::coeff(int narg, char **arg) -{ - PairTersoffCuda::coeff(narg, arg); - for(int i=0;i -#include -#include -#include -#include -#include "pppm_cuda.h" -#include "atom.h" -#include "comm.h" -#include "neighbor.h" -#include "force.h" -#include "fft3d_wrap_cuda.h" // has to come before pair.h to avoid clash with kokkos -#include "pair.h" -#include "bond.h" -#include "angle.h" -#include "domain.h" -#include "remap_wrap.h" -#include "memory.h" -#include "error.h" -#include "update.h" -#include //crmadd -#include "cuda_wrapper_cu.h" -#include "pppm_cuda_cu.h" -#include "user_cuda.h" -#include "math_const.h" - -using namespace LAMMPS_NS; -using namespace MathConst; - -#define MAXORDER 7 -#define OFFSET 4096 -#define SMALL 0.00001 -#define LARGE 10000.0 -#define EPS_HOC 1.0e-7 - -void printArray(double* data,int nx, int ny, int nz) -{ - for(int i=0;icuda; - if(cuda == NULL) - error->all(FLERR,"You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - if ((narg > 3)||(narg<1)) error->all(FLERR,"Illegal kspace_style pppm/cuda command"); - #ifndef FFT_CUFFT - error->all(FLERR,"Using kspace_style pppm/cuda without cufft is not possible. Compile with cufft=1 to include cufft. Aborting."); - #endif - - triclinic_support = 0; - accuracy_relative = fabs(force->numeric(FLERR,arg[0])); - - nfactors = 3; - factors = new int[nfactors]; - factors[0] = 2; - factors[1] = 3; - factors[2] = 5; - - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); - - density_brick = vdx_brick = vdy_brick = vdz_brick = vdx_brick_tmp = NULL; - density_fft = NULL; - greensfn = NULL; - work1 = work2 = NULL; - vg = NULL; - fkx = fky = fkz = NULL; - buf1 = buf2 = NULL; - - gf_b = NULL; - rho1d = rho_coeff = NULL; - - fft1c = fft2c = NULL; - remap = NULL; - - density_brick_int=NULL; - density_intScale=1000000; - cu_vdx_brick = cu_vdy_brick = cu_vdz_brick = NULL; - cu_density_brick = NULL; - cu_density_brick_int = NULL; - cu_density_fft = NULL; - cu_energy=NULL; - cu_greensfn = NULL; - cu_work1 = cu_work2 = cu_work3 = NULL; - cu_vg = NULL; - cu_fkx = cu_fky = cu_fkz = NULL; - - cu_flag = NULL; - cu_debugdata = NULL; - cu_rho_coeff = NULL; - cu_virial = NULL; - - cu_gf_b = NULL; - - cu_slabbuf = NULL; - slabbuf = NULL; - - nmax = 0; - part2grid = NULL; - cu_part2grid = NULL; - adev_data_array=NULL; - poissontime=0; - old_nmax=0; - cu_pppm_grid_n=NULL; - cu_pppm_grid_ids=NULL; - - pppm_grid_nmax=0; - pppm2partgrid=new int[3]; - pppm_grid=new int[3]; - firstpass=true; - scale = 1.0; -} - - -/* ---------------------------------------------------------------------- - free all memory -------------------------------------------------------------------------- */ - -PPPMCuda::~PPPMCuda() -{ - delete [] slabbuf; - delete cu_slabbuf; - - delete [] factors; - factors=NULL; - deallocate(); - delete cu_part2grid; - cu_part2grid=NULL; - memory->destroy(part2grid); - part2grid = NULL; -} - -/* ---------------------------------------------------------------------- - called once before run -------------------------------------------------------------------------- */ - -void PPPMCuda::init() -{ - cuda->shared_data.pppm.cudable_force=1; - - //if(cuda->finished_run) {PPPM::init(); return;} - - if (me == 0) { - if (screen) fprintf(screen,"PPPMCuda initialization ...\n"); - if (logfile) fprintf(logfile,"PPPMCuda initialization ...\n"); - } - - // error check - - if (domain->dimension == 2) error->all(FLERR,"Cannot use PPPMCuda with 2d simulation"); - if (comm->style != 0) - error->universe_all(FLERR,"PPPMCuda can only currently be used with " - "comm_style brick"); - - if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); - - if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMCuda"); - if (slabflag == 1) { - if (domain->xperiodic != 1 || domain->yperiodic != 1 || - domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPMCuda"); - } - - if (order < 2 || order > MAXORDER) { - char str[128]; - sprintf(str,"PPPMCuda order cannot be smaller than 2 or greater than %d",MAXORDER); - error->all(FLERR,str); - } - // free all arrays previously allocated - - deallocate(); - - // extract short-range Coulombic cutoff from pair style - - triclinic_check(); - - if (force->pair == NULL) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - int itmp=0; - double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); - if (p_cutoff == NULL) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - cutoff = *p_cutoff; - - // if kspace is TIP4P, extract TIP4P params from pair style - - qdist = 0.0; - - if (strcmp(force->kspace_style,"pppm/tip4p") == 0) { - if (force->pair == NULL) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - double *p_qdist = (double *) force->pair->extract("qdist",itmp); - int *p_typeO = (int *) force->pair->extract("typeO",itmp); - int *p_typeH = (int *) force->pair->extract("typeH",itmp); - int *p_typeA = (int *) force->pair->extract("typeA",itmp); - int *p_typeB = (int *) force->pair->extract("typeB",itmp); - if (!p_qdist || !p_typeO || !p_typeH || !p_typeA || !p_typeB) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - qdist = *p_qdist; - typeO = *p_typeO; - typeH = *p_typeH; - int typeA = *p_typeA; - int typeB = *p_typeB; - - if (force->angle == NULL || force->bond == NULL) - error->all(FLERR,"Bond and angle potentials must be defined for TIP4P"); - double theta = force->angle->equilibrium_angle(typeA); - double blen = force->bond->equilibrium_distance(typeB); - alpha = qdist / (2.0 * cos(0.5*theta) * blen); - } - - // compute qsum & qsqsum and warn if not charge-neutral - - scale = 1.0; - qqrd2e = force->qqrd2e; - qsum_qsq(); - natoms_original = atom->natoms; - - // set accuracy (force units) from accuracy_relative or accuracy_absolute - - if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; - else accuracy = accuracy_relative * two_charge_force; - - // setup FFT grid resolution and g_ewald - // normally one iteration thru while loop is all that is required - // if grid stencil extends beyond neighbor proc, reduce order and try again - - int iteration = 0; - - while (order > 1) { - if (iteration && me == 0) - error->warning(FLERR,"Reducing PPPMCuda order b/c stencil extends " - "beyond neighbor processor"); - iteration++; - - set_grid(); - - if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) - error->all(FLERR,"PPPMCuda grid is too large"); - - // global indices of PPPMCuda grid range from 0 to N-1 - // nlo_in,nhi_in = lower/upper limits of the 3d sub-brick of - // global PPPMCuda grid that I own without ghost cells - // for slab PPPMCuda, assign z grid as if it were not extended - - nxlo_in = comm->myloc[0]*nx_pppm / comm->procgrid[0]; - nxhi_in = (comm->myloc[0]+1)*nx_pppm / comm->procgrid[0] - 1; - nylo_in = comm->myloc[1]*ny_pppm / comm->procgrid[1]; - nyhi_in = (comm->myloc[1]+1)*ny_pppm / comm->procgrid[1] - 1; - nzlo_in = comm->myloc[2] * - (static_cast (nz_pppm/slab_volfactor)) / comm->procgrid[2]; - nzhi_in = (comm->myloc[2]+1) * - (static_cast (nz_pppm/slab_volfactor)) / comm->procgrid[2] - 1; - - // nlower,nupper = stencil size for mapping particles to PPPMCuda grid - - nlower = -(order-1)/2; - nupper = order/2; - - // shift values for particle <-> grid mapping - // add/subtract OFFSET to avoid int(-0.75) = 0 when want it to be -1 - - if (order % 2) shift = OFFSET + 0.5; - else shift = OFFSET; - if (order % 2) shiftone = 0.0; - else shiftone = 0.5; - - // nlo_out,nhi_out = lower/upper limits of the 3d sub-brick of - // global PPPMCuda grid that my particles can contribute charge to - // effectively nlo_in,nhi_in + ghost cells - // nlo,nhi = global coords of grid pt to "lower left" of smallest/largest - // position a particle in my box can be at - // dist[3] = particle position bound = subbox + skin/2.0 + qdist - // qdist = offset due to TIP4P fictitious charge - // convert to triclinic if necessary - // nlo_out,nhi_out = nlo,nhi + stencil size for particle mapping - // for slab PPPMCuda, assign z grid as if it were not extended - - - triclinic = domain->triclinic; - double *prd,*sublo,*subhi; - - if (triclinic == 0) { - prd = domain->prd; - boxlo = domain->boxlo; - sublo = domain->sublo; - subhi = domain->subhi; - } else { - prd = domain->prd_lamda; - boxlo = domain->boxlo_lamda; - sublo = domain->sublo_lamda; - subhi = domain->subhi_lamda; - } - - double xprd = prd[0]; - double yprd = prd[1]; - double zprd = prd[2]; - double zprd_slab = zprd*slab_volfactor; - - double dist[3]; - double cuthalf = 0.5*neighbor->skin + qdist; - if (triclinic == 0) dist[0] = dist[1] = dist[2] = cuthalf; - else { - dist[0] = cuthalf/domain->prd[0]; - dist[1] = cuthalf/domain->prd[1]; - dist[2] = cuthalf/domain->prd[2]; - } - - int nlo,nhi; - - nlo = static_cast ((sublo[0]-dist[0]-boxlo[0]) * - nx_pppm/xprd + shift) - OFFSET; - nhi = static_cast ((subhi[0]+dist[0]-boxlo[0]) * - nx_pppm/xprd + shift) - OFFSET; - nxlo_out = nlo + nlower; - nxhi_out = nhi + nupper; - - nlo = static_cast ((sublo[1]-dist[1]-boxlo[1]) * - ny_pppm/yprd + shift) - OFFSET; - nhi = static_cast ((subhi[1]+dist[1]-boxlo[1]) * - ny_pppm/yprd + shift) - OFFSET; - nylo_out = nlo + nlower; - nyhi_out = nhi + nupper; - - nlo = static_cast ((sublo[2]-dist[2]-boxlo[2]) * - nz_pppm/zprd_slab + shift) - OFFSET; - nhi = static_cast ((subhi[2]+dist[2]-boxlo[2]) * - nz_pppm/zprd_slab + shift) - OFFSET; - nzlo_out = nlo + nlower; - nzhi_out = nhi + nupper; - - // for slab PPPMCuda, change the grid boundary for processors at +z end - // to include the empty volume between periodically repeating slabs - // for slab PPPMCuda, want charge data communicated from -z proc to +z proc, - // but not vice versa, also want field data communicated from +z proc to - // -z proc, but not vice versa - // this is accomplished by nzhi_in = nzhi_out on +z end (no ghost cells) - - if (slabflag && ((comm->myloc[2]+1) == (comm->procgrid[2]))) { - nzhi_in = nz_pppm - 1; - nzhi_out = nz_pppm - 1; - } - - // nlo_ghost,nhi_ghost = # of planes I will recv from 6 directions - // that overlay domain I own - // proc in that direction tells me via sendrecv() - // if no neighbor proc, value is from self since I have ghosts regardless - - int nplanes; - - nplanes = nxlo_in - nxlo_out; - if (comm->procneigh[0][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[0][0],0, - &nxhi_ghost,1,MPI_INT,comm->procneigh[0][1],0, - world,MPI_STATUS_IGNORE); - else nxhi_ghost = nplanes; - - nplanes = nxhi_out - nxhi_in; - if (comm->procneigh[0][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[0][1],0, - &nxlo_ghost,1,MPI_INT,comm->procneigh[0][0], - 0,world,MPI_STATUS_IGNORE); - else nxlo_ghost = nplanes; - - nplanes = nylo_in - nylo_out; - if (comm->procneigh[1][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[1][0],0, - &nyhi_ghost,1,MPI_INT,comm->procneigh[1][1],0, - world,MPI_STATUS_IGNORE); - else nyhi_ghost = nplanes; - - nplanes = nyhi_out - nyhi_in; - if (comm->procneigh[1][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[1][1],0, - &nylo_ghost,1,MPI_INT,comm->procneigh[1][0],0, - world,MPI_STATUS_IGNORE); - else nylo_ghost = nplanes; - - nplanes = nzlo_in - nzlo_out; - if (comm->procneigh[2][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[2][0],0, - &nzhi_ghost,1,MPI_INT,comm->procneigh[2][1],0, - world,MPI_STATUS_IGNORE); - else nzhi_ghost = nplanes; - - nplanes = nzhi_out - nzhi_in; - if (comm->procneigh[2][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[2][1],0, - &nzlo_ghost,1,MPI_INT,comm->procneigh[2][0],0, - world,MPI_STATUS_IGNORE); - else nzlo_ghost = nplanes; - - // test that ghost overlap is not bigger than my sub-domain - - int flag = 0; - if (nxlo_ghost > nxhi_in-nxlo_in+1) flag = 1; - if (nxhi_ghost > nxhi_in-nxlo_in+1) flag = 1; - if (nylo_ghost > nyhi_in-nylo_in+1) flag = 1; - if (nyhi_ghost > nyhi_in-nylo_in+1) flag = 1; - if (nzlo_ghost > nzhi_in-nzlo_in+1) flag = 1; - if (nzhi_ghost > nzhi_in-nzlo_in+1) flag = 1; - - int flag_all; - MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - - if (flag_all == 0) break; - order--; - } - - if (order == 0) error->all(FLERR,"PPPMCuda order has been reduced to 0"); - - // decomposition of FFT mesh - // global indices range from 0 to N-1 - // proc owns entire x-dimension, clump of columns in y,z dimensions - // npey_fft,npez_fft = # of procs in y,z dims - // if nprocs is small enough, proc can own 1 or more entire xy planes, - // else proc owns 2d sub-blocks of yz plane - // me_y,me_z = which proc (0-npe_fft-1) I am in y,z dimensions - // nlo_fft,nhi_fft = lower/upper limit of the section - // of the global FFT mesh that I own - - int npey_fft,npez_fft; - if (nz_pppm >= nprocs) { - npey_fft = 1; - npez_fft = nprocs; - } else procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); - - int me_y = me % npey_fft; - int me_z = me / npey_fft; - - nxlo_fft = 0; - nxhi_fft = nx_pppm - 1; - nylo_fft = me_y*ny_pppm/npey_fft; - nyhi_fft = (me_y+1)*ny_pppm/npey_fft - 1; - nzlo_fft = me_z*nz_pppm/npez_fft; - nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; - - // PPPMCuda grid for this proc, including ghosts - - ngrid = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * - (nzhi_out-nzlo_out+1); - - // FFT arrays on this proc, without ghosts - // nfft = FFT points in FFT decomposition on this proc - // nfft_brick = FFT points in 3d brick-decomposition on this proc - // nfft_both = greater of 2 values - - nfft = (nxhi_fft-nxlo_fft+1) * (nyhi_fft-nylo_fft+1) * - (nzhi_fft-nzlo_fft+1); - int nfft_brick = (nxhi_in-nxlo_in+1) * (nyhi_in-nylo_in+1) * - (nzhi_in-nzlo_in+1); - nfft_both = MAX(nfft,nfft_brick); - - // buffer space for use in brick2fft and fillbrick - // idel = max # of ghost planes to send or recv in +/- dir of each dim - // nx,ny,nz = owned planes (including ghosts) in each dim - // nxx,nyy,nzz = max # of grid cells to send in each dim - // nbuf = max in any dim, augment by 3x for components of vd_xyz in fillbrick - - int idelx,idely,idelz,nx,ny,nz,nxx,nyy,nzz; - - idelx = MAX(nxlo_ghost,nxhi_ghost); - idelx = MAX(idelx,nxhi_out-nxhi_in); - idelx = MAX(idelx,nxlo_in-nxlo_out); - - idely = MAX(nylo_ghost,nyhi_ghost); - idely = MAX(idely,nyhi_out-nyhi_in); - idely = MAX(idely,nylo_in-nylo_out); - - idelz = MAX(nzlo_ghost,nzhi_ghost); - idelz = MAX(idelz,nzhi_out-nzhi_in); - idelz = MAX(idelz,nzlo_in-nzlo_out); - - nx = nxhi_out - nxlo_out + 1; - ny = nyhi_out - nylo_out + 1; - nz = nzhi_out - nzlo_out + 1; - - nxx = idelx * ny * nz; - nyy = idely * nx * nz; - nzz = idelz * nx * ny; - - nbuf = MAX(nxx,nyy); - nbuf = MAX(nbuf,nzz); - nbuf *= 3; - - // print stats - - int ngrid_max,nfft_both_max,nbuf_max; - MPI_Allreduce(&ngrid,&ngrid_max,1,MPI_INT,MPI_MAX,world); - MPI_Allreduce(&nfft_both,&nfft_both_max,1,MPI_INT,MPI_MAX,world); - MPI_Allreduce(&nbuf,&nbuf_max,1,MPI_INT,MPI_MAX,world); - - if (me == 0) { - if (screen) fprintf(screen," brick FFT buffer size/proc = %d %d %d\n", - ngrid_max,nfft_both_max,nbuf_max); - if (logfile) fprintf(logfile," brick FFT buffer size/proc = %d %d %d\n", - ngrid_max,nfft_both_max,nbuf_max); - } - cuda_shared_pppm* ap=&(cuda->shared_data.pppm); - - ap->density_intScale=density_intScale; - ap->nxlo_in=nxlo_in; - ap->nxhi_in=nxhi_in; - ap->nxlo_out=nxlo_out; - ap->nxhi_out=nxhi_out; - ap->nylo_in=nylo_in; - ap->nyhi_in=nyhi_in; - ap->nylo_out=nylo_out; - ap->nyhi_out=nyhi_out; - ap->nzlo_in=nzlo_in; - ap->nzhi_in=nzhi_in; - ap->nzlo_out=nzlo_out; - ap->nzhi_out=nzhi_out; - ap->nxlo_in=nxlo_fft; - ap->nxhi_in=nxhi_fft; - ap->nylo_in=nylo_fft; - ap->nyhi_in=nyhi_fft; - ap->nzlo_in=nzlo_fft; - ap->nzhi_in=nzhi_fft; - ap->nx_pppm=nx_pppm; - ap->ny_pppm=ny_pppm; - ap->nz_pppm=nz_pppm; - ap->qqrd2e=qqrd2e; - ap->order=order; - ap->nmax=nmax; - ap->nlocal=atom->nlocal; - ap->delxinv=delxinv; - ap->delyinv=delyinv; - ap->delzinv=delzinv; - ap->nlower=nlower; - ap->nupper=nupper; - ap->shiftone=shiftone; - - // allocate K-space dependent memory - - - allocate(); - - // pre-compute Green's function denomiator expansion - // pre-compute 1d charge distribution coefficients - - compute_gf_denom(); - compute_rho_coeff(); -} - -/* ---------------------------------------------------------------------- - adjust PPPMCuda coeffs, called initially and whenever volume has changed -------------------------------------------------------------------------- */ - -void PPPMCuda::setup() -{ - double *prd; - cu_gf_b->upload(); - // volume-dependent factors - // adjust z dimension for 2d slab PPPMCuda - // z dimension for 3d PPPMCuda is zprd since slab_volfactor = 1.0 - - if (triclinic == 0) prd = domain->prd; - else prd = domain->prd_lamda; - - double xprd = prd[0]; - double yprd = prd[1]; - double zprd = prd[2]; - double zprd_slab = zprd*slab_volfactor; - volume = xprd * yprd * zprd_slab; - - delxinv = nx_pppm/xprd; - delyinv = ny_pppm/yprd; - delzinv = nz_pppm/zprd_slab; - - delvolinv = delxinv*delyinv*delzinv; - - double unitkx = (2.0*MY_PI/xprd); - double unitky = (2.0*MY_PI/yprd); - double unitkz = (2.0*MY_PI/zprd_slab); - - // fkx,fky,fkz for my FFT grid pts - Cuda_PPPM_Setup_fkxyz_vg(nx_pppm, ny_pppm,nz_pppm,unitkx,unitky,unitkz,g_ewald); - - - - // modified (Hockney-Eastwood) Coulomb Green's function - - int nbx = static_cast ((g_ewald*xprd/(MY_PI*nx_pppm)) * - pow(-log(EPS_HOC),0.25)); - int nby = static_cast ((g_ewald*yprd/(MY_PI*ny_pppm)) * - pow(-log(EPS_HOC),0.25)); - int nbz = static_cast ((g_ewald*zprd_slab/(MY_PI*nz_pppm)) * - pow(-log(EPS_HOC),0.25)); - Cuda_PPPM_setup_greensfn(nx_pppm,ny_pppm,nz_pppm,unitkx,unitky,unitkz,g_ewald, -nbx,nby,nbz,xprd,yprd,zprd_slab); - - -#ifdef FFT_CUFFT - cu_vdx_brick->upload(); - cu_vdy_brick->upload(); - cu_vdz_brick->upload(); -#endif - cu_rho_coeff->upload(); - cu_density_brick->memset_device(0); - pppm_device_init_setup(&cuda->shared_data,shiftone,delxinv,delyinv,delzinv,nlower,nupper); -} - -/* ---------------------------------------------------------------------- - compute the PPPMCuda long-range force, energy, virial -------------------------------------------------------------------------- */ - -void PPPMCuda::compute(int eflag, int vflag) -{ - cuda_shared_atom* cu_atom = & cuda->shared_data.atom; - - int i; - my_times starttime; - my_times endtime; - my_times starttotal; - my_times endtotal; - // convert atoms from box to lamda coords - - if (triclinic == 0) boxlo = domain->boxlo; - else { - boxlo = domain->boxlo_lamda; - domain->x2lamda(atom->nlocal); - } - - // extend size of PPPM per-atom arrays if necessary - // force update of device data, if arrays resized - - - if (cu_atom->update_nmax || old_nmax == 0) { - memory->destroy(part2grid); - nmax = atom->nmax; - memory->create(part2grid,nmax,3,"pppm:part2grid"); - delete cu_part2grid; - delete [] adev_data_array; - adev_data_array=new dev_array[1]; - cu_part2grid = new cCudaData - ((int*)part2grid,adev_data_array, nmax,3); - - pppm_device_update(&cuda->shared_data,cu_part2grid->dev_data(), - atom->nlocal,atom->nmax); - old_nmax=nmax; - } - if(cu_atom->update_nlocal) {pppm_update_nlocal(cu_atom->nlocal);} - - energy = 0.0; - if (vflag) - { - for (i = 0; i < 6; i++) virial[i] = 0.0; - cu_virial->memset_device(0); - } - if(eflag) cu_energy->memset_device(0); - my_gettime(CLOCK_REALTIME,&starttotal); - - // find grid points for all my particles - // map my particle charge onto my local 3d density grid - - my_gettime(CLOCK_REALTIME,&starttime); - - particle_map(); - - my_gettime(CLOCK_REALTIME,&endtime); - cuda->shared_data.cuda_timings.pppm_particle_map+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - //cu_part2grid->download(); - my_gettime(CLOCK_REALTIME,&starttime); - make_rho(); - my_gettime(CLOCK_REALTIME,&endtime); - cuda->shared_data.cuda_timings.pppm_make_rho+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - // all procs communicate density values from their ghost cells - // to fully sum contribution in their 3d bricks - // remap from 3d decomposition to FFT decomposition - - int nprocs=comm->nprocs; - - my_gettime(CLOCK_REALTIME,&starttime); - - if(nprocs>1) - { - cu_density_brick->download(); - brick2fft(); - } - else - { - #ifdef FFT_CUFFT - pppm_initfftdata(&cuda->shared_data,(PPPM_CFLOAT*)cu_density_brick->dev_data(),(FFT_CFLOAT*)cu_work2->dev_data()); - #endif - } - - my_gettime(CLOCK_REALTIME,&endtime); - cuda->shared_data.cuda_timings.pppm_brick2fft+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - // compute potential gradient on my FFT grid and - // portion of e_long on this proc's FFT grid - // return gradients (electric fields) in 3d brick decomposition - - my_gettime(CLOCK_REALTIME,&starttime); - poisson(eflag,vflag); - my_gettime(CLOCK_REALTIME,&endtime); - cuda->shared_data.cuda_timings.pppm_poisson+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - // all procs communicate E-field values to fill ghost cells - // surrounding their 3d bricks - - // not necessary since all the calculations are done on one proc - - // calculate the force on my particles - - my_gettime(CLOCK_REALTIME,&starttime); - fieldforce(); - my_gettime(CLOCK_REALTIME,&endtime); - cuda->shared_data.cuda_timings.pppm_fieldforce+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - // sum energy across procs and add in volume-dependent term - // reset qsum and qsqsum if atom count has changed - - my_gettime(CLOCK_REALTIME,&endtotal); - cuda->shared_data.cuda_timings.pppm_compute+=(endtotal.tv_sec-starttotal.tv_sec+1.0*(endtotal.tv_nsec-starttotal.tv_nsec)/1000000000); - - if (eflag) { - double energy_all; - MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); - energy = energy_all; - - if (atom->natoms != natoms_original) { - qsum_qsq(); - natoms_original = atom->natoms; - } - - energy *= 0.5*volume; - energy -= g_ewald*qsqsum/1.772453851 + - MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); - energy *= qqrd2e; - } - - // sum virial across procs - - if (vflag) { - double virial_all[6]; - MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) virial[i] = 0.5*qqrd2e*volume*virial_all[i]; - } - - // 2d slab correction - - if (slabflag) slabcorr(eflag); - - // convert atoms back from lamda to box coords - - if (triclinic) domain->lamda2x(atom->nlocal); - - if(firstpass) firstpass=false; -} - - -/* ---------------------------------------------------------------------- - allocate memory that depends on # of K-vectors and order -------------------------------------------------------------------------- */ - - -void PPPMCuda::allocate() -{ - - struct dev_array* dev_tmp=new struct dev_array[20]; - int n_cudata=0; - - - memory->create3d_offset(density_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:density_brick"); - memory->create3d_offset(density_brick_int,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:density_brick_int"); - - - cu_density_brick = new cCudaData ((double*) &(density_brick[nzlo_out][nylo_out][nxlo_out]), & (dev_tmp[n_cudata++]), - (nzhi_out-nzlo_out+1)*(nyhi_out-nylo_out+1)*(nxhi_out-nxlo_out+1)); - - cu_density_brick_int = new cCudaData ((int*) &(density_brick_int[nzlo_out][nylo_out][nxlo_out]), & (dev_tmp[n_cudata++]), - (nzhi_out-nzlo_out+1)*(nyhi_out-nylo_out+1)*(nxhi_out-nxlo_out+1)); - - memory->create3d_offset(vdx_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdx_brick"); - memory->create3d_offset(vdx_brick_tmp,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdx_brick_tmp"); - - cu_vdx_brick = new cCudaData ((double*) &(vdx_brick[nzlo_out][nylo_out][nxlo_out]), & (dev_tmp[n_cudata++]), - (nzhi_out-nzlo_out+1)*(nyhi_out-nylo_out+1)*(nxhi_out-nxlo_out+1)); - - memory->create3d_offset(vdy_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdy_brick"); - cu_vdy_brick = new cCudaData ((double*) &(vdy_brick[nzlo_out][nylo_out][nxlo_out]), & (dev_tmp[n_cudata++]), - (nzhi_out-nzlo_out+1)*(nyhi_out-nylo_out+1)*(nxhi_out-nxlo_out+1)); - - memory->create3d_offset(vdz_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdz_brick"); - cu_vdz_brick = new cCudaData ((double*) &(vdz_brick[nzlo_out][nylo_out][nxlo_out]), & (dev_tmp[n_cudata++]), - (nzhi_out-nzlo_out+1)*(nyhi_out-nylo_out+1)*(nxhi_out-nxlo_out+1)); - - memory->create(density_fft,nfft_both,"pppm:density_fft"); - - cu_density_fft = new cCudaData (density_fft, & (dev_tmp[n_cudata++]),nfft_both); - - cu_energy = new cCudaData (NULL, &(dev_tmp[n_cudata++]),ny_pppm*nz_pppm); - cu_virial = new cCudaData (NULL, &(dev_tmp[n_cudata++]),ny_pppm*nz_pppm*6); - - memory->create(greensfn,nfft_both,"pppm:greensfn"); - cu_greensfn = new cCudaData (greensfn, & (dev_tmp[n_cudata++]) , nx_pppm*ny_pppm*nz_pppm); - - memory->create(work1,2*nx_pppm*ny_pppm*nz_pppm,"pppm:work1"); - memory->create(work2,2*nx_pppm*ny_pppm*nz_pppm,"pppm:work2"); - memory->create(work3,2*nx_pppm*ny_pppm*nz_pppm,"pppm:work3"); - - cu_work1 = new cCudaData (work1, & (dev_tmp[n_cudata++]) , 2*nx_pppm*ny_pppm*nz_pppm); - cu_work2 = new cCudaData (work2, & (dev_tmp[n_cudata++]) , 2*nx_pppm*ny_pppm*nz_pppm); - cu_work3 = new cCudaData (work3, & (dev_tmp[n_cudata++]) , 2*nx_pppm*ny_pppm*nz_pppm); - - - memory->create(fkx,nx_pppm,"pppmcuda:fkx"); - cu_fkx = new cCudaData (fkx, & (dev_tmp[n_cudata++]) , nx_pppm); - memory->create(fky,ny_pppm,"pppmcuda:fky"); - cu_fky = new cCudaData (fky, & (dev_tmp[n_cudata++]) , ny_pppm); - memory->create(fkz,nz_pppm,"pppmcuda:fkz"); - cu_fkz = new cCudaData (fkz, & (dev_tmp[n_cudata++]) , nz_pppm); - - memory->create(vg,nfft_both,6,"pppm:vg"); - - cu_vg = new cCudaData ((double*)vg, & (dev_tmp[n_cudata++]) , nfft_both,6); - - memory->create(buf1,nbuf,"pppm:buf1"); - memory->create(buf2,nbuf,"pppm:buf2"); - - - // summation coeffs - - - gf_b = new double[order]; - cu_gf_b = new cCudaData (gf_b, &(dev_tmp[n_cudata++]) , order); - memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm:rho1d"); - memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm:rho_coeff"); - - cu_rho_coeff = new cCudaData ((double*) &(rho_coeff[0][(1-order)/2]), & (dev_tmp[n_cudata++]) , order*(order/2-(1-order)/2+1)); - - debugdata=new PPPM_CFLOAT[100]; - cu_debugdata = new cCudaData (debugdata,& (dev_tmp[n_cudata++]),100); - cu_flag = new cCudaData (&global_flag,& (dev_tmp[n_cudata++]),3); - - // create 2 FFTs and a Remap - // 1st FFT keeps data in FFT decompostion - // 2nd FFT returns data in 3d brick decomposition - // remap takes data from 3d brick to FFT decomposition - - int tmp; - - - - - fft1c = new FFT3dCuda(lmp,world,nx_pppm,ny_pppm,nz_pppm, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 0,0,&tmp,true); - - fft2c = new FFT3dCuda(lmp,world,nx_pppm,ny_pppm,nz_pppm, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - 0,0,&tmp,false); - - -#ifdef FFT_CUFFT - fft1c->set_cudata(cu_work2->dev_data(),cu_work1->dev_data()); - fft2c->set_cudata(cu_work2->dev_data(),cu_work3->dev_data()); -#endif - - remap = new Remap(lmp,world, - nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 1,0,0,2,0); - - -pppm_device_init(cu_density_brick->dev_data(), cu_vdx_brick->dev_data(), cu_vdy_brick->dev_data(), cu_vdz_brick->dev_data(), cu_density_fft->dev_data(),cu_energy->dev_data(),cu_virial->dev_data() - , cu_work1->dev_data(), cu_work2->dev_data(), cu_work3->dev_data(), cu_greensfn->dev_data(), cu_fkx->dev_data(), cu_fky->dev_data(), cu_fkz->dev_data(), cu_vg->dev_data() - ,nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in,nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out,nx_pppm,ny_pppm,nz_pppm - ,nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft,cu_gf_b->dev_data() - ,qqrd2e,order,cu_rho_coeff->dev_data(),cu_debugdata->dev_data(),cu_density_brick_int->dev_data(),slabflag - ); -} - - - -/* ---------------------------------------------------------------------- - deallocate memory that depends on # of K-vectors and order - ---------------------------------------------------------------------- */ - -void PPPMCuda::deallocate() -{ - memory->destroy3d_offset(density_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdx_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdy_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdz_brick,nzlo_out,nylo_out,nxlo_out); - - density_brick = vdx_brick = vdy_brick = vdz_brick = NULL; - - memory->destroy(density_fft); - memory->destroy(greensfn); - memory->destroy(work1); - memory->destroy(work2); - memory->destroy(vg); - - density_fft = NULL; - greensfn = NULL; - work1 = NULL; - work2 = NULL; - vg = NULL; - - memory->destroy(fkx); - memory->destroy(fky); - memory->destroy(fkz); - - fkx = NULL; - fky = NULL; - fkz = NULL; - - delete cu_density_brick; - delete cu_density_brick_int; - delete cu_vdx_brick; - delete cu_vdy_brick; - delete cu_vdz_brick; - delete cu_density_fft; - delete cu_energy; - delete cu_virial; -#ifdef FFT_CUFFT - delete cu_greensfn; - delete cu_gf_b; - delete cu_vg; - delete cu_work1; - delete cu_work2; - delete cu_work3; - delete cu_fkx; - delete cu_fky; - delete cu_fkz; -#endif - - delete cu_flag; - delete cu_debugdata; - delete cu_rho_coeff; - - - cu_vdx_brick = cu_vdy_brick = cu_vdz_brick = NULL; - cu_density_brick = NULL; - cu_density_brick_int = NULL; - cu_density_fft = NULL; - cu_energy=NULL; - cu_virial=NULL; -#ifdef FFT_CUFFT - cu_greensfn = NULL; - cu_gf_b = NULL; - cu_work1 = cu_work2 = cu_work3 = NULL; - cu_vg = NULL; - cu_fkx = cu_fky = cu_fkz = NULL; -#endif - - cu_flag = NULL; - cu_debugdata = NULL; - cu_rho_coeff = NULL; - cu_part2grid = NULL; - - memory->destroy(buf1); - memory->destroy(buf2); - - delete [] gf_b; - gf_b = NULL; - memory->destroy2d_offset(rho1d,-order/2); rho1d = NULL; - memory->destroy2d_offset(rho_coeff,(1-order)/2); rho_coeff = NULL; - - delete fft1c; - fft1c = NULL; - - delete fft2c; - fft2c = NULL; - delete remap; - remap = NULL; - buf1 = NULL; - buf2 = NULL; -} - -/* ---------------------------------------------------------------------- - set size of FFT grid (nx,ny,nz_pppm) and g_ewald --------------------------------------------------------------------------*/ - -void PPPMCuda::set_grid() -{ - // see JCP 109, pg 7698 for derivation of coefficients - // higher order coefficients may be computed if needed - - double **acons; - memory->create(acons,8,7,"pppm:acons"); - - acons[1][0] = 2.0 / 3.0; - acons[2][0] = 1.0 / 50.0; - acons[2][1] = 5.0 / 294.0; - acons[3][0] = 1.0 / 588.0; - acons[3][1] = 7.0 / 1440.0; - acons[3][2] = 21.0 / 3872.0; - acons[4][0] = 1.0 / 4320.0; - acons[4][1] = 3.0 / 1936.0; - acons[4][2] = 7601.0 / 2271360.0; - acons[4][3] = 143.0 / 28800.0; - acons[5][0] = 1.0 / 23232.0; - acons[5][1] = 7601.0 / 13628160.0; - acons[5][2] = 143.0 / 69120.0; - acons[5][3] = 517231.0 / 106536960.0; - acons[5][4] = 106640677.0 / 11737571328.0; - acons[6][0] = 691.0 / 68140800.0; - acons[6][1] = 13.0 / 57600.0; - acons[6][2] = 47021.0 / 35512320.0; - acons[6][3] = 9694607.0 / 2095994880.0; - acons[6][4] = 733191589.0 / 59609088000.0; - acons[6][5] = 326190917.0 / 11700633600.0; - acons[7][0] = 1.0 / 345600.0; - acons[7][1] = 3617.0 / 35512320.0; - acons[7][2] = 745739.0 / 838397952.0; - acons[7][3] = 56399353.0 / 12773376000.0; - acons[7][4] = 25091609.0 / 1560084480.0; - acons[7][5] = 1755948832039.0 / 36229939200000.0; - acons[7][6] = 4887769399.0 / 37838389248.0; - - bigint natoms = atom->natoms; - - // use xprd,yprd,zprd even if triclinic so grid size is the same - // adjust z dimension for 2d slab PPPMCuda - // 3d PPPMCuda just uses zprd since slab_volfactor = 1.0 - - double xprd = domain->xprd; - double yprd = domain->yprd; - double zprd = domain->zprd; - double zprd_slab = zprd*slab_volfactor; - - // make initial g_ewald estimate - // based on desired error and real space cutoff - // fluid-occupied volume used to estimate real-space error - // zprd used rather than zprd_slab - - double h_x,h_y,h_z; - - if (!gewaldflag) - g_ewald = sqrt(-log(accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / - (2.0*q2))) / cutoff; - - // set optimal nx_pppm,ny_pppm,nz_pppm based on order and precision - // nz_pppm uses extended zprd_slab instead of zprd - // h = 1/g_ewald is upper bound on h such that h*g_ewald <= 1 - // reduce it until precision target is met - - if (!gridflag) { - double err; - h_x = h_y = h_z = 1/g_ewald; - - nx_pppm = static_cast (xprd/h_x + 1); - ny_pppm = static_cast (yprd/h_y + 1); - nz_pppm = static_cast (zprd_slab/h_z + 1); - - err = rms(h_x,xprd,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_x,xprd,natoms,q2,acons); - nx_pppm++; - h_x = xprd/nx_pppm; - } - - err = rms(h_y,yprd,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_y,yprd,natoms,q2,acons); - ny_pppm++; - h_y = yprd/ny_pppm; - } - - err = rms(h_z,zprd_slab,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_z,zprd_slab,natoms,q2,acons); - nz_pppm++; - h_z = zprd_slab/nz_pppm; - } - } - - // boost grid size until it is factorable - - while (!factorable(nx_pppm)) nx_pppm++; - while (!factorable(ny_pppm)) ny_pppm++; - while (!factorable(nz_pppm)) nz_pppm++; - - - // adjust g_ewald for new grid size - - h_x = xprd/nx_pppm; - h_y = yprd/ny_pppm; - h_z = zprd_slab/nz_pppm; - - if (!gewaldflag) { - double gew1,gew2,dgew,f,fmid,hmin,rtb; - int ncount; - - gew1 = 0.0; - g_ewald = gew1; - f = diffpr(h_x,h_y,h_z,q2,acons); - - hmin = MIN(h_x,MIN(h_y,h_z)); - gew2 = 10/hmin; - g_ewald = gew2; - fmid = diffpr(h_x,h_y,h_z,q2,acons); - - if (f*fmid >= 0.0) error->all(FLERR,"Cannot compute PPPMCuda G"); - rtb = f < 0.0 ? (dgew=gew2-gew1,gew1) : (dgew=gew1-gew2,gew2); - ncount = 0; - while (fabs(dgew) > SMALL && fmid != 0.0) { - dgew *= 0.5; - g_ewald = rtb + dgew; - fmid = diffpr(h_x,h_y,h_z,q2,acons); - if (fmid <= 0.0) rtb = g_ewald; - ncount++; - if (ncount > LARGE) error->all(FLERR,"Cannot compute PPPMCuda G"); - } - } - - // final RMS precision - - double lprx = rms(h_x,xprd,natoms,q2,acons); - double lpry = rms(h_y,yprd,natoms,q2,acons); - double lprz = rms(h_z,zprd_slab,natoms,q2,acons); - double lpr = sqrt(lprx*lprx + lpry*lpry + lprz*lprz) / sqrt(3.0); - double spr = 2.0*q2 * exp(-g_ewald*g_ewald*cutoff*cutoff) / - sqrt(natoms*cutoff*xprd*yprd*zprd_slab); - - // free local memory - - memory->destroy(acons); - - // print info - - if (me == 0) { - if (screen) { - fprintf(screen," G vector = %g\n",g_ewald); - fprintf(screen," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); - fprintf(screen," stencil order = %d\n",order); - fprintf(screen," absolute RMS force accuracy = %g\n",MAX(lpr,spr)); - fprintf(screen," relative force accuracy = %g\n", - MAX(lpr,spr)/two_charge_force); - } - if (logfile) { - fprintf(logfile," G vector = %g\n",g_ewald); - fprintf(logfile," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); - fprintf(logfile," stencil order = %d\n",order); - fprintf(logfile," absolute RMS force accuracy = %g\n",MAX(lpr,spr)); - fprintf(logfile," relative force accuracy = %g\n", - MAX(lpr,spr)/two_charge_force); - } - } -} - - -/* ---------------------------------------------------------------------- - find center grid pt for each of my particles - check that full stencil for the particle will fit in my 3d brick - store central grid pt indices in part2grid array -------------------------------------------------------------------------- */ - - -void PPPMCuda::particle_map() -{ - MYDBG(printf("# CUDA PPPMCuda::particle_map() ... start\n");) - int flag = 0; - - cu_flag->memset_device(0); - flag=cuda_particle_map(&cuda->shared_data,cu_flag->dev_data()); - if(flag) - { - cu_debugdata->download(); - printf("Out of range atom: "); - printf("ID: %i ",atom->tag[int(debugdata[0])]); - printf("x: %e ",debugdata[7]); - printf("y: %e ",debugdata[8]); - printf("z: %e ",debugdata[9]); - printf("nx: %e ",debugdata[4]); - printf("ny: %e ",debugdata[5]); - - printf("\n"); - //printf("debugdata: cpu: %e %e %e %i\n",boxlo[0],boxlo[1],boxlo[2],atom->nlocal); - cuda->cu_x->download(); - int nx,ny,nz; - - double **x = atom->x; - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - nx = static_cast ((x[i][0]-boxlo[0])*delxinv+shift) - OFFSET; - ny = static_cast ((x[i][1]-boxlo[1])*delyinv+shift) - OFFSET; - nz = static_cast ((x[i][2]-boxlo[2])*delzinv+shift) - OFFSET; - - if(i==1203)printf("Outside Atom: %i %e %e %e (%i %i %i)\n",i,x[i][0],x[i][1],x[i][2],nx,ny,nz); - if (nx+nlower < nxlo_out || nx+nupper > nxhi_out || - ny+nlower < nylo_out || ny+nupper > nyhi_out || - nz+nlower < nzlo_out || nz+nupper > nzhi_out || i==1203) {printf("Outside Atom: %i %e %e %e (%i %i %i)\n",i,x[i][0],x[i][1],x[i][2],nx,ny,nz); } - } - - } - - int flag_all; - MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPMCuda!"); -} - -/* ---------------------------------------------------------------------- - create discretized "density" on section of global grid due to my particles - density(x,y,z) = charge "density" at grid points of my 3d brick - (nxlo:nxhi,nylo:nyhi,nzlo:nzhi) is extent of my brick (including ghosts) - in global grid -------------------------------------------------------------------------- */ - - -void PPPMCuda::make_rho() -{ - cuda_make_rho(&cuda->shared_data,cu_flag->dev_data(),&density_intScale,nxhi_out,nxlo_out,nyhi_out,nylo_out,nzhi_out,nzlo_out,cu_density_brick->dev_data(),cu_density_brick_int->dev_data()); -} - - -/* ---------------------------------------------------------------------- - FFT-based Poisson solver -------------------------------------------------------------------------- */ -void PPPMCuda::poisson(int eflag, int vflag) -{ - -#ifndef FFT_CUFFT - PPPMOld::poisson(eflag,vflag); - return; -#endif -#ifdef FFT_CUFFT - my_times starttime; - my_times endtime; - - - my_gettime(CLOCK_REALTIME,&starttime); - fft1c->compute(density_fft,work1,1); - - my_gettime(CLOCK_REALTIME,&endtime); - poissontime+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - - - if (eflag || vflag) { - poisson_energy(nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft,vflag); - ENERGY_CFLOAT gpuvirial[6]; - energy+=sum_energy(cu_virial->dev_data(),cu_energy->dev_data(),nx_pppm,ny_pppm,nz_pppm,vflag,gpuvirial); - if(vflag) - { - for(int j=0;j<6;j++) virial[j]+=gpuvirial[j]; - } - } - - - // scale by 1/total-grid-pts to get rho(k) - // multiply by Green's function to get V(k) - - poisson_scale(nx_pppm,ny_pppm,nz_pppm); - - // compute gradients of V(r) in each of 3 dims by transformimg -ik*V(k) - // FFT leaves data in 3d brick decomposition - // copy it into inner portion of vdx,vdy,vdz arrays - - // x direction gradient - - - poisson_xgrad(nx_pppm,ny_pppm,nz_pppm); - - - my_gettime(CLOCK_REALTIME,&starttime); - fft2c->compute(work2,work2,-1); - my_gettime(CLOCK_REALTIME,&endtime); - poissontime+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - poisson_vdx_brick(nxhi_out,nxlo_out,nyhi_out,nylo_out,nzhi_out,nzlo_out,nx_pppm,ny_pppm,nz_pppm); - - - // y direction gradient - - poisson_ygrad(nx_pppm,ny_pppm,nz_pppm); - - my_gettime(CLOCK_REALTIME,&starttime); - fft2c->compute(work2,work2,-1); - my_gettime(CLOCK_REALTIME,&endtime); - poissontime+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - poisson_vdy_brick(nxhi_out,nxlo_out,nyhi_out,nylo_out,nzhi_out,nzlo_out,nx_pppm,ny_pppm,nz_pppm); - - // z direction gradient - - poisson_zgrad(nx_pppm,ny_pppm,nz_pppm); - - my_gettime(CLOCK_REALTIME,&starttime); - fft2c->compute(work2,work2,-1); - my_gettime(CLOCK_REALTIME,&endtime); - poissontime+=(endtime.tv_sec-starttime.tv_sec+1.0*(endtime.tv_nsec-starttime.tv_nsec)/1000000000); - - poisson_vdz_brick(nxhi_out,nxlo_out,nyhi_out,nylo_out,nzhi_out,nzlo_out,nx_pppm,ny_pppm,nz_pppm); - #endif -} - -/*---------------------------------------------------------------------- - interpolate from grid to get electric field & force on my particles --------------------------------------------------------------------------*/ - -void PPPMCuda::fieldforce() -{ - cuda_fieldforce(& cuda->shared_data,cu_flag); - return; -} - -/* ---------------------------------------------------------------------- - perform and time the 4 FFTs required for N timesteps -------------------------------------------------------------------------- */ - -int PPPMCuda::timing_1d(int n, double &time1d) -{ - time1d = cuda->shared_data.cuda_timings.pppm_poisson/update->nsteps/4*n; - return 4; -} - -int PPPMCuda::timing_3d(int n, double &time3d) -{ - time3d = cuda->shared_data.cuda_timings.pppm_poisson/update->nsteps*n; - return 4; -} - -void PPPMCuda::slabcorr(int eflag) -{ - // compute local contribution to global dipole moment - if(slabbuf==NULL) - { - slabbuf=new ENERGY_CFLOAT[(atom->nmax+31)/32]; - cu_slabbuf = new cCudaData (slabbuf, (atom->nmax+31)/32); - } - if(unsigned((atom->nlocal+31)/32)*sizeof(ENERGY_CFLOAT)>=unsigned(cu_slabbuf->dev_size())) - { - delete [] slabbuf; - delete cu_slabbuf; - slabbuf=new ENERGY_CFLOAT[(atom->nmax+31)/32]; - cu_slabbuf = new cCudaData (slabbuf, (atom->nmax+31)/32); - } - - - double dipole = cuda_slabcorr_energy(&cuda->shared_data,slabbuf,(ENERGY_CFLOAT*) cu_slabbuf->dev_data()); - - double dipole_all; - MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); - - //if (eflag) energy += qqrd2e*scale * e_slabcorr; - // need to add a correction to make non-neutral systems and per-atom energy translationally invariant - if (eflag || fabs(qsum) > SMALL) - error->all(FLERR,"Cannot (yet) use slab correction with kspace_style pppm/cuda for non-neutral systems or to get per-atom energy. Aborting."); - - double ffact = -4.0*MY_PI*dipole_all/volume; - - cuda_slabcorr_force(&cuda->shared_data,ffact); -} diff --git a/src/USER-CUDA/pppm_cuda.h b/src/USER-CUDA/pppm_cuda.h deleted file mode 100644 index cd22aa1d5d..0000000000 --- a/src/USER-CUDA/pppm_cuda.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef KSPACE_CLASS - -KSpaceStyle(pppm/cuda,PPPMCuda) - -#else - -#ifndef LMP_PPPM_CUDA_H -#define LMP_PPPM_CUDA_H - -#include "pppm_old.h" -#include "cuda_data.h" -#include "cuda_precision.h" - -namespace LAMMPS_NS { - -class PPPMCuda : public PPPMOld { - public: - PPPMCuda(class LAMMPS *, int, char **); - ~PPPMCuda(); - void init(); - void setup(); - void compute(int, int); - int timing_1d(int, double &); - int timing_3d(int, double &); - - double poissontime; - - protected: - class Cuda *cuda; - class FFT3dCuda *fft1c,*fft2c; - double* work3; - - cCudaData* cu_work1; - cCudaData* cu_work2; - cCudaData* cu_work3; - cCudaData* cu_greensfn; - cCudaData* cu_gf_b; - cCudaData* cu_fkx; - cCudaData* cu_fky; - cCudaData* cu_fkz; - cCudaData* cu_vg; - cCudaData* cu_density_brick; - cCudaData* cu_density_brick_int; - cCudaData* cu_vdx_brick; - cCudaData* cu_vdy_brick; - cCudaData* cu_vdz_brick; - cCudaData* cu_density_fft; - cCudaData* cu_energy; - cCudaData* cu_virial; - cCudaData* cu_x; - cCudaData* cu_v; - cCudaData* cu_f; - cCudaData* cu_q; - cCudaData* cu_part2grid; - cCudaData* cu_rho_coeff; - cCudaData* cu_debugdata; - cCudaData* cu_flag; - cCudaData* cu_pppm_grid_n; - cCudaData* cu_pppm_grid_ids; - - ENERGY_CFLOAT* slabbuf; - cCudaData* cu_slabbuf; - - int*** density_brick_int; - PPPM_CFLOAT density_intScale; - int pppm_grid_nmax; - int* pppm2partgrid; - int* pppm_grid; - PPPM_CFLOAT* debugdata; - bool firstpass; - - void set_grid(); - void allocate(); - void deallocate(); - - virtual void particle_map(); - virtual void make_rho(); - virtual void poisson(int, int); - virtual void fieldforce(); - virtual void slabcorr(int); - double*** vdx_brick_tmp; - int old_nmax; - int global_flag; - dev_array* adev_data_array; -}; - -} - -#endif -#endif diff --git a/src/USER-CUDA/pppm_old.cpp b/src/USER-CUDA/pppm_old.cpp deleted file mode 100644 index 9904e0be06..0000000000 --- a/src/USER-CUDA/pppm_old.cpp +++ /dev/null @@ -1,2839 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing authors: Roy Pollock (LLNL), Paul Crozier (SNL) - per-atom energy/virial & group/group energy/force added by Stan Moore (BYU) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include "pppm_old.h" -#include "math_const.h" -#include "atom.h" -#include "comm.h" -#include "neighbor.h" -#include "force.h" -#include "pair.h" -#include "bond.h" -#include "angle.h" -#include "domain.h" -#include "fft3d_wrap.h" -#include "remap_wrap.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; -using namespace MathConst; - -#define MAXORDER 7 -#define OFFSET 16384 -#define SMALL 0.00001 -#define LARGE 10000.0 -#define EPS_HOC 1.0e-7 - -#ifdef FFT_SINGLE -#define ZEROF 0.0f -#define ONEF 1.0f -#else -#define ZEROF 0.0 -#define ONEF 1.0 -#endif - -/* ---------------------------------------------------------------------- */ - -PPPMOld::PPPMOld(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg) -{ - if (narg < 1) error->all(FLERR,"Illegal kspace_style pppm command"); - - triclinic_support = 0; - pppmflag = 1; - group_group_enable = 0; - - accuracy_relative = fabs(force->numeric(FLERR,arg[0])); - - nfactors = 3; - factors = new int[nfactors]; - factors[0] = 2; - factors[1] = 3; - factors[2] = 5; - - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); - - density_brick = vdx_brick = vdy_brick = vdz_brick = NULL; - density_fft = NULL; - u_brick = NULL; - v0_brick = v1_brick = v2_brick = v3_brick = v4_brick = v5_brick = NULL; - greensfn = NULL; - work1 = work2 = NULL; - vg = NULL; - fkx = fky = fkz = NULL; - buf1 = buf2 = buf3 = buf4 = NULL; - - density_A_brick = density_B_brick = NULL; - density_A_fft = density_B_fft = NULL; - - gf_b = NULL; - rho1d = rho_coeff = NULL; - - fft1 = fft2 = NULL; - remap = NULL; - - nmax = 0; - part2grid = NULL; -} - -/* ---------------------------------------------------------------------- - free all memory -------------------------------------------------------------------------- */ - -PPPMOld::~PPPMOld() -{ - delete [] factors; - deallocate(); - deallocate_peratom(); - deallocate_groups(); - memory->destroy(part2grid); -} - -/* ---------------------------------------------------------------------- - called once before run -------------------------------------------------------------------------- */ - -void PPPMOld::init() -{ - if (me == 0) { - if (screen) fprintf(screen,"PPPM initialization ...\n"); - if (logfile) fprintf(logfile,"PPPM initialization ...\n"); - } - - // error check - - triclinic_check(); - if (domain->dimension == 2) error->all(FLERR, - "Cannot use PPPM with 2d simulation"); - - if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); - - if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPM"); - if (slabflag) { - if (domain->xperiodic != 1 || domain->yperiodic != 1 || - domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPM"); - } - - if (order < 2 || order > MAXORDER) { - char str[128]; - sprintf(str,"PPPM order cannot be < 2 or > than %d",MAXORDER); - error->all(FLERR,str); - } - - // free all arrays previously allocated - - deallocate(); - deallocate_peratom(); - peratom_allocate_flag = 0; - deallocate_groups(); - group_allocate_flag = 0; - - // extract short-range Coulombic cutoff from pair style - - pair_check(); - - int itmp=0; - double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); - if (p_cutoff == NULL) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - cutoff = *p_cutoff; - - // if kspace is TIP4P, extract TIP4P params from pair style - // bond/angle are not yet init(), so insure equilibrium request is valid - - qdist = 0.0; - - if (tip4pflag) { - double *p_qdist = (double *) force->pair->extract("qdist",itmp); - int *p_typeO = (int *) force->pair->extract("typeO",itmp); - int *p_typeH = (int *) force->pair->extract("typeH",itmp); - int *p_typeA = (int *) force->pair->extract("typeA",itmp); - int *p_typeB = (int *) force->pair->extract("typeB",itmp); - if (!p_qdist || !p_typeO || !p_typeH || !p_typeA || !p_typeB) - error->all(FLERR,"KSpace style is incompatible with Pair style"); - qdist = *p_qdist; - typeO = *p_typeO; - typeH = *p_typeH; - int typeA = *p_typeA; - int typeB = *p_typeB; - - if (force->angle == NULL || force->bond == NULL) - error->all(FLERR,"Bond and angle potentials must be defined for TIP4P"); - if (typeA < 1 || typeA > atom->nangletypes || - force->angle->setflag[typeA] == 0) - error->all(FLERR,"Bad TIP4P angle type for PPPM/TIP4P"); - if (typeB < 1 || typeB > atom->nbondtypes || - force->bond->setflag[typeB] == 0) - error->all(FLERR,"Bad TIP4P bond type for PPPM/TIP4P"); - double theta = force->angle->equilibrium_angle(typeA); - double blen = force->bond->equilibrium_distance(typeB); - alpha = qdist / (cos(0.5*theta) * blen); - } - - // compute qsum & qsqsum and warn if not charge-neutral - - scale = 1.0; - qqrd2e = force->qqrd2e; - qsum_qsq(); - natoms_original = atom->natoms; - - // set accuracy (force units) from accuracy_relative or accuracy_absolute - - if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; - else accuracy = accuracy_relative * two_charge_force; - - // setup FFT grid resolution and g_ewald - // normally one iteration thru while loop is all that is required - // if grid stencil extends beyond neighbor proc, reduce order and try again - - int iteration = 0; - - while (order > 1) { - if (iteration && me == 0) - error->warning(FLERR,"Reducing PPPM order b/c stencil extends " - "beyond neighbor processor"); - iteration++; - - set_grid(); - - if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) - error->all(FLERR,"PPPM grid is too large"); - - // global indices of PPPM grid range from 0 to N-1 - // nlo_in,nhi_in = lower/upper limits of the 3d sub-brick of - // global PPPM grid that I own without ghost cells - // for slab PPPM, assign z grid as if it were not extended - - nxlo_in = static_cast (comm->xsplit[comm->myloc[0]] * nx_pppm); - nxhi_in = static_cast (comm->xsplit[comm->myloc[0]+1] * nx_pppm) - 1; - - nylo_in = static_cast (comm->ysplit[comm->myloc[1]] * ny_pppm); - nyhi_in = static_cast (comm->ysplit[comm->myloc[1]+1] * ny_pppm) - 1; - - nzlo_in = static_cast - (comm->zsplit[comm->myloc[2]] * nz_pppm/slab_volfactor); - nzhi_in = static_cast - (comm->zsplit[comm->myloc[2]+1] * nz_pppm/slab_volfactor) - 1; - - // nlower,nupper = stencil size for mapping particles to PPPM grid - - nlower = -(order-1)/2; - nupper = order/2; - - // shift values for particle <-> grid mapping - // add/subtract OFFSET to avoid int(-0.75) = 0 when want it to be -1 - - if (order % 2) shift = OFFSET + 0.5; - else shift = OFFSET; - if (order % 2) shiftone = 0.0; - else shiftone = 0.5; - - // nlo_out,nhi_out = lower/upper limits of the 3d sub-brick of - // global PPPM grid that my particles can contribute charge to - // effectively nlo_in,nhi_in + ghost cells - // nlo,nhi = global coords of grid pt to "lower left" of smallest/largest - // position a particle in my box can be at - // dist[3] = particle position bound = subbox + skin/2.0 + qdist - // qdist = offset due to TIP4P fictitious charge - // convert to triclinic if necessary - // nlo_out,nhi_out = nlo,nhi + stencil size for particle mapping - // for slab PPPM, assign z grid as if it were not extended - - triclinic = domain->triclinic; - double *prd,*sublo,*subhi; - - if (triclinic == 0) { - prd = domain->prd; - boxlo = domain->boxlo; - sublo = domain->sublo; - subhi = domain->subhi; - } else { - prd = domain->prd_lamda; - boxlo = domain->boxlo_lamda; - sublo = domain->sublo_lamda; - subhi = domain->subhi_lamda; - } - - double xprd = prd[0]; - double yprd = prd[1]; - double zprd = prd[2]; - double zprd_slab = zprd*slab_volfactor; - - double dist[3]; - double cuthalf = 0.5*neighbor->skin + qdist; - if (triclinic == 0) dist[0] = dist[1] = dist[2] = cuthalf; - else { - dist[0] = cuthalf/domain->prd[0]; - dist[1] = cuthalf/domain->prd[1]; - dist[2] = cuthalf/domain->prd[2]; - } - - int nlo,nhi; - - nlo = static_cast ((sublo[0]-dist[0]-boxlo[0]) * - nx_pppm/xprd + shift) - OFFSET; - nhi = static_cast ((subhi[0]+dist[0]-boxlo[0]) * - nx_pppm/xprd + shift) - OFFSET; - nxlo_out = nlo + nlower; - nxhi_out = nhi + nupper; - - nlo = static_cast ((sublo[1]-dist[1]-boxlo[1]) * - ny_pppm/yprd + shift) - OFFSET; - nhi = static_cast ((subhi[1]+dist[1]-boxlo[1]) * - ny_pppm/yprd + shift) - OFFSET; - nylo_out = nlo + nlower; - nyhi_out = nhi + nupper; - - nlo = static_cast ((sublo[2]-dist[2]-boxlo[2]) * - nz_pppm/zprd_slab + shift) - OFFSET; - nhi = static_cast ((subhi[2]+dist[2]-boxlo[2]) * - nz_pppm/zprd_slab + shift) - OFFSET; - nzlo_out = nlo + nlower; - nzhi_out = nhi + nupper; - - // for slab PPPM, change the grid boundary for processors at +z end - // to include the empty volume between periodically repeating slabs - // for slab PPPM, want charge data communicated from -z proc to +z proc, - // but not vice versa, also want field data communicated from +z proc to - // -z proc, but not vice versa - // this is accomplished by nzhi_in = nzhi_out on +z end (no ghost cells) - - if (slabflag == 1 && (comm->myloc[2] == comm->procgrid[2]-1)) { - nzhi_in = nz_pppm - 1; - nzhi_out = nz_pppm - 1; - } - - // nlo_ghost,nhi_ghost = # of planes I will recv from 6 directions - // that overlay domain I own - // proc in that direction tells me via sendrecv() - // if no neighbor proc, value is from self since I have ghosts regardless - - int nplanes; - - nplanes = nxlo_in - nxlo_out; - if (comm->procneigh[0][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[0][0],0, - &nxhi_ghost,1,MPI_INT,comm->procneigh[0][1],0, - world,MPI_STATUS_IGNORE); - else nxhi_ghost = nplanes; - - nplanes = nxhi_out - nxhi_in; - if (comm->procneigh[0][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[0][1],0, - &nxlo_ghost,1,MPI_INT,comm->procneigh[0][0], - 0,world,MPI_STATUS_IGNORE); - else nxlo_ghost = nplanes; - - nplanes = nylo_in - nylo_out; - if (comm->procneigh[1][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[1][0],0, - &nyhi_ghost,1,MPI_INT,comm->procneigh[1][1],0, - world,MPI_STATUS_IGNORE); - else nyhi_ghost = nplanes; - - nplanes = nyhi_out - nyhi_in; - if (comm->procneigh[1][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[1][1],0, - &nylo_ghost,1,MPI_INT,comm->procneigh[1][0],0, - world,MPI_STATUS_IGNORE); - else nylo_ghost = nplanes; - - nplanes = nzlo_in - nzlo_out; - if (comm->procneigh[2][0] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[2][0],0, - &nzhi_ghost,1,MPI_INT,comm->procneigh[2][1],0, - world,MPI_STATUS_IGNORE); - else nzhi_ghost = nplanes; - - nplanes = nzhi_out - nzhi_in; - if (comm->procneigh[2][1] != me) - MPI_Sendrecv(&nplanes,1,MPI_INT,comm->procneigh[2][1],0, - &nzlo_ghost,1,MPI_INT,comm->procneigh[2][0],0, - world,MPI_STATUS_IGNORE); - else nzlo_ghost = nplanes; - - // test that ghost overlap is not bigger than my sub-domain - - int flag = 0; - if (nxlo_ghost > nxhi_in-nxlo_in+1) flag = 1; - if (nxhi_ghost > nxhi_in-nxlo_in+1) flag = 1; - if (nylo_ghost > nyhi_in-nylo_in+1) flag = 1; - if (nyhi_ghost > nyhi_in-nylo_in+1) flag = 1; - if (nzlo_ghost > nzhi_in-nzlo_in+1) flag = 1; - if (nzhi_ghost > nzhi_in-nzlo_in+1) flag = 1; - - int flag_all; - MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - - if (flag_all == 0) break; - order--; - } - - if (order == 0) error->all(FLERR,"PPPM order has been reduced to 0"); - - // decomposition of FFT mesh - // global indices range from 0 to N-1 - // proc owns entire x-dimension, clump of columns in y,z dimensions - // npey_fft,npez_fft = # of procs in y,z dims - // if nprocs is small enough, proc can own 1 or more entire xy planes, - // else proc owns 2d sub-blocks of yz plane - // me_y,me_z = which proc (0-npe_fft-1) I am in y,z dimensions - // nlo_fft,nhi_fft = lower/upper limit of the section - // of the global FFT mesh that I own - - int npey_fft,npez_fft; - if (nz_pppm >= nprocs) { - npey_fft = 1; - npez_fft = nprocs; - } else procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); - - int me_y = me % npey_fft; - int me_z = me / npey_fft; - - nxlo_fft = 0; - nxhi_fft = nx_pppm - 1; - nylo_fft = me_y*ny_pppm/npey_fft; - nyhi_fft = (me_y+1)*ny_pppm/npey_fft - 1; - nzlo_fft = me_z*nz_pppm/npez_fft; - nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; - - // PPPM grid for this proc, including ghosts - - ngrid = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * - (nzhi_out-nzlo_out+1); - - // FFT arrays on this proc, without ghosts - // nfft = FFT points in FFT decomposition on this proc - // nfft_brick = FFT points in 3d brick-decomposition on this proc - // nfft_both = greater of 2 values - - nfft = (nxhi_fft-nxlo_fft+1) * (nyhi_fft-nylo_fft+1) * - (nzhi_fft-nzlo_fft+1); - int nfft_brick = (nxhi_in-nxlo_in+1) * (nyhi_in-nylo_in+1) * - (nzhi_in-nzlo_in+1); - nfft_both = MAX(nfft,nfft_brick); - - // buffer space for use in brick2fft and fillbrick - // idel = max # of ghost planes to send or recv in +/- dir of each dim - // nx,ny,nz = owned planes (including ghosts) in each dim - // nxx,nyy,nzz = max # of grid cells to send in each dim - // nbuf = max in any dim, augment by 3x for components of vd_xyz in fillbrick - - int idelx,idely,idelz,nx,ny,nz,nxx,nyy,nzz; - - idelx = MAX(nxlo_ghost,nxhi_ghost); - idelx = MAX(idelx,nxhi_out-nxhi_in); - idelx = MAX(idelx,nxlo_in-nxlo_out); - - idely = MAX(nylo_ghost,nyhi_ghost); - idely = MAX(idely,nyhi_out-nyhi_in); - idely = MAX(idely,nylo_in-nylo_out); - - idelz = MAX(nzlo_ghost,nzhi_ghost); - idelz = MAX(idelz,nzhi_out-nzhi_in); - idelz = MAX(idelz,nzlo_in-nzlo_out); - - nx = nxhi_out - nxlo_out + 1; - ny = nyhi_out - nylo_out + 1; - nz = nzhi_out - nzlo_out + 1; - - nxx = idelx * ny * nz; - nyy = idely * nx * nz; - nzz = idelz * nx * ny; - - nbuf = MAX(nxx,nyy); - nbuf = MAX(nbuf,nzz); - - nbuf_peratom = 7*nbuf; - nbuf *= 3; - - // print stats - - int ngrid_max,nfft_both_max,nbuf_max; - MPI_Allreduce(&ngrid,&ngrid_max,1,MPI_INT,MPI_MAX,world); - MPI_Allreduce(&nfft_both,&nfft_both_max,1,MPI_INT,MPI_MAX,world); - MPI_Allreduce(&nbuf,&nbuf_max,1,MPI_INT,MPI_MAX,world); - - if (me == 0) { - if (screen) fprintf(screen," brick FFT buffer size/proc = %d %d %d\n", - ngrid_max,nfft_both_max,nbuf_max); - if (logfile) fprintf(logfile," brick FFT buffer size/proc = %d %d %d\n", - ngrid_max,nfft_both_max,nbuf_max); - } - - // allocate K-space dependent memory - // don't invoke allocate_peratom() here, wait to see if needed - - allocate(); - - // pre-compute Green's function denomiator expansion - // pre-compute 1d charge distribution coefficients - - compute_gf_denom(); - compute_rho_coeff(); -} - -/* ---------------------------------------------------------------------- - adjust PPPM coeffs, called initially and whenever volume has changed -------------------------------------------------------------------------- */ - -void PPPMOld::setup() -{ - int i,j,k,l,m,n; - double *prd; - - // volume-dependent factors - // adjust z dimension for 2d slab PPPM - // z dimension for 3d PPPM is zprd since slab_volfactor = 1.0 - - if (triclinic == 0) prd = domain->prd; - else prd = domain->prd_lamda; - - double xprd = prd[0]; - double yprd = prd[1]; - double zprd = prd[2]; - double zprd_slab = zprd*slab_volfactor; - volume = xprd * yprd * zprd_slab; - - delxinv = nx_pppm/xprd; - delyinv = ny_pppm/yprd; - delzinv = nz_pppm/zprd_slab; - - delvolinv = delxinv*delyinv*delzinv; - - double unitkx = (2.0*MY_PI/xprd); - double unitky = (2.0*MY_PI/yprd); - double unitkz = (2.0*MY_PI/zprd_slab); - - // fkx,fky,fkz for my FFT grid pts - - double per; - - for (i = nxlo_fft; i <= nxhi_fft; i++) { - per = i - nx_pppm*(2*i/nx_pppm); - fkx[i] = unitkx*per; - } - - for (i = nylo_fft; i <= nyhi_fft; i++) { - per = i - ny_pppm*(2*i/ny_pppm); - fky[i] = unitky*per; - } - - for (i = nzlo_fft; i <= nzhi_fft; i++) { - per = i - nz_pppm*(2*i/nz_pppm); - fkz[i] = unitkz*per; - } - - // virial coefficients - - double sqk,vterm; - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) { - for (j = nylo_fft; j <= nyhi_fft; j++) { - for (i = nxlo_fft; i <= nxhi_fft; i++) { - sqk = fkx[i]*fkx[i] + fky[j]*fky[j] + fkz[k]*fkz[k]; - if (sqk == 0.0) { - vg[n][0] = 0.0; - vg[n][1] = 0.0; - vg[n][2] = 0.0; - vg[n][3] = 0.0; - vg[n][4] = 0.0; - vg[n][5] = 0.0; - } else { - vterm = -2.0 * (1.0/sqk + 0.25/(g_ewald*g_ewald)); - vg[n][0] = 1.0 + vterm*fkx[i]*fkx[i]; - vg[n][1] = 1.0 + vterm*fky[j]*fky[j]; - vg[n][2] = 1.0 + vterm*fkz[k]*fkz[k]; - vg[n][3] = vterm*fkx[i]*fky[j]; - vg[n][4] = vterm*fkx[i]*fkz[k]; - vg[n][5] = vterm*fky[j]*fkz[k]; - } - n++; - } - } - } - - // modified (Hockney-Eastwood) Coulomb Green's function - - int nx,ny,nz,kper,lper,mper; - double snx,sny,snz,snx2,sny2,snz2; - double argx,argy,argz,wx,wy,wz,sx,sy,sz,qx,qy,qz; - double sum1,dot1,dot2; - double numerator,denominator; - - int nbx = static_cast ((g_ewald*xprd/(MY_PI*nx_pppm)) * - pow(-log(EPS_HOC),0.25)); - int nby = static_cast ((g_ewald*yprd/(MY_PI*ny_pppm)) * - pow(-log(EPS_HOC),0.25)); - int nbz = static_cast ((g_ewald*zprd_slab/(MY_PI*nz_pppm)) * - pow(-log(EPS_HOC),0.25)); - - double form = 1.0; - - n = 0; - for (m = nzlo_fft; m <= nzhi_fft; m++) { - mper = m - nz_pppm*(2*m/nz_pppm); - snz = sin(0.5*unitkz*mper*zprd_slab/nz_pppm); - snz2 = snz*snz; - - for (l = nylo_fft; l <= nyhi_fft; l++) { - lper = l - ny_pppm*(2*l/ny_pppm); - sny = sin(0.5*unitky*lper*yprd/ny_pppm); - sny2 = sny*sny; - - for (k = nxlo_fft; k <= nxhi_fft; k++) { - kper = k - nx_pppm*(2*k/nx_pppm); - snx = sin(0.5*unitkx*kper*xprd/nx_pppm); - snx2 = snx*snx; - - sqk = pow(unitkx*kper,2.0) + pow(unitky*lper,2.0) + - pow(unitkz*mper,2.0); - - if (sqk != 0.0) { - numerator = form*12.5663706/sqk; - denominator = gf_denom(snx2,sny2,snz2); - sum1 = 0.0; - const double dorder = static_cast(order); - for (nx = -nbx; nx <= nbx; nx++) { - qx = unitkx*(kper+nx_pppm*nx); - sx = exp(-0.25*pow(qx/g_ewald,2.0)); - wx = 1.0; - argx = 0.5*qx*xprd/nx_pppm; - if (argx != 0.0) wx = pow(sin(argx)/argx,dorder); - for (ny = -nby; ny <= nby; ny++) { - qy = unitky*(lper+ny_pppm*ny); - sy = exp(-0.25*pow(qy/g_ewald,2.0)); - wy = 1.0; - argy = 0.5*qy*yprd/ny_pppm; - if (argy != 0.0) wy = pow(sin(argy)/argy,dorder); - for (nz = -nbz; nz <= nbz; nz++) { - qz = unitkz*(mper+nz_pppm*nz); - sz = exp(-0.25*pow(qz/g_ewald,2.0)); - wz = 1.0; - argz = 0.5*qz*zprd_slab/nz_pppm; - if (argz != 0.0) wz = pow(sin(argz)/argz,dorder); - - dot1 = unitkx*kper*qx + unitky*lper*qy + unitkz*mper*qz; - dot2 = qx*qx+qy*qy+qz*qz; - sum1 += (dot1/dot2) * sx*sy*sz * pow(wx*wy*wz,2.0); - } - } - } - greensfn[n++] = numerator*sum1/denominator; - } else greensfn[n++] = 0.0; - } - } - } -} - -/* ---------------------------------------------------------------------- - compute the PPPM long-range force, energy, virial -------------------------------------------------------------------------- */ - -void PPPMOld::compute(int eflag, int vflag) -{ - int i,j; - - // set energy/virial flags - // invoke allocate_peratom() if needed for first time - - if (eflag || vflag) ev_setup(eflag,vflag); - else evflag = evflag_atom = eflag_global = vflag_global = - eflag_atom = vflag_atom = 0; - - if (evflag_atom && !peratom_allocate_flag) { - allocate_peratom(); - peratom_allocate_flag = 1; - } - - // convert atoms from box to lamda coords - - if (triclinic == 0) boxlo = domain->boxlo; - else { - boxlo = domain->boxlo_lamda; - domain->x2lamda(atom->nlocal); - } - - // extend size of per-atom arrays if necessary - - if (atom->nmax > nmax) { - memory->destroy(part2grid); - nmax = atom->nmax; - memory->create(part2grid,nmax,3,"pppm:part2grid"); - } - - // find grid points for all my particles - // map my particle charge onto my local 3d density grid - - particle_map(); - make_rho(); - - // all procs communicate density values from their ghost cells - // to fully sum contribution in their 3d bricks - // remap from 3d decomposition to FFT decomposition - - brick2fft(); - - // compute potential gradient on my FFT grid and - // portion of e_long on this proc's FFT grid - // return gradients (electric fields) in 3d brick decomposition - // also performs per-atom calculations via poisson_peratom() - - poisson(eflag,vflag); - - // all procs communicate E-field values - // to fill ghost cells surrounding their 3d bricks - - fillbrick(); - - // extra per-atom energy/virial communication - - if (evflag_atom) fillbrick_peratom(); - - // calculate the force on my particles - - fieldforce(); - - // extra per-atom energy/virial communication - - if (evflag_atom) fieldforce_peratom(); - - // update qsum and qsqsum, if atom count has changed and energy needed - - if ((eflag_global || eflag_atom) && atom->natoms != natoms_original) { - qsum_qsq(); - natoms_original = atom->natoms; - } - - // sum global energy across procs and add in volume-dependent term - - const double qscale = qqrd2e * scale; - - if (eflag_global) { - double energy_all; - MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); - energy = energy_all; - - energy *= 0.5*volume; - energy -= g_ewald*qsqsum/MY_PIS + - MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); - energy *= qscale; - } - - // sum global virial across procs - - if (vflag_global) { - double virial_all[6]; - MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; - } - - // per-atom energy/virial - // energy includes self-energy correction - - if (evflag_atom) { - double *q = atom->q; - int nlocal = atom->nlocal; - - if (eflag_atom) { - for (i = 0; i < nlocal; i++) { - eatom[i] *= 0.5; - eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / - (g_ewald*g_ewald*volume); - eatom[i] *= qscale; - } - } - - if (vflag_atom) { - for (i = 0; i < nlocal; i++) - for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*q[i]*qscale; - } - } - - // 2d slab correction - - if (slabflag == 1) slabcorr(); - - // convert atoms back from lamda to box coords - - if (triclinic) domain->lamda2x(atom->nlocal); -} - -/* ---------------------------------------------------------------------- - allocate memory that depends on # of K-vectors and order -------------------------------------------------------------------------- */ - -void PPPMOld::allocate() -{ - memory->create3d_offset(density_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:density_brick"); - memory->create3d_offset(vdx_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdx_brick"); - memory->create3d_offset(vdy_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdy_brick"); - memory->create3d_offset(vdz_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:vdz_brick"); - - memory->create(density_fft,nfft_both,"pppm:density_fft"); - memory->create(greensfn,nfft_both,"pppm:greensfn"); - memory->create(work1,2*nfft_both,"pppm:work1"); - memory->create(work2,2*nfft_both,"pppm:work2"); - memory->create(vg,nfft_both,6,"pppm:vg"); - - memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm:fkx"); - memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm:fky"); - memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm:fkz"); - - memory->create(buf1,nbuf,"pppm:buf1"); - memory->create(buf2,nbuf,"pppm:buf2"); - - // summation coeffs - - memory->create(gf_b,order,"pppm:gf_b"); - memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm:rho1d"); - memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm:rho_coeff"); - - // create 2 FFTs and a Remap - // 1st FFT keeps data in FFT decompostion - // 2nd FFT returns data in 3d brick decomposition - // remap takes data from 3d brick to FFT decomposition - - int tmp; - - fft1 = new FFT3d(lmp,world,nx_pppm,ny_pppm,nz_pppm, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 0,0,&tmp,collective_flag); - - fft2 = new FFT3d(lmp,world,nx_pppm,ny_pppm,nz_pppm, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - 0,0,&tmp,collective_flag); - - remap = new Remap(lmp,world, - nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 1,0,0,FFT_PRECISION,collective_flag); -} - -/* ---------------------------------------------------------------------- - allocate per-atom memory that depends on # of K-vectors and order -------------------------------------------------------------------------- */ - -void PPPMOld::allocate_peratom() -{ - memory->create3d_offset(u_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:u_brick"); - - memory->create3d_offset(v0_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v0_brick"); - memory->create3d_offset(v1_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v1_brick"); - memory->create3d_offset(v2_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v2_brick"); - memory->create3d_offset(v3_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v3_brick"); - memory->create3d_offset(v4_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v4_brick"); - memory->create3d_offset(v5_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:v5_brick"); - - memory->create(buf3,nbuf_peratom,"pppm:buf3"); - memory->create(buf4,nbuf_peratom,"pppm:buf4"); -} - -/* ---------------------------------------------------------------------- - deallocate memory that depends on # of K-vectors and order -------------------------------------------------------------------------- */ - -void PPPMOld::deallocate() -{ - memory->destroy3d_offset(density_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdx_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdy_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdz_brick,nzlo_out,nylo_out,nxlo_out); - - memory->destroy(density_fft); - memory->destroy(greensfn); - memory->destroy(work1); - memory->destroy(work2); - memory->destroy(vg); - - memory->destroy1d_offset(fkx,nxlo_fft); - memory->destroy1d_offset(fky,nylo_fft); - memory->destroy1d_offset(fkz,nzlo_fft); - - memory->destroy(buf1); - memory->destroy(buf2); - - memory->destroy(gf_b); - memory->destroy2d_offset(rho1d,-order/2); - memory->destroy2d_offset(rho_coeff,(1-order)/2); - - delete fft1; - delete fft2; - delete remap; -} - -/* ---------------------------------------------------------------------- - deallocate per-atom memory that depends on # of K-vectors and order -------------------------------------------------------------------------- */ - -void PPPMOld::deallocate_peratom() -{ - memory->destroy3d_offset(u_brick,nzlo_out,nylo_out,nxlo_out); - - memory->destroy3d_offset(v0_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5_brick,nzlo_out,nylo_out,nxlo_out); - - memory->destroy(buf3); - memory->destroy(buf4); -} - -/* ---------------------------------------------------------------------- - set size of FFT grid (nx,ny,nz_pppm) and g_ewald -------------------------------------------------------------------------- */ - -void PPPMOld::set_grid() -{ - // see JCP 109, pg 7698 for derivation of coefficients - // higher order coefficients may be computed if needed - - double **acons; - memory->create(acons,8,7,"pppm:acons"); - - acons[1][0] = 2.0 / 3.0; - acons[2][0] = 1.0 / 50.0; - acons[2][1] = 5.0 / 294.0; - acons[3][0] = 1.0 / 588.0; - acons[3][1] = 7.0 / 1440.0; - acons[3][2] = 21.0 / 3872.0; - acons[4][0] = 1.0 / 4320.0; - acons[4][1] = 3.0 / 1936.0; - acons[4][2] = 7601.0 / 2271360.0; - acons[4][3] = 143.0 / 28800.0; - acons[5][0] = 1.0 / 23232.0; - acons[5][1] = 7601.0 / 13628160.0; - acons[5][2] = 143.0 / 69120.0; - acons[5][3] = 517231.0 / 106536960.0; - acons[5][4] = 106640677.0 / 11737571328.0; - acons[6][0] = 691.0 / 68140800.0; - acons[6][1] = 13.0 / 57600.0; - acons[6][2] = 47021.0 / 35512320.0; - acons[6][3] = 9694607.0 / 2095994880.0; - acons[6][4] = 733191589.0 / 59609088000.0; - acons[6][5] = 326190917.0 / 11700633600.0; - acons[7][0] = 1.0 / 345600.0; - acons[7][1] = 3617.0 / 35512320.0; - acons[7][2] = 745739.0 / 838397952.0; - acons[7][3] = 56399353.0 / 12773376000.0; - acons[7][4] = 25091609.0 / 1560084480.0; - acons[7][5] = 1755948832039.0 / 36229939200000.0; - acons[7][6] = 4887769399.0 / 37838389248.0; - - // use xprd,yprd,zprd even if triclinic so grid size is the same - // adjust z dimension for 2d slab PPPM - // 3d PPPM just uses zprd since slab_volfactor = 1.0 - - double xprd = domain->xprd; - double yprd = domain->yprd; - double zprd = domain->zprd; - double zprd_slab = zprd*slab_volfactor; - - // make initial g_ewald estimate - // based on desired accuracy and real space cutoff - // fluid-occupied volume used to estimate real-space error - // zprd used rather than zprd_slab - - double h_x,h_y,h_z; - bigint natoms = atom->natoms; - - if (!gewaldflag) { - if (accuracy <= 0.0) - error->all(FLERR,"KSpace accuracy must be > 0"); - g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2); - if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; - else g_ewald = sqrt(-log(g_ewald)) / cutoff; - } - - // set optimal nx_pppm,ny_pppm,nz_pppm based on order and accuracy - // nz_pppm uses extended zprd_slab instead of zprd - // h = 1/g_ewald is upper bound on h such that h*g_ewald <= 1 - // reduce it until accuracy target is met - - if (!gridflag) { - double err; - h_x = h_y = h_z = 1.0/g_ewald; - - nx_pppm = static_cast (xprd/h_x) + 1; - ny_pppm = static_cast (yprd/h_y) + 1; - nz_pppm = static_cast (zprd_slab/h_z) + 1; - - err = rms(h_x,xprd,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_x,xprd,natoms,q2,acons); - nx_pppm++; - h_x = xprd/nx_pppm; - } - - err = rms(h_y,yprd,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_y,yprd,natoms,q2,acons); - ny_pppm++; - h_y = yprd/ny_pppm; - } - - err = rms(h_z,zprd_slab,natoms,q2,acons); - while (err > accuracy) { - err = rms(h_z,zprd_slab,natoms,q2,acons); - nz_pppm++; - h_z = zprd_slab/nz_pppm; - } - } - - // boost grid size until it is factorable - - while (!factorable(nx_pppm)) nx_pppm++; - while (!factorable(ny_pppm)) ny_pppm++; - while (!factorable(nz_pppm)) nz_pppm++; - - // adjust g_ewald for new grid size - - h_x = xprd/static_cast(nx_pppm); - h_y = yprd/static_cast(ny_pppm); - h_z = zprd_slab/static_cast(nz_pppm); - - if (!gewaldflag) { - double gew1,gew2,dgew,f,fmid,hmin,rtb; - int ncount; - - gew1 = 0.0; - g_ewald = gew1; - f = diffpr(h_x,h_y,h_z,q2,acons); - - hmin = MIN(h_x,MIN(h_y,h_z)); - gew2 = 10.0/hmin; - g_ewald = gew2; - fmid = diffpr(h_x,h_y,h_z,q2,acons); - - if (f*fmid >= 0.0) error->all(FLERR,"Cannot compute PPPM G"); - rtb = f < 0.0 ? (dgew=gew2-gew1,gew1) : (dgew=gew1-gew2,gew2); - ncount = 0; - while (fabs(dgew) > SMALL && fmid != 0.0) { - dgew *= 0.5; - g_ewald = rtb + dgew; - fmid = diffpr(h_x,h_y,h_z,q2,acons); - if (fmid <= 0.0) rtb = g_ewald; - ncount++; - if (ncount > LARGE) error->all(FLERR,"Cannot compute PPPM G"); - } - } - - // final RMS accuracy - - double lprx = rms(h_x,xprd,natoms,q2,acons); - double lpry = rms(h_y,yprd,natoms,q2,acons); - double lprz = rms(h_z,zprd_slab,natoms,q2,acons); - double lpr = sqrt(lprx*lprx + lpry*lpry + lprz*lprz) / sqrt(3.0); - double q2_over_sqrt = q2 / sqrt(natoms*cutoff*xprd*yprd*zprd_slab); - double spr = 2.0 *q2_over_sqrt * exp(-g_ewald*g_ewald*cutoff*cutoff); - double tpr = estimate_table_accuracy(q2_over_sqrt,spr); - double accuracy = sqrt(lpr*lpr + spr*spr + tpr*tpr); - - // free local memory - - memory->destroy(acons); - - // print info - - if (me == 0) { -#ifdef FFT_SINGLE - const char fft_prec[] = "single"; -#else - const char fft_prec[] = "double"; -#endif - if (screen) { - fprintf(screen," G vector (1/distance)= %g\n",g_ewald); - fprintf(screen," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); - fprintf(screen," stencil order = %d\n",order); - fprintf(screen," estimated absolute RMS force accuracy = %g\n", - accuracy); - fprintf(screen," estimated relative force accuracy = %g\n", - accuracy/two_charge_force); - fprintf(screen," using %s precision FFTs\n",fft_prec); - } - if (logfile) { - fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); - fprintf(logfile," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); - fprintf(logfile," stencil order = %d\n",order); - fprintf(logfile," estimated absolute RMS force accuracy = %g\n", - accuracy); - fprintf(logfile," estimated relative force accuracy = %g\n", - accuracy/two_charge_force); - fprintf(logfile," using %s precision FFTs\n",fft_prec); - } - } -} - -/* ---------------------------------------------------------------------- - check if all factors of n are in list of factors - return 1 if yes, 0 if no -------------------------------------------------------------------------- */ - -int PPPMOld::factorable(int n) -{ - int i; - - while (n > 1) { - for (i = 0; i < nfactors; i++) { - if (n % factors[i] == 0) { - n /= factors[i]; - break; - } - } - if (i == nfactors) return 0; - } - - return 1; -} - -/* ---------------------------------------------------------------------- - compute RMS accuracy for a dimension -------------------------------------------------------------------------- */ - -double PPPMOld::rms(double h, double prd, bigint natoms, - double q2, double **acons) -{ - double sum = 0.0; - for (int m = 0; m < order; m++) - sum += acons[order][m] * pow(h*g_ewald,2.0*m); - double value = q2 * pow(h*g_ewald,(double)order) * - sqrt(g_ewald*prd*sqrt(2.0*MY_PI)*sum/natoms) / (prd*prd); - return value; -} - -/* ---------------------------------------------------------------------- - compute difference in real-space and KSpace RMS accuracy -------------------------------------------------------------------------- */ - -double PPPMOld::diffpr(double h_x, double h_y, double h_z, double q2, - double **acons) -{ - double lprx,lpry,lprz,kspace_prec,real_prec; - double xprd = domain->xprd; - double yprd = domain->yprd; - double zprd = domain->zprd; - bigint natoms = atom->natoms; - - lprx = rms(h_x,xprd,natoms,q2,acons); - lpry = rms(h_y,yprd,natoms,q2,acons); - lprz = rms(h_z,zprd*slab_volfactor,natoms,q2,acons); - kspace_prec = sqrt(lprx*lprx + lpry*lpry + lprz*lprz) / sqrt(3.0); - real_prec = 2.0*q2 * exp(-g_ewald*g_ewald*cutoff*cutoff) / - sqrt(static_cast(natoms)*cutoff*xprd*yprd*zprd); - double value = kspace_prec - real_prec; - return value; -} - -/* ---------------------------------------------------------------------- - pre-compute Green's function denominator expansion coeffs, Gamma(2n) -------------------------------------------------------------------------- */ - -void PPPMOld::compute_gf_denom() -{ - int k,l,m; - - for (l = 1; l < order; l++) gf_b[l] = 0.0; - gf_b[0] = 1.0; - - for (m = 1; m < order; m++) { - for (l = m; l > 0; l--) - gf_b[l] = 4.0 * (gf_b[l]*(l-m)*(l-m-0.5)-gf_b[l-1]*(l-m-1)*(l-m-1)); - gf_b[0] = 4.0 * (gf_b[0]*(l-m)*(l-m-0.5)); - } - - bigint ifact = 1; - for (k = 1; k < 2*order; k++) ifact *= k; - double gaminv = 1.0/ifact; - for (l = 0; l < order; l++) gf_b[l] *= gaminv; -} - -/* ---------------------------------------------------------------------- - ghost-swap to accumulate full density in brick decomposition - remap density from 3d brick decomposition to FFT decomposition -------------------------------------------------------------------------- */ - -void PPPMOld::brick2fft() -{ - int i,n,ix,iy,iz; - MPI_Request request; - - // pack my ghosts for +x processor - // pass data to self or +x processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in+1; ix <= nxhi_out; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[0][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[0][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[0][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix < nxlo_in+nxlo_ghost; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // pack my ghosts for -x processor - // pass data to self or -x processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_out; ix < nxlo_in; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[0][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[0][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[0][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in-nxhi_ghost+1; ix <= nxhi_in; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // pack my ghosts for +y processor - // pass data to self or +y processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in+1; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[1][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[1][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[1][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy < nylo_in+nylo_ghost; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // pack my ghosts for -y processor - // pass data to self or -y processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy < nylo_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[1][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[1][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[1][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in-nyhi_ghost+1; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // pack my ghosts for +z processor - // pass data to self or +z processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzhi_in+1; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[2][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[2][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[2][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_in; iz < nzlo_in+nzlo_ghost; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // pack my ghosts for -z processor - // pass data to self or -z processor - // unpack and sum recv data into my real cells - - n = 0; - for (iz = nzlo_out; iz < nzlo_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - buf1[n++] = density_brick[iz][iy][ix]; - - if (comm->procneigh[2][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[2][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[2][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzhi_in-nzhi_ghost+1; iz <= nzhi_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - density_brick[iz][iy][ix] += buf2[n++]; - - // remap from 3d brick decomposition to FFT decomposition - // copy grabs inner portion of density from 3d brick - // remap could be done as pre-stage of FFT, - // but this works optimally on only double values, not complex values - - n = 0; - for (iz = nzlo_in; iz <= nzhi_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) - density_fft[n++] = density_brick[iz][iy][ix]; - - remap->perform(density_fft,density_fft,work1); -} - -/* ---------------------------------------------------------------------- - ghost-swap to fill ghost cells of my brick with field values -------------------------------------------------------------------------- */ - -void PPPMOld::fillbrick() -{ - int i,n,ix,iy,iz; - MPI_Request request; - - // pack my real cells for +z processor - // pass data to self or +z processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzhi_in-nzhi_ghost+1; iz <= nzhi_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[2][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[2][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[2][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz < nzlo_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } - - // pack my real cells for -z processor - // pass data to self or -z processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_in; iz < nzlo_in+nzlo_ghost; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[2][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[2][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[2][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzhi_in+1; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } - - // pack my real cells for +y processor - // pass data to self or +y processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in-nyhi_ghost+1; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[1][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[1][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[1][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy < nylo_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } - - // pack my real cells for -y processor - // pass data to self or -y processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy < nylo_in+nylo_ghost; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[1][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[1][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[1][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in+1; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } - - // pack my real cells for +x processor - // pass data to self or +x processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in-nxhi_ghost+1; ix <= nxhi_in; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[0][1] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[0][0],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[0][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_out; ix < nxlo_in; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } - - // pack my real cells for -x processor - // pass data to self or -x processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix < nxlo_in+nxlo_ghost; ix++) { - buf1[n++] = vdx_brick[iz][iy][ix]; - buf1[n++] = vdy_brick[iz][iy][ix]; - buf1[n++] = vdz_brick[iz][iy][ix]; - } - - if (comm->procneigh[0][0] == me) - for (i = 0; i < n; i++) buf2[i] = buf1[i]; - else { - MPI_Irecv(buf2,nbuf,MPI_FFT_SCALAR,comm->procneigh[0][1],0,world,&request); - MPI_Send(buf1,n,MPI_FFT_SCALAR,comm->procneigh[0][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in+1; ix <= nxhi_out; ix++) { - vdx_brick[iz][iy][ix] = buf2[n++]; - vdy_brick[iz][iy][ix] = buf2[n++]; - vdz_brick[iz][iy][ix] = buf2[n++]; - } -} - -/* ---------------------------------------------------------------------- - ghost-swap to fill ghost cells of my brick with per-atom field values -------------------------------------------------------------------------- */ - -void PPPMOld::fillbrick_peratom() -{ - int i,n,ix,iy,iz; - MPI_Request request; - - // pack my real cells for +z processor - // pass data to self or +z processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzhi_in-nzhi_ghost+1; iz <= nzhi_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[2][1] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[2][0],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[2][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz < nzlo_in; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } - - // pack my real cells for -z processor - // pass data to self or -z processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_in; iz < nzlo_in+nzlo_ghost; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[2][0] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[2][1],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[2][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzhi_in+1; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } - - // pack my real cells for +y processor - // pass data to self or +y processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in-nyhi_ghost+1; iy <= nyhi_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[1][1] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[1][0],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[1][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy < nylo_in; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } - - // pack my real cells for -y processor - // pass data to self or -y processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_in; iy < nylo_in+nylo_ghost; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[1][0] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[1][1],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[1][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nyhi_in+1; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix <= nxhi_in; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } - - // pack my real cells for +x processor - // pass data to self or +x processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in-nxhi_ghost+1; ix <= nxhi_in; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[0][1] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[0][0],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[0][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_out; ix < nxlo_in; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } - - // pack my real cells for -x processor - // pass data to self or -x processor - // unpack and sum recv data into my ghost cells - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxlo_in; ix < nxlo_in+nxlo_ghost; ix++) { - if (eflag_atom) buf3[n++] = u_brick[iz][iy][ix]; - if (vflag_atom) { - buf3[n++] = v0_brick[iz][iy][ix]; - buf3[n++] = v1_brick[iz][iy][ix]; - buf3[n++] = v2_brick[iz][iy][ix]; - buf3[n++] = v3_brick[iz][iy][ix]; - buf3[n++] = v4_brick[iz][iy][ix]; - buf3[n++] = v5_brick[iz][iy][ix]; - } - } - - if (comm->procneigh[0][0] == me) - for (i = 0; i < n; i++) buf4[i] = buf3[i]; - else { - MPI_Irecv(buf4,nbuf_peratom,MPI_FFT_SCALAR, - comm->procneigh[0][1],0,world,&request); - MPI_Send(buf3,n,MPI_FFT_SCALAR,comm->procneigh[0][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - n = 0; - for (iz = nzlo_out; iz <= nzhi_out; iz++) - for (iy = nylo_out; iy <= nyhi_out; iy++) - for (ix = nxhi_in+1; ix <= nxhi_out; ix++) { - if (eflag_atom) u_brick[iz][iy][ix] = buf4[n++]; - if (vflag_atom) { - v0_brick[iz][iy][ix] = buf4[n++]; - v1_brick[iz][iy][ix] = buf4[n++]; - v2_brick[iz][iy][ix] = buf4[n++]; - v3_brick[iz][iy][ix] = buf4[n++]; - v4_brick[iz][iy][ix] = buf4[n++]; - v5_brick[iz][iy][ix] = buf4[n++]; - } - } -} - -/* ---------------------------------------------------------------------- - find center grid pt for each of my particles - check that full stencil for the particle will fit in my 3d brick - store central grid pt indices in part2grid array -------------------------------------------------------------------------- */ - -void PPPMOld::particle_map() -{ - int nx,ny,nz; - - double **x = atom->x; - int nlocal = atom->nlocal; - - int flag = 0; - for (int i = 0; i < nlocal; i++) { - - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // current particle coord can be outside global and local box - // add/subtract OFFSET to avoid int(-0.75) = 0 when want it to be -1 - - nx = static_cast ((x[i][0]-boxlo[0])*delxinv+shift) - OFFSET; - ny = static_cast ((x[i][1]-boxlo[1])*delyinv+shift) - OFFSET; - nz = static_cast ((x[i][2]-boxlo[2])*delzinv+shift) - OFFSET; - - part2grid[i][0] = nx; - part2grid[i][1] = ny; - part2grid[i][2] = nz; - - // check that entire stencil around nx,ny,nz will fit in my 3d brick - - if (nx+nlower < nxlo_out || nx+nupper > nxhi_out || - ny+nlower < nylo_out || ny+nupper > nyhi_out || - nz+nlower < nzlo_out || nz+nupper > nzhi_out) - flag = 1; - } - - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM"); -} - -/* ---------------------------------------------------------------------- - create discretized "density" on section of global grid due to my particles - density(x,y,z) = charge "density" at grid points of my 3d brick - (nxlo:nxhi,nylo:nyhi,nzlo:nzhi) is extent of my brick (including ghosts) - in global grid -------------------------------------------------------------------------- */ - -void PPPMOld::make_rho() -{ - int l,m,n,nx,ny,nz,mx,my,mz; - FFT_SCALAR dx,dy,dz,x0,y0,z0; - - // clear 3d density array - - memset(&(density_brick[nzlo_out][nylo_out][nxlo_out]),0, - ngrid*sizeof(FFT_SCALAR)); - - // loop over my charges, add their contribution to nearby grid points - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // (dx,dy,dz) = distance to "lower left" grid pt - // (mx,my,mz) = global coords of moving stencil pt - - double *q = atom->q; - double **x = atom->x; - int nlocal = atom->nlocal; - - for (int i = 0; i < nlocal; i++) { - - nx = part2grid[i][0]; - ny = part2grid[i][1]; - nz = part2grid[i][2]; - dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; - dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; - dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; - - compute_rho1d(dx,dy,dz); - - z0 = delvolinv * q[i]; - for (n = nlower; n <= nupper; n++) { - mz = n+nz; - y0 = z0*rho1d[2][n]; - for (m = nlower; m <= nupper; m++) { - my = m+ny; - x0 = y0*rho1d[1][m]; - for (l = nlower; l <= nupper; l++) { - mx = l+nx; - density_brick[mz][my][mx] += x0*rho1d[0][l]; - } - } - } - } -} - -/* ---------------------------------------------------------------------- - FFT-based Poisson solver -------------------------------------------------------------------------- */ - -void PPPMOld::poisson(int,int) -{ - int i,j,k,n; - double eng; - - // transform charge density (r -> k) - - n = 0; - for (i = 0; i < nfft; i++) { - work1[n++] = density_fft[i]; - work1[n++] = ZEROF; - } - - fft1->compute(work1,work1,1); - - // global energy and virial contribution - - double scaleinv = 1.0/(nx_pppm*ny_pppm*nz_pppm); - double s2 = scaleinv*scaleinv; - - if (eflag_global || vflag_global) { - if (vflag_global) { - n = 0; - for (i = 0; i < nfft; i++) { - eng = s2 * greensfn[i] * (work1[n]*work1[n] + work1[n+1]*work1[n+1]); - for (j = 0; j < 6; j++) virial[j] += eng*vg[i][j]; - if (eflag_global) energy += eng; - n += 2; - } - } else { - n = 0; - for (i = 0; i < nfft; i++) { - energy += - s2 * greensfn[i] * (work1[n]*work1[n] + work1[n+1]*work1[n+1]); - n += 2; - } - } - } - - // scale by 1/total-grid-pts to get rho(k) - // multiply by Green's function to get V(k) - - n = 0; - for (i = 0; i < nfft; i++) { - work1[n++] *= scaleinv * greensfn[i]; - work1[n++] *= scaleinv * greensfn[i]; - } - - // extra FFTs for per-atom energy/virial - - if (evflag_atom) poisson_peratom(); - - // compute gradients of V(r) in each of 3 dims by transformimg -ik*V(k) - // FFT leaves data in 3d brick decomposition - // copy it into inner portion of vdx,vdy,vdz arrays - - // x direction gradient - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - work2[n] = fkx[i]*work1[n+1]; - work2[n+1] = -fkx[i]*work1[n]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - vdx_brick[k][j][i] = work2[n]; - n += 2; - } - - // y direction gradient - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - work2[n] = fky[j]*work1[n+1]; - work2[n+1] = -fky[j]*work1[n]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - vdy_brick[k][j][i] = work2[n]; - n += 2; - } - - // z direction gradient - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - work2[n] = fkz[k]*work1[n+1]; - work2[n+1] = -fkz[k]*work1[n]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - vdz_brick[k][j][i] = work2[n]; - n += 2; - } -} - -/* ---------------------------------------------------------------------- - FFT-based Poisson solver for per-atom energy/virial -------------------------------------------------------------------------- */ - -void PPPMOld::poisson_peratom() -{ - int i,j,k,n; - - // energy - - if (eflag_atom) { - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]; - work2[n+1] = work1[n+1]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - u_brick[k][j][i] = work2[n]; - n += 2; - } - } - - // 6 components of virial in v0 thru v5 - - if (!vflag_atom) return; - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][0]; - work2[n+1] = work1[n+1]*vg[i][0]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v0_brick[k][j][i] = work2[n]; - n += 2; - } - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][1]; - work2[n+1] = work1[n+1]*vg[i][1]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v1_brick[k][j][i] = work2[n]; - n += 2; - } - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][2]; - work2[n+1] = work1[n+1]*vg[i][2]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v2_brick[k][j][i] = work2[n]; - n += 2; - } - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][3]; - work2[n+1] = work1[n+1]*vg[i][3]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v3_brick[k][j][i] = work2[n]; - n += 2; - } - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][4]; - work2[n+1] = work1[n+1]*vg[i][4]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v4_brick[k][j][i] = work2[n]; - n += 2; - } - - n = 0; - for (i = 0; i < nfft; i++) { - work2[n] = work1[n]*vg[i][5]; - work2[n+1] = work1[n+1]*vg[i][5]; - n += 2; - } - - fft2->compute(work2,work2,-1); - - n = 0; - for (k = nzlo_in; k <= nzhi_in; k++) - for (j = nylo_in; j <= nyhi_in; j++) - for (i = nxlo_in; i <= nxhi_in; i++) { - v5_brick[k][j][i] = work2[n]; - n += 2; - } -} - -/* ---------------------------------------------------------------------- - interpolate from grid to get electric field & force on my particles -------------------------------------------------------------------------- */ - -void PPPMOld::fieldforce() -{ - int i,l,m,n,nx,ny,nz,mx,my,mz; - FFT_SCALAR dx,dy,dz,x0,y0,z0; - FFT_SCALAR ekx,eky,ekz; - - // loop over my charges, interpolate electric field from nearby grid points - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // (dx,dy,dz) = distance to "lower left" grid pt - // (mx,my,mz) = global coords of moving stencil pt - // ek = 3 components of E-field on particle - - double *q = atom->q; - double **x = atom->x; - double **f = atom->f; - - int nlocal = atom->nlocal; - - for (i = 0; i < nlocal; i++) { - nx = part2grid[i][0]; - ny = part2grid[i][1]; - nz = part2grid[i][2]; - dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; - dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; - dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; - - compute_rho1d(dx,dy,dz); - - ekx = eky = ekz = ZEROF; - for (n = nlower; n <= nupper; n++) { - mz = n+nz; - z0 = rho1d[2][n]; - for (m = nlower; m <= nupper; m++) { - my = m+ny; - y0 = z0*rho1d[1][m]; - for (l = nlower; l <= nupper; l++) { - mx = l+nx; - x0 = y0*rho1d[0][l]; - ekx -= x0*vdx_brick[mz][my][mx]; - eky -= x0*vdy_brick[mz][my][mx]; - ekz -= x0*vdz_brick[mz][my][mx]; - } - } - } - - // convert E-field to force - - const double qfactor = qqrd2e * scale * q[i]; - f[i][0] += qfactor*ekx; - f[i][1] += qfactor*eky; - if (slabflag != 2) f[i][2] += qfactor*ekz; - } -} - -/* ---------------------------------------------------------------------- - interpolate from grid to get per-atom energy/virial -------------------------------------------------------------------------- */ - -void PPPMOld::fieldforce_peratom() -{ - int i,l,m,n,nx,ny,nz,mx,my,mz; - FFT_SCALAR dx,dy,dz,x0,y0,z0; - FFT_SCALAR u,v0,v1,v2,v3,v4,v5; - - // loop over my charges, interpolate from nearby grid points - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // (dx,dy,dz) = distance to "lower left" grid pt - // (mx,my,mz) = global coords of moving stencil pt - - double *q = atom->q; - double **x = atom->x; - - int nlocal = atom->nlocal; - - for (i = 0; i < nlocal; i++) { - nx = part2grid[i][0]; - ny = part2grid[i][1]; - nz = part2grid[i][2]; - dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; - dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; - dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; - - compute_rho1d(dx,dy,dz); - - u = v0 = v1 = v2 = v3 = v4 = v5 = ZEROF; - for (n = nlower; n <= nupper; n++) { - mz = n+nz; - z0 = rho1d[2][n]; - for (m = nlower; m <= nupper; m++) { - my = m+ny; - y0 = z0*rho1d[1][m]; - for (l = nlower; l <= nupper; l++) { - mx = l+nx; - x0 = y0*rho1d[0][l]; - if (eflag_atom) u += x0*u_brick[mz][my][mx]; - if (vflag_atom) { - v0 += x0*v0_brick[mz][my][mx]; - v1 += x0*v1_brick[mz][my][mx]; - v2 += x0*v2_brick[mz][my][mx]; - v3 += x0*v3_brick[mz][my][mx]; - v4 += x0*v4_brick[mz][my][mx]; - v5 += x0*v5_brick[mz][my][mx]; - } - } - } - } - - if (eflag_atom) eatom[i] += q[i]*u; - if (vflag_atom) { - vatom[i][0] += v0; - vatom[i][1] += v1; - vatom[i][2] += v2; - vatom[i][3] += v3; - vatom[i][4] += v4; - vatom[i][5] += v5; - } - } -} - -/* ---------------------------------------------------------------------- - map nprocs to NX by NY grid as PX by PY procs - return optimal px,py -------------------------------------------------------------------------- */ - -void PPPMOld::procs2grid2d(int nprocs, int nx, int ny, int *px, int *py) -{ - // loop thru all possible factorizations of nprocs - // surf = surface area of largest proc sub-domain - // innermost if test minimizes surface area and surface/volume ratio - - int bestsurf = 2 * (nx + ny); - int bestboxx = 0; - int bestboxy = 0; - - int boxx,boxy,surf,ipx,ipy; - - ipx = 1; - while (ipx <= nprocs) { - if (nprocs % ipx == 0) { - ipy = nprocs/ipx; - boxx = nx/ipx; - if (nx % ipx) boxx++; - boxy = ny/ipy; - if (ny % ipy) boxy++; - surf = boxx + boxy; - if (surf < bestsurf || - (surf == bestsurf && boxx*boxy > bestboxx*bestboxy)) { - bestsurf = surf; - bestboxx = boxx; - bestboxy = boxy; - *px = ipx; - *py = ipy; - } - } - ipx++; - } -} - -/* ---------------------------------------------------------------------- - charge assignment into rho1d - dx,dy,dz = distance of particle from "lower left" grid point -------------------------------------------------------------------------- */ - -void PPPMOld::compute_rho1d(const FFT_SCALAR &dx, const FFT_SCALAR &dy, - const FFT_SCALAR &dz) -{ - int k,l; - FFT_SCALAR r1,r2,r3; - - for (k = (1-order)/2; k <= order/2; k++) { - r1 = r2 = r3 = ZEROF; - - for (l = order-1; l >= 0; l--) { - r1 = rho_coeff[l][k] + r1*dx; - r2 = rho_coeff[l][k] + r2*dy; - r3 = rho_coeff[l][k] + r3*dz; - } - rho1d[0][k] = r1; - rho1d[1][k] = r2; - rho1d[2][k] = r3; - } -} - -/* ---------------------------------------------------------------------- - generate coeffients for the weight function of order n - - (n-1) - Wn(x) = Sum wn(k,x) , Sum is over every other integer - k=-(n-1) - For k=-(n-1),-(n-1)+2, ....., (n-1)-2,n-1 - k is odd integers if n is even and even integers if n is odd - --- - | n-1 - | Sum a(l,j)*(x-k/2)**l if abs(x-k/2) < 1/2 - wn(k,x) = < l=0 - | - | 0 otherwise - --- - a coeffients are packed into the array rho_coeff to eliminate zeros - rho_coeff(l,((k+mod(n+1,2))/2) = a(l,k) -------------------------------------------------------------------------- */ - -void PPPMOld::compute_rho_coeff() -{ - int j,k,l,m; - FFT_SCALAR s; - - FFT_SCALAR **a; - memory->create2d_offset(a,order,-order,order,"pppm:a"); - - for (k = -order; k <= order; k++) - for (l = 0; l < order; l++) - a[l][k] = 0.0; - - a[0][0] = 1.0; - for (j = 1; j < order; j++) { - for (k = -j; k <= j; k += 2) { - s = 0.0; - for (l = 0; l < j; l++) { - a[l+1][k] = (a[l][k+1]-a[l][k-1]) / (l+1); -#ifdef FFT_SINGLE - s += powf(0.5,(float) l+1) * - (a[l][k-1] + powf(-1.0,(float) l) * a[l][k+1]) / (l+1); -#else - s += pow(0.5,(double) l+1) * - (a[l][k-1] + pow(-1.0,(double) l) * a[l][k+1]) / (l+1); -#endif - } - a[0][k] = s; - } - } - - m = (1-order)/2; - for (k = -(order-1); k < order; k += 2) { - for (l = 0; l < order; l++) - rho_coeff[l][m] = a[l][k]; - m++; - } - - memory->destroy2d_offset(a,-order); -} - -/* ---------------------------------------------------------------------- - Slab-geometry correction term to dampen inter-slab interactions between - periodically repeating slabs. Yields good approximation to 2D Ewald if - adequate empty space is left between repeating slabs (J. Chem. Phys. - 111, 3155). Slabs defined here to be parallel to the xy plane. Also - extended to non-neutral systems (J. Chem. Phys. 131, 094107). -------------------------------------------------------------------------- */ - -void PPPMOld::slabcorr() -{ - // compute local contribution to global dipole moment - - double *q = atom->q; - double **x = atom->x; - double zprd = domain->zprd; - int nlocal = atom->nlocal; - - double dipole = 0.0; - for (int i = 0; i < nlocal; i++) dipole += q[i]*x[i][2]; - - // sum local contributions to get global dipole moment - - double dipole_all; - MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); - - // need to make non-neutral systems and/or - // per-atom energy translationally invariant - - double dipole_r2 = 0.0; - if (eflag_atom || fabs(qsum) > SMALL) { - for (int i = 0; i < nlocal; i++) - dipole_r2 += q[i]*x[i][2]*x[i][2]; - - // sum local contributions - - double tmp; - MPI_Allreduce(&dipole_r2,&tmp,1,MPI_DOUBLE,MPI_SUM,world); - dipole_r2 = tmp; - } - - // compute corrections - - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - - qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; - const double qscale = qqrd2e * scale; - - if (eflag_global) energy += qscale * e_slabcorr; - - // per-atom energy - - if (eflag_atom) { - double efact = qscale * MY_2PI/volume; - for (int i = 0; i < nlocal; i++) - eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + - qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); - } - - // add on force corrections - - double ffact = qscale * (-4.0*MY_PI/volume); - double **f = atom->f; - - for (int i = 0; i < nlocal; i++) f[i][2] += ffact * q[i]*(dipole_all - qsum*x[i][2]); -} - - -/* ---------------------------------------------------------------------- - perform and time the 1d FFTs required for N timesteps -------------------------------------------------------------------------- */ - -int PPPMOld::timing_1d(int n, double &time1d) -{ - double time1,time2; - - for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; - - MPI_Barrier(world); - time1 = MPI_Wtime(); - - for (int i = 0; i < n; i++) { - fft1->timing1d(work1,nfft_both,1); - fft2->timing1d(work1,nfft_both,-1); - fft2->timing1d(work1,nfft_both,-1); - fft2->timing1d(work1,nfft_both,-1); - } - - MPI_Barrier(world); - time2 = MPI_Wtime(); - time1d = time2 - time1; - - return 4; -} - -/* ---------------------------------------------------------------------- - perform and time the 3d FFTs required for N timesteps -------------------------------------------------------------------------- */ - -int PPPMOld::timing_3d(int n, double &time3d) -{ - double time1,time2; - - for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; - - MPI_Barrier(world); - time1 = MPI_Wtime(); - - for (int i = 0; i < n; i++) { - fft1->compute(work1,work1,1); - fft2->compute(work1,work1,-1); - fft2->compute(work1,work1,-1); - fft2->compute(work1,work1,-1); - } - - MPI_Barrier(world); - time2 = MPI_Wtime(); - time3d = time2 - time1; - - return 4; -} - -/* ---------------------------------------------------------------------- - memory usage of local arrays -------------------------------------------------------------------------- */ - -double PPPMOld::memory_usage() -{ - double bytes = nmax*3 * sizeof(double); - int nbrick = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * - (nzhi_out-nzlo_out+1); - bytes += 4 * nbrick * sizeof(FFT_SCALAR); - bytes += 6 * nfft_both * sizeof(double); - bytes += nfft_both * sizeof(double); - bytes += nfft_both*5 * sizeof(FFT_SCALAR); - bytes += 2 * nbuf * sizeof(FFT_SCALAR); - - if (peratom_allocate_flag) { - bytes += 7 * nbrick * sizeof(FFT_SCALAR); - bytes += 2 * nbuf_peratom * sizeof(FFT_SCALAR); - } - - if (group_allocate_flag) { - bytes += 2 * nbrick * sizeof(FFT_SCALAR); - bytes += 2 * nfft_both * sizeof(FFT_SCALAR);; - } - - return bytes; -} - -/* ---------------------------------------------------------------------- - group-group interactions - ------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - compute the PPPM total long-range force and energy for groups A and B - ------------------------------------------------------------------------- */ - -void PPPMOld::compute_group_group(int groupbit_A, int groupbit_B, int BA_flag) -{ - if (slabflag) - error->all(FLERR,"Cannot (yet) use K-space slab " - "correction with compute group/group"); - - int i; - - if (!group_allocate_flag) { - allocate_groups(); - group_allocate_flag = 1; - } - - e2group = 0; //energy - f2group[0] = 0; //force in x-direction - f2group[1] = 0; //force in y-direction - f2group[2] = 0; //force in z-direction - - // map my particle charge onto my local 3d density grid - - make_rho_groups(groupbit_A,groupbit_B,BA_flag); - - // all procs communicate density values from their ghost cells - // to fully sum contribution in their 3d bricks - // remap from 3d decomposition to FFT decomposition - - // temporarily store and switch pointers so we can - // use brick2fft() for groups A and B (without - // writing an additional function) - - FFT_SCALAR ***density_brick_real = density_brick; - FFT_SCALAR *density_fft_real = density_fft; - - // group A - - density_brick = density_A_brick; - density_fft = density_A_fft; - - brick2fft(); - - // group B - - density_brick = density_B_brick; - density_fft = density_B_fft; - - brick2fft(); - - // switch back pointers - - density_brick = density_brick_real; - density_fft = density_fft_real; - - // compute potential gradient on my FFT grid and - // portion of group-group energy/force on this proc's FFT grid - - poisson_groups(BA_flag); - - const double qscale = qqrd2e * scale; - - // total group A <--> group B energy - // self and boundary correction terms are in compute_group_group.cpp - - double e2group_all; - MPI_Allreduce(&e2group,&e2group_all,1,MPI_DOUBLE,MPI_SUM,world); - e2group = e2group_all; - - e2group *= qscale*0.5*volume; - - // total group A <--> group B force - - double f2group_all[3]; - MPI_Allreduce(f2group,f2group_all,3,MPI_DOUBLE,MPI_SUM,world); - - for (i = 0; i < 3; i++) f2group[i] = qscale*volume*f2group_all[i]; -} - -/* ---------------------------------------------------------------------- - allocate group-group memory that depends on # of K-vectors and order - ------------------------------------------------------------------------- */ - -void PPPMOld::allocate_groups() -{ - memory->create3d_offset(density_A_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:density_A_brick"); - memory->create3d_offset(density_B_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm:density_B_brick"); - memory->create(density_A_fft,nfft_both,"pppm:density_A_fft"); - memory->create(density_B_fft,nfft_both,"pppm:density_B_fft"); -} - -/* ---------------------------------------------------------------------- - deallocate group-group memory that depends on # of K-vectors and order - ------------------------------------------------------------------------- */ - -void PPPMOld::deallocate_groups() -{ - memory->destroy3d_offset(density_A_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(density_B_brick,nzlo_out,nylo_out,nxlo_out); - memory->destroy(density_A_fft); - memory->destroy(density_B_fft); -} - -/* ---------------------------------------------------------------------- - create discretized "density" on section of global grid due to my particles - density(x,y,z) = charge "density" at grid points of my 3d brick - (nxlo:nxhi,nylo:nyhi,nzlo:nzhi) is extent of my brick (including ghosts) - in global grid for group-group interactions - ------------------------------------------------------------------------- */ - -void PPPMOld::make_rho_groups(int groupbit_A, int groupbit_B, int BA_flag) -{ - int l,m,n,nx,ny,nz,mx,my,mz; - FFT_SCALAR dx,dy,dz,x0,y0,z0; - - // clear 3d density arrays - - memset(&(density_A_brick[nzlo_out][nylo_out][nxlo_out]),0, - ngrid*sizeof(FFT_SCALAR)); - - memset(&(density_B_brick[nzlo_out][nylo_out][nxlo_out]),0, - ngrid*sizeof(FFT_SCALAR)); - - // loop over my charges, add their contribution to nearby grid points - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // (dx,dy,dz) = distance to "lower left" grid pt - // (mx,my,mz) = global coords of moving stencil pt - - double *q = atom->q; - double **x = atom->x; - int nlocal = atom->nlocal; - int *mask = atom->mask; - - for (int i = 0; i < nlocal; i++) { - - if ((mask[i] & groupbit_A) && (mask[i] & groupbit_B)) - if (BA_flag) continue; - - if ((mask[i] & groupbit_A) || (mask[i] & groupbit_B)) { - - nx = part2grid[i][0]; - ny = part2grid[i][1]; - nz = part2grid[i][2]; - dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; - dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; - dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; - - compute_rho1d(dx,dy,dz); - - z0 = delvolinv * q[i]; - for (n = nlower; n <= nupper; n++) { - mz = n+nz; - y0 = z0*rho1d[2][n]; - for (m = nlower; m <= nupper; m++) { - my = m+ny; - x0 = y0*rho1d[1][m]; - for (l = nlower; l <= nupper; l++) { - mx = l+nx; - - // group A - - if (mask[i] & groupbit_A) - density_A_brick[mz][my][mx] += x0*rho1d[0][l]; - - // group B - - if (mask[i] & groupbit_B) - density_B_brick[mz][my][mx] += x0*rho1d[0][l]; - } - } - } - } - } -} - -/* ---------------------------------------------------------------------- - FFT-based Poisson solver for group-group interactions - ------------------------------------------------------------------------- */ - -void PPPMOld::poisson_groups(int BA_flag) -{ - int i,j,k,n; - - // reuse memory (already declared) - - FFT_SCALAR *work_A = work1; - FFT_SCALAR *work_B = work2; - - // transform charge density (r -> k) - - // group A - - n = 0; - for (i = 0; i < nfft; i++) { - work_A[n++] = density_A_fft[i]; - work_A[n++] = ZEROF; - } - - fft1->compute(work_A,work_A,1); - - // group B - - n = 0; - for (i = 0; i < nfft; i++) { - work_B[n++] = density_B_fft[i]; - work_B[n++] = ZEROF; - } - - fft1->compute(work_B,work_B,1); - - // group-group energy and force contribution, - // keep everything in reciprocal space so - // no inverse FFTs needed - - double scaleinv = 1.0/(nx_pppm*ny_pppm*nz_pppm); - double s2 = scaleinv*scaleinv; - - // energy - - n = 0; - for (i = 0; i < nfft; i++) { - e2group += s2 * greensfn[i] * - (work_A[n]*work_B[n] + work_A[n+1]*work_B[n+1]); - n += 2; - } - - if (BA_flag) return; - - - // multiply by Green's function and s2 - // (only for work_A so it is not squared below) - - n = 0; - for (i = 0; i < nfft; i++) { - work_A[n++] *= s2 * greensfn[i]; - work_A[n++] *= s2 * greensfn[i]; - } - - double partial_group; - - // force, x direction - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - partial_group = work_A[n+1]*work_B[n] - work_A[n]*work_B[n+1]; - f2group[0] += fkx[i] * partial_group; - n += 2; - } - - // force, y direction - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - partial_group = work_A[n+1]*work_B[n] - work_A[n]*work_B[n+1]; - f2group[1] += fky[j] * partial_group; - n += 2; - } - - // force, z direction - - n = 0; - for (k = nzlo_fft; k <= nzhi_fft; k++) - for (j = nylo_fft; j <= nyhi_fft; j++) - for (i = nxlo_fft; i <= nxhi_fft; i++) { - partial_group = work_A[n+1]*work_B[n] - work_A[n]*work_B[n+1]; - f2group[2] += fkz[k] * partial_group; - n += 2; - } -} diff --git a/src/USER-CUDA/pppm_old.h b/src/USER-CUDA/pppm_old.h deleted file mode 100644 index 57a92e1202..0000000000 --- a/src/USER-CUDA/pppm_old.h +++ /dev/null @@ -1,271 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef KSPACE_CLASS - -KSpaceStyle(pppm/old,PPPMOld) - -#else - -#ifndef LMP_PPPM_OLD_H -#define LMP_PPPM_OLD_H - -#include "lmptype.h" -#include - -#ifdef FFT_SINGLE -typedef float FFT_SCALAR; -#define MPI_FFT_SCALAR MPI_CFLOAT -#else -typedef double FFT_SCALAR; -#define MPI_FFT_SCALAR MPI_DOUBLE -#endif - -#include "kspace.h" - -namespace LAMMPS_NS { - -class PPPMOld : public KSpace { - public: - PPPMOld(class LAMMPS *, int, char **); - virtual ~PPPMOld(); - virtual void init(); - virtual void setup(); - virtual void compute(int, int); - virtual int timing_1d(int, double &); - virtual int timing_3d(int, double &); - virtual double memory_usage(); - - virtual void compute_group_group(int, int, int); - - protected: - int me,nprocs; - int nfactors; - int *factors; - double cutoff; - double volume; - double delxinv,delyinv,delzinv,delvolinv; - double shift,shiftone; - int peratom_allocate_flag; - - int nxlo_in,nylo_in,nzlo_in,nxhi_in,nyhi_in,nzhi_in; - int nxlo_out,nylo_out,nzlo_out,nxhi_out,nyhi_out,nzhi_out; - int nxlo_ghost,nxhi_ghost,nylo_ghost,nyhi_ghost,nzlo_ghost,nzhi_ghost; - int nxlo_fft,nylo_fft,nzlo_fft,nxhi_fft,nyhi_fft,nzhi_fft; - int nlower,nupper; - int ngrid,nfft,nfft_both; - int nbuf,nbuf_peratom; - - FFT_SCALAR ***density_brick; - FFT_SCALAR ***vdx_brick,***vdy_brick,***vdz_brick; - FFT_SCALAR ***u_brick; - FFT_SCALAR ***v0_brick,***v1_brick,***v2_brick; - FFT_SCALAR ***v3_brick,***v4_brick,***v5_brick; - double *greensfn; - double **vg; - double *fkx,*fky,*fkz; - FFT_SCALAR *density_fft; - FFT_SCALAR *work1,*work2; - FFT_SCALAR *buf1,*buf2,*buf3,*buf4; - - double *gf_b; - FFT_SCALAR **rho1d,**rho_coeff; - - // group-group interactions - - int group_allocate_flag; - FFT_SCALAR ***density_A_brick,***density_B_brick; - FFT_SCALAR *density_A_fft,*density_B_fft; - - - class FFT3d *fft1,*fft2; - class Remap *remap; - - int **part2grid; // storage for particle -> grid mapping - int nmax; - - int triclinic; // domain settings, orthog or triclinic - double *boxlo; - // TIP4P settings - int typeH,typeO; // atom types of TIP4P water H and O atoms - double qdist; // distance from O site to negative charge - double alpha; // geometric factor - - void set_grid(); - virtual void allocate(); - virtual void allocate_peratom(); - virtual void deallocate(); - virtual void deallocate_peratom(); - int factorable(int); - double rms(double, double, bigint, double, double **); - double diffpr(double, double, double, double, double **); - void compute_gf_denom(); - - virtual void particle_map(); - virtual void make_rho(); - virtual void brick2fft(); - virtual void fillbrick(); - virtual void fillbrick_peratom(); - virtual void poisson(int,int); - virtual void poisson_peratom(); - virtual void fieldforce(); - virtual void fieldforce_peratom(); - void procs2grid2d(int,int,int,int *, int*); - void compute_rho1d(const FFT_SCALAR &, const FFT_SCALAR &, - const FFT_SCALAR &); - void compute_rho_coeff(); - void slabcorr(); - - // group-group interactions - - virtual void allocate_groups(); - virtual void deallocate_groups(); - virtual void make_rho_groups(int, int, int); - virtual void poisson_groups(int); - -/* ---------------------------------------------------------------------- - denominator for Hockney-Eastwood Green's function - of x,y,z = sin(kx*deltax/2), etc - - inf n-1 - S(n,k) = Sum W(k+pi*j)**2 = Sum b(l)*(z*z)**l - j=-inf l=0 - - = -(z*z)**n /(2n-1)! * (d/dx)**(2n-1) cot(x) at z = sin(x) - gf_b = denominator expansion coeffs -------------------------------------------------------------------------- */ - - inline double gf_denom(const double &x, const double &y, - const double &z) const { - double sx,sy,sz; - sz = sy = sx = 0.0; - for (int l = order-1; l >= 0; l--) { - sx = gf_b[l] + sx*x; - sy = gf_b[l] + sy*y; - sz = gf_b[l] + sz*z; - } - double s = sx*sy*sz; - return s*s; - }; -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Cannot use PPPM with 2d simulation - -The kspace style pppm cannot be used in 2d simulations. You can use -2d PPPM in a 3d simulation; see the kspace_modify command. - -E: Kspace style requires atom attribute q - -The atom style defined does not have these attributes. - -E: Cannot use nonperiodic boundaries with PPPM - -For kspace style pppm, all 3 dimensions must have periodic boundaries -unless you use the kspace_modify command to define a 2d slab with a -non-periodic z dimension. - -E: Incorrect boundaries with slab PPPM - -Must have periodic x,y dimensions and non-periodic z dimension to use -2d slab option with PPPM. - -E: PPPM order cannot be < 2 or > than %d - -This is a limitation of the PPPM implementation in LAMMPS. - -E: KSpace style is incompatible with Pair style - -Setting a kspace style requires that a pair style with a long-range -Coulombic or dispersion component be used. - -E: Bond and angle potentials must be defined for TIP4P - -Cannot use TIP4P pair potential unless bond and angle potentials -are defined. - -E: Bad TIP4P angle type for PPPM/TIP4P - -Specified angle type is not valid. - -E: Bad TIP4P bond type for PPPM/TIP4P - -Specified bond type is not valid. - -E: Cannot use kspace solver on system with no charge - -No atoms in system have a non-zero charge. - -W: System is not charge neutral, net charge = %g - -The total charge on all atoms on the system is not 0.0, which -is not valid for the long-range Coulombic solvers. - -W: Reducing PPPM order b/c stencil extends beyond neighbor processor - -This may lead to a larger grid than desired. See the kspace_modify overlap -command to prevent changing of the PPPM order. - -E: PPPM grid is too large - -The global PPPM grid is larger than OFFSET in one or more dimensions. -OFFSET is currently set to 4096. You likely need to decrease the -requested accuracy. - -E: PPPM order has been reduced to 0 - -The auto-adjust of the order failed. You will need to -set the grid size and order directly via kspace_modify. - -E: KSpace accuracy must be > 0 - -The kspace accuracy designated in the input must be greater than zero. - -E: Cannot compute PPPM G - -The Ewald factor could not be computed for the current choice of -grid size, cutoff, accuracy. - -E: Out of range atoms - cannot compute PPPM - -One or more atoms are attempting to map their charge to a PPPM grid -point that is not owned by a processor. This is likely for one of two -reasons, both of them bad. First, it may mean that an atom near the -boundary of a processor's sub-domain has moved more than 1/2 the -"neighbor skin distance"_neighbor.html without neighbor lists being -rebuilt and atoms being migrated to new processors. This also means -you may be missing pairwise interactions that need to be computed. -The solution is to change the re-neighboring criteria via the -"neigh_modify"_neigh_modify command. The safest settings are "delay 0 -every 1 check yes". Second, it may mean that an atom has moved far -outside a processor's sub-domain or even the entire simulation box. -This indicates bad physics, e.g. due to highly overlapping atoms, too -large a timestep, etc. - -E: Cannot (yet) use K-space slab correction with compute group/group - -This option is not yet supported. - -*/ diff --git a/src/USER-CUDA/user_cuda.h b/src/USER-CUDA/user_cuda.h deleted file mode 100644 index dbcc41ab3b..0000000000 --- a/src/USER-CUDA/user_cuda.h +++ /dev/null @@ -1,159 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifndef CUDA_H -#define CUDA_H - -#include "pointers.h" -#include "cuda_shared.h" -#include "cuda_data.h" -#include "cuda_precision.h" -#include - -#ifdef _DEBUG -#define MYDBG(a) a -#else -#define MYDBG(a) -#endif - -namespace LAMMPS_NS -{ -class Cuda : protected Pointers -{ - public: - Cuda(class LAMMPS*); - ~Cuda(); - //static void setDevice(class LAMMPS*); - void allocate(); - - void accelerator(int, char**); - void activate(); - - void setSharedDataZero(); - void setSystemParams(); - - void setDomainParams(); - - void checkResize(); - void evsetup_eatom_vatom(int eflag_atom, int vflag_atom); - void uploadAll(); - void downloadAll(); - void upload(int datamask); - void download(int datamask); - void downloadX(); - - class CudaNeighList* registerNeighborList(class NeighList* neigh_list); - void uploadAllNeighborLists(); - void downloadAllNeighborLists(); - void set_neighinit(int dist_check, double triggerneighsq) { - shared_data.atom.dist_check = dist_check; - shared_data.atom.triggerneighsq = triggerneighsq; - } - bool decide_by_integrator() { - return neighbor_decide_by_integrator && cu_xhold && finished_setup; - } - void update_xhold(int &maxhold, double* xhold); - - void setTimingsZero(); - void print_timings(); - - void cu_x_download() { - cu_x->download(); - } - bool device_set; - bool dotiming; - bool dotestatom; - int testatom; - - double uploadtime, downloadtime; - bool finished_setup, begin_setup; - bool oncpu; - bool finished_run; - - int self_comm; - - int cuda_exists; - - double extent[6]; - int* debugdata; - // data shared between host code and device code - // (number of atoms, device pointers for up- & download) - cuda_shared_data shared_data; - - cCudaData* cu_q; - cCudaData* cu_f; - cCudaData* cu_mass; - cCudaData* cu_rmass; - cCudaData* cu_v; - cCudaData* cu_x; - cCudaData* cu_xhold; - cCudaData* cu_mask; - cCudaData* cu_tag; - cCudaData* cu_type; - cCudaData* cu_image; - cCudaData* cu_eatom; - cCudaData* cu_vatom; - cCudaData* cu_virial; - cCudaData* cu_eng_vdwl; - cCudaData* cu_eng_coul; - cCudaData* cu_extent; - int* binned_id; - cCudaData* cu_binned_id; - int* binned_idnew; - cCudaData* cu_binned_idnew; - cCudaData* cu_debugdata; - cCudaData* cu_radius; - cCudaData* cu_density; - cCudaData* cu_omega; - cCudaData* cu_torque; - cCudaData* cu_special; - cCudaData* cu_nspecial; - cCudaData* cu_molecule; - - - cCudaData* cu_x_type; - X_CFLOAT* x_type; - - cCudaData* cu_v_radius; - V_CFLOAT* v_radius; - - cCudaData* cu_omega_rmass; - V_CFLOAT* omega_rmass; - - cCudaData* cu_map_array; - int neighbor_decide_by_integrator; - - bool pinned; - - void* copy_buffer; - int copy_buffersize; - - private: - int pppn; // number of GPUs/node - int *devicelist; // IDs of GPUs - - std::map neigh_lists; -}; -} - -#endif // CUDA_H diff --git a/src/USER-CUDA/verlet_cuda.cpp b/src/USER-CUDA/verlet_cuda.cpp deleted file mode 100644 index 7c018afcb3..0000000000 --- a/src/USER-CUDA/verlet_cuda.cpp +++ /dev/null @@ -1,1237 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - - -#include -#include -#include -#include "verlet_cuda.h" -#include "neighbor.h" -#include "domain.h" -#include "comm.h" -#include "atom.h" -#include "atom_vec.h" -#include "force.h" -#include "pair.h" -#include "bond.h" -#include "angle.h" -#include "dihedral.h" -#include "improper.h" -#include "kspace.h" -#include "output.h" -#include "update.h" -#include "modify_cuda.h" -#include "compute.h" -#include "fix.h" -#include "timer.h" -#include "memory.h" -#include "error.h" -#include "cuda_wrapper_cu.h" -#include "thermo.h" -#include "cuda_pair_cu.h" -#include "user_cuda.h" -#include -#include -#ifdef _OPENMP -#include -#endif - -using namespace LAMMPS_NS; - -#define MAKETIMEING - - -VerletCuda::VerletCuda(LAMMPS* lmp, int narg, char** arg) : Verlet(lmp, narg, arg) -{ - if (comm->me == 0) - error->warning(FLERR,"The USER-CUDA pacakge will be deprecated " - "soon - users should switch to the GPU or KOKKOS packages"); - - cuda = lmp->cuda; - - if(cuda == NULL) - error->all(FLERR, "You cannot use a /cuda class, without activating 'cuda' acceleration. Provide '-c on' as command-line argument to LAMMPS.."); - - modify_cuda = (ModifyCuda*) modify; - int ifix = modify->find_fix("package_omp"); - - if(ifix >= 0) external_force_clear = 1; -} - -/* ---------------------------------------------------------------------- - setup before run -------------------------------------------------------------------------- */ - -void VerletCuda::setup() -{ - //debug related variables - cuda->debugdata[0] = 0; - cuda->cu_debugdata->upload(); - dotestatom = cuda->dotestatom; - int testatom = cuda->testatom; //48267; - - if(atom->nlocal == 0) - error->warning(FLERR, "# CUDA: There are currently no atoms on one of the MPI processes. This is known to cause errors with the USER-CUDA package. Please use the 'processors' keyword to enforce more balanced processor layout."); - - MYDBG(printf("# CUDA VerletCuda::setup start\n");) - - cuda->oncpu = true; - cuda->begin_setup = true; - cuda->finished_setup = false; - cuda->finished_run = false; - - time_pair = 0; - time_kspace = 0; - time_comm = 0; - time_modify = 0; - time_fulliterate = 0; - - atom->setup(); - - cuda_shared_atom* cu_atom = & cuda->shared_data.atom; - cu_atom->update_nlocal = 1; - cu_atom->update_nmax = 1; - - if(atom->molecular || (force->kspace && (not cuda->shared_data.pppm.cudable_force))) cuda->shared_data.pair.collect_forces_later = true; - - cuda->setDomainParams(); - - - if(cuda->shared_data.me == 0) - printf("# CUDA: Using precision: Global: %u X: %u V: %u F: %u PPPM: %u \n", CUDA_PRECISION == 1 ? 4 : 8, (int) sizeof(X_CFLOAT), (int) sizeof(V_CFLOAT), (int) sizeof(F_CFLOAT), (int) sizeof(PPPM_CFLOAT)); - - cuda->allocate(); - - if (comm->me == 0 && screen) { - fprintf(screen,"Setting up Verlet run ...\n"); - fprintf(screen," Unit style : %s\n", update->unit_style); - fprintf(screen," Current step : " BIGINT_FORMAT "\n", update->ntimestep); - fprintf(screen," Time step : %g\n", update->dt); - timer->print_timeout(screen); - } - - // setup domain, communication and neighboring - // acquire ghosts - // build neighbor lists - modify->setup_pre_exchange(); - - if(triclinic) domain->x2lamda(atom->nlocal); - - domain->pbc(); - domain->reset_box(); - comm->setup(); - - if(neighbor->style) neighbor->setup_bins(); - - comm->exchange(); - - if(atom->sortfreq > 0) atom->sort(); - - comm->borders(); - - if(triclinic) domain->lamda2x(atom->nlocal + atom->nghost); - - cuda->setSystemParams(); - cuda->checkResize(); - - if(cuda->shared_data.me == 0) - printf("# CUDA: VerletCuda::setup: Upload data...\n"); - - cuda->uploadAll(); - neighbor->build(); - neighbor->ncalls = 0; - - if(atom->mass) - cuda->cu_mass->upload(); - - if(cuda->cu_map_array) - cuda->cu_map_array->upload(); - - // compute all forces - - ev_set(update->ntimestep); - - if(elist_atom) cuda->shared_data.atom.need_eatom = 1; - - if(vlist_atom) cuda->shared_data.atom.need_vatom = 1; - - if(elist_atom || vlist_atom) cuda->checkResize(); - - int test_BpA_vs_TpA = true; - my_times starttime; - my_times endtime; -#ifdef NO_PREC_TIMING - double startsec, endsec; -#endif - - //if(atom->molecular||(force->kspace&&(not cuda->shared_data.pppm.cudable_force))) cuda->shared_data.pair.collect_forces_later = false; - if(test_BpA_vs_TpA && cuda->shared_data.pair.cudable_force && force->pair && (cuda->shared_data.pair.override_block_per_atom < 0)) { - int StyleLoops = 10; - - if(cuda->shared_data.me == 0) - printf("Test TpA\n"); - - cuda->shared_data.pair.use_block_per_atom = 0; - neighbor->build(); - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - force->pair->compute(eflag, vflag); - CudaWrapper_Sync(); -#ifdef NO_PREC_TIMING - startsec = 1.0 * clock() / CLOCKS_PER_SEC; -#endif - my_gettime(CLOCK_REALTIME, &starttime); - - for(int i = 0; i < StyleLoops; i++) { - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - force->pair->compute(eflag, vflag); - CudaWrapper_Sync(); - } - - my_gettime(CLOCK_REALTIME, &endtime); - - double TpAtime = endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; -#ifdef NO_PREC_TIMING - endsec = 1.0 * clock() / CLOCKS_PER_SEC; - TpAtime = endsec - startsec; -#endif - - if(cuda->shared_data.me == 0) - printf("Test BpA\n"); - - cuda->shared_data.pair.use_block_per_atom = 1; - neighbor->build(); - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - force->pair->compute(eflag, vflag); - CudaWrapper_Sync(); - - my_gettime(CLOCK_REALTIME, &starttime); -#ifdef NO_PREC_TIMING - startsec = 1.0 * clock() / CLOCKS_PER_SEC; -#endif - - for(int i = 0; i < StyleLoops; i++) { - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - force->pair->compute(eflag, vflag); - CudaWrapper_Sync(); - } - - my_gettime(CLOCK_REALTIME, &endtime); - double BpAtime = endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; -#ifdef NO_PREC_TIMING - endsec = 1.0 * clock() / CLOCKS_PER_SEC; - BpAtime = endsec - startsec; -#endif - - if(cuda->shared_data.me == 0) - printf("\n# CUDA: Timing of parallelisation layout with %i loops:\n", StyleLoops); - - if(cuda->shared_data.me == 0) - printf("# CUDA: BpA TpA\n %lf %lf\n", BpAtime, TpAtime); - - if(BpAtime > TpAtime) cuda->shared_data.pair.use_block_per_atom = 0; - } else - cuda->shared_data.pair.use_block_per_atom = cuda->shared_data.pair.override_block_per_atom; - - //cuda->shared_data.pair.use_block_per_atom = 0; - if(atom->molecular || (force->kspace && (not cuda->shared_data.pppm.cudable_force))) cuda->shared_data.pair.collect_forces_later = true; - - neighbor->build(); - neighbor->ncalls = 0; - - force_clear(); - - modify->setup_pre_force(vflag); - - cuda->cu_f->download(); - - if(cuda->cu_torque) - cuda->cu_torque->download(); - - //printf("# Verlet::setup: g f[0] = (%f, %f, %f)\n", atom->f[0][0], atom->f[0][1], atom->f[0][2]); - - MYDBG(printf("# CUDA: VerletCuda::setup: initial force compute\n");) - - //test_atom(testatom,"pre pair force"); - - if(cuda->shared_data.pair.cudable_force) { - cuda->uploadAll(); - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - } - - if(force->pair) force->pair->compute(eflag, vflag); - - if(cuda->shared_data.pair.cudable_force) { - if(cuda->shared_data.pair.collect_forces_later) { - if(eflag) cuda->cu_eng_vdwl->upload(); - - if(eflag) cuda->cu_eng_coul->upload(); - - if(vflag) cuda->cu_virial->upload(); - - Cuda_Pair_CollectForces(&cuda->shared_data, eflag, vflag); - - if(eflag) cuda->cu_eng_vdwl->download(); - - if(eflag) cuda->cu_eng_coul->download(); - - if(vflag) cuda->cu_virial->download(); - } - - cuda->downloadAll(); - } - - test_atom(testatom, "post pair force"); - - MYDBG(printf("# CUDA: VerletCuda::setup: initial force compute done\n");) - //printf("# Verlet::setup: h f[0] = (%f, %f, %f)\n", atom->f[0][0], atom->f[0][1], atom->f[0][2]); - - if(atom->molecular) { - if(force->bond) force->bond->compute(eflag, vflag); - - if(force->angle) force->angle->compute(eflag, vflag); - - if(force->dihedral) force->dihedral->compute(eflag, vflag); - - if(force->improper) force->improper->compute(eflag, vflag); - } - - - if(cuda->shared_data.pppm.cudable_force) { - cuda->cu_tag ->upload(); - cuda->cu_type->upload(); - cuda->cu_x ->upload(); - cuda->cu_v ->upload(); - cuda->cu_f ->upload(); - - if(cu_atom->q_flag) cuda->cu_q->upload(); - } - - if(force->kspace) { - force->kspace->setup(); - force->kspace->compute(eflag, vflag); - } - - if(cuda->shared_data.pppm.cudable_force) { - cuda->cu_f ->download(); - } - - test_atom(testatom, "post kspace"); - - cuda->uploadAll(); - - if(force->newton) comm->reverse_comm(); - - cuda->downloadAll(); - - test_atom(testatom, "post reverse comm"); - - if(cuda->shared_data.me == 0) - printf("# CUDA: Total Device Memory usage post setup: %lf MB\n", 1.0 * CudaWrapper_CheckMemUsage() / 1024 / 1024); - - MYDBG(printf("# CUDA: VerletCuda::setup: call modify setup\n");) - modify->setup(vflag); - - MYDBG(printf("# CUDA: VerletCuda::setup: call modify setup done\n");) - output->setup(1); - - test_atom(testatom, "post setup"); - - MYDBG(printf("# CUDA: VerletCuda::setup: done\n");) - cuda->finished_setup = true; - cuda->oncpu = false; -} - - -//this routine is in a messy state -void VerletCuda::setup_minimal(int flag) -{ - - printf("SetupMinimal\n"); - dotestatom = 0; - int testatom = 104; - cuda->oncpu = true; - cuda->begin_setup = true; - cuda->finished_run = false; - MYDBG(printf("# CUDA VerletCuda::setup start\n");) - time_pair = 0; - time_kspace = 0; - time_comm = 0; - time_modify = 0; - time_fulliterate = 0; - - //cuda->allocate(); - - cuda_shared_atom* cu_atom = & cuda->shared_data.atom; - cu_atom->update_nlocal = 1; - cu_atom->update_nmax = 1; - - if(atom->molecular) cuda->shared_data.pair.collect_forces_later = true; - - cuda->setDomainParams(); - - - - if(cuda->shared_data.me == 0) - printf("# CUDA: VerletCuda::setup: Allocate memory on device for maximum of %i atoms...\n", atom->nmax); - - cuda->allocate(); - - - - - // setup domain, communication and neighboring - // acquire ghosts - // build neighbor lists - - if(flag) { - if(triclinic) domain->x2lamda(atom->nlocal); - - domain->pbc(); - domain->reset_box(); - comm->setup(); - - if(neighbor->style) neighbor->setup_bins(); - - comm->exchange(); - comm->borders(); - - if(triclinic) domain->lamda2x(atom->nlocal + atom->nghost); - - cuda->setSystemParams(); - cuda->checkResize(); - neighbor->build(); - neighbor->ncalls = 0; - } - - if(cuda->shared_data.me == 0) - printf("# CUDA: VerletCuda::setup: Upload data...\n"); - - cuda->uploadAll(); - cuda->uploadAllNeighborLists(); - - if(atom->mass) - cuda->cu_mass->upload(); - - if(cuda->cu_map_array) - cuda->cu_map_array->upload(); - - // compute all forces - - ev_set(update->ntimestep); - - if(elist_atom) cuda->shared_data.atom.need_eatom = 1; - - if(vlist_atom) cuda->shared_data.atom.need_vatom = 1; - - if(elist_atom || vlist_atom) cuda->checkResize(); - - force_clear(); - cuda->cu_f->download(); - - //printf("# Verlet::setup: g f[0] = (%f, %f, %f)\n", atom->f[0][0], atom->f[0][1], atom->f[0][2]); - - cuda->cu_mass->upload(); - MYDBG(printf("# CUDA: VerletCuda::setup: initial force compute\n");) - - test_atom(testatom, "pre pair force"); - - if(cuda->shared_data.pair.cudable_force) { - cuda->uploadAll(); - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - } - - if(force->pair) force->pair->compute(eflag, vflag); - - if(cuda->shared_data.pair.cudable_force) { - if(cuda->shared_data.pair.collect_forces_later) { - if(eflag) cuda->cu_eng_vdwl->upload(); - - if(eflag) cuda->cu_eng_coul->upload(); - - if(vflag) cuda->cu_virial->upload(); - - Cuda_Pair_CollectForces(&cuda->shared_data, eflag, vflag); - - if(eflag) cuda->cu_eng_vdwl->download(); - - if(eflag) cuda->cu_eng_coul->download(); - - if(vflag) cuda->cu_virial->download(); - } - - cuda->downloadAll(); - } - - test_atom(testatom, "post pair force"); - - MYDBG(printf("# CUDA: VerletCuda::setup: initial force compute done\n");) - //printf("# Verlet::setup: h f[0] = (%f, %f, %f)\n", atom->f[0][0], atom->f[0][1], atom->f[0][2]); - - if(atom->molecular) { - if(force->bond) force->bond->compute(eflag, vflag); - - if(force->angle) force->angle->compute(eflag, vflag); - - if(force->dihedral) force->dihedral->compute(eflag, vflag); - - if(force->improper) force->improper->compute(eflag, vflag); - } - - - if(cuda->shared_data.pppm.cudable_force) { - cuda->cu_tag ->upload(); - cuda->cu_type->upload(); - cuda->cu_x ->upload(); - cuda->cu_v ->upload(); - cuda->cu_f ->upload(); - - if(cu_atom->q_flag) cuda->cu_q->upload(); - } - - if(force->kspace) { - force->kspace->setup(); - force->kspace->compute(eflag, vflag); - } - - if(cuda->shared_data.pppm.cudable_force) { - cuda->cu_f ->download(); - } - - test_atom(testatom, "post kspace"); - - cuda->uploadAll(); - - if(force->newton) comm->reverse_comm(); - - cuda->downloadAll(); - - test_atom(testatom, "post reverse comm"); - - if(cuda->shared_data.me == 0) - printf("# CUDA: Total Device Memory usage post setup: %lf MB\n", 1.0 * CudaWrapper_CheckMemUsage() / 1024 / 1024); - - MYDBG(printf("# CUDA: VerletCuda::setup: call modify setup\n");) - modify->setup(vflag); - - MYDBG(printf("# CUDA: VerletCuda::setup: done\n");) - cuda->finished_setup = true; - cuda->oncpu = false; -} - -//#define TESTATOM -/* ---------------------------------------------------------------------- - iterate for n steps -------------------------------------------------------------------------- */ - -void VerletCuda::run(int n) -{ - dotestatom = cuda->dotestatom; - int testatom = cuda->testatom; //48267; - - - my_times starttime; - my_times endtime; - my_times starttotal; - my_times endtotal; - - cuda->setTimingsZero(); - - int nflag, ntimestep, sortflag; - - int n_post_integrate = modify_cuda->n_post_integrate; - int n_pre_exchange = modify_cuda->n_pre_exchange; - int n_pre_neighbor = modify_cuda->n_pre_neighbor; - int n_pre_force = modify_cuda->n_pre_force; - int n_post_force = modify_cuda->n_post_force; - int n_end_of_step = modify_cuda->n_end_of_step; - MYDBG(printf("# CUDA: Fixes: i_int: %i p_int: %i f_int: %i pr_exc: %i pr_neigh: %i pr_f: %i p_f: %i eos: %i\n", - n_initial_integrate, n_post_integrate, n_final_integrate, n_pre_exchange, n_pre_neighbor, n_pre_force, n_post_force, n_end_of_step);) - - if(atom->sortfreq > 0) sortflag = 1; - else sortflag = 0; - - - if(cuda->shared_data.me == 0) { - if((not cuda->shared_data.pair.cudable_force) && (force->pair)) - error->warning(FLERR, "# CUDA: You asked for a Verlet integration using Cuda, " - "but selected a pair force which has not yet been ported to Cuda"); - - if((not cuda->shared_data.pppm.cudable_force) && (force->kspace)) - error->warning(FLERR, "# CUDA: You asked for a Verlet integration using Cuda, " - "but selected a kspace force which has not yet been ported to Cuda"); - - if(modify_cuda->n_post_integrate_host + modify_cuda->n_pre_exchange_host + modify_cuda->n_pre_neighbor_host + modify_cuda->n_pre_force_host + modify_cuda->n_post_force_host + modify_cuda->n_end_of_step_host + modify_cuda->n_initial_integrate_host + modify_cuda->n_final_integrate_host) - error->warning(FLERR, "# CUDA: You asked for a Verlet integration using Cuda, " - "but several fixes have not yet been ported to Cuda.\n" - "This can cause a severe speed penalty due to frequent data synchronization between host and GPU."); - - if(atom->firstgroupname) - error->warning(FLERR, "Warning: firstgroupname is used, this will cause additional data transfers."); - } - - cuda->uploadAll(); - - if(cuda->neighbor_decide_by_integrator && cuda->cu_xhold) { - const int n = cuda->shared_data.atom.maxhold; - CudaWrapper_CopyData(cuda->cu_xhold->dev_data(), cuda->cu_x->dev_data(), n * sizeof(X_CFLOAT)); - CudaWrapper_CopyData((void*) & ((X_CFLOAT*)cuda->cu_xhold->dev_data())[n], (void*) & ((X_CFLOAT*)cuda->cu_x->dev_data())[atom->nmax], n * sizeof(X_CFLOAT)); - CudaWrapper_CopyData((void*) & ((X_CFLOAT*)cuda->cu_xhold->dev_data())[2 * n], (void*) & ((X_CFLOAT*)cuda->cu_x->dev_data())[2 * atom->nmax], n * sizeof(X_CFLOAT)); - } - - cuda->shared_data.atom.reneigh_flag = 0; - cuda->shared_data.atom.update_nlocal = 1; - cuda->shared_data.atom.update_nmax = 1; - cuda->shared_data.atom.update_neigh = 1; - cuda->shared_data.domain.update = 1; - cuda->shared_data.buffer_new = 1; - cuda->uploadtime = 0; - cuda->downloadtime = 0; - int firstreneigh = 1; - - for(int i = 0; i < n; i++) { - - if (timer->check_timeout(i)) { - update->nsteps = i; - break; - } - - if(atom->nlocal == 0) - error->warning(FLERR, "# CUDA: There are currently no atoms on one of the MPI processes. This is currently prone to encountering errors with USER-CUDA package. Please use the 'processors' keyword to use a more balanced processor layout."); - - ntimestep = ++update->ntimestep; - ev_set(ntimestep); - - // initial time integration - - test_atom(testatom, "Pre initial"); - - MYDBG(printf("# CUDA VerletCuda::iterate: before initial_integrate\n");) - - modify->initial_integrate(vflag); - - MYDBG(printf("# CUDA VerletCuda::iterate: after initial_integrate\n");) - - if(n_post_integrate) modify->post_integrate(); - - - - // regular communication vs neighbor list rebuild - - test_atom(testatom, "Pre Exchange"); - - MYDBG(printf("# CUDA VerletCuda::iterate: before neighbor decide\n");) - nflag = neighbor->decide(); - - if(nflag == 0) { - MYDBG(printf("# CUDA VerletCuda::iterate: communicate\n");) - timer->stamp(); - - if((not(eflag || vflag)) && (cuda->shared_data.overlap_comm)) { - //overlap forward communication of ghost atom positions with inner force calculation (interactions between local atoms) - //build communication buffers - // printf("Pre forward_comm(1)\n"); - my_gettime(CLOCK_REALTIME, &starttotal); - cuda->shared_data.atom.reneigh_flag = 0; - my_gettime(CLOCK_REALTIME, &starttime); - timer->stamp(); - comm->forward_comm(1); - timer->stamp(Timer::COMM); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.comm_forward_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - - //prepare force calculation - // printf("Pre force_clear\n"); - force_clear(); - // printf("Pre Generate XType\n"); - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - //start force calculation asynchronus - cuda->shared_data.comm.comm_phase = 1; - force->pair->compute(eflag, vflag); - timer->stamp(Timer::PAIR); - //CudaWrapper_Sync(); - - //download comm buffers from GPU, perform MPI communication and upload buffers again - my_gettime(CLOCK_REALTIME, &starttime); - comm->forward_comm(2); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.comm_forward_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - timer->stamp(Timer::COMM); - - //wait for force calculation - CudaWrapper_Sync(); - timer->stamp(Timer::PAIR); - - //unpack communication buffers - my_gettime(CLOCK_REALTIME, &starttime); - comm->forward_comm(3); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.comm_forward_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - - timer->stamp(Timer::COMM); - MYDBG(printf("# CUDA VerletCuda::iterate: communicate done\n");) - cuda->shared_data.cuda_timings.test1 += - endtotal.tv_sec - starttotal.tv_sec + 1.0 * (endtotal.tv_nsec - starttotal.tv_nsec) / 1000000000; - } else { - //perform standard forward communication - my_gettime(CLOCK_REALTIME, &starttime); - comm->forward_comm(); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.comm_forward_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - timer->stamp(Timer::COMM); - MYDBG(printf("# CUDA VerletCuda::iterate: communicate done\n");) - } - } else { - int nlocalold = cuda->shared_data.atom.nlocal; - - if(firstreneigh) { - cuda->shared_data.atom.update_nlocal = 1; - cuda->shared_data.atom.update_nmax = 1; - firstreneigh = 0; - } - - cuda->shared_data.buffer_new = 1; - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor\n");) - cuda->setDomainParams(); - - if(n_pre_exchange) modify->pre_exchange(); - - if(atom->nlocal != cuda->shared_data.atom.nlocal) { //did someone add atoms during pre_exchange? - cuda->checkResize(); - cuda->uploadAll(); - } - - //check domain changes - if(domain->triclinic) domain->x2lamda(atom->nlocal); - - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor pbc\n");) - domain->pbc(); - - if(domain->box_change) { - domain->reset_box(); - comm->setup(); - - if(neighbor->style) neighbor->setup_bins(); - - } - - timer->stamp(); - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor exchange\n");) - - //perform exchange of local atoms - my_gettime(CLOCK_REALTIME, &starttime); - comm->exchange(); - my_gettime(CLOCK_REALTIME, &endtime); - - //special and nspecial fields of the atom data are not currently transfered via the GPU buffer might be changed in the future - if(comm->nprocs > 1) { - my_gettime(CLOCK_REALTIME, &starttime); - - if(atom->special) - cuda->cu_special->upload(); - - if(atom->nspecial) - cuda->cu_nspecial->upload(); - - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.test1 += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - } - - cuda->shared_data.cuda_timings.comm_exchange_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - - if(nlocalold != cuda->shared_data.atom.nlocal) cuda->shared_data.atom.update_nlocal = 2; - - //sort atoms - if(sortflag && ntimestep >= atom->nextsort) atom->sort(); - - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor borders\n");) - - //generate ghost atom lists, and transfer ghost atom data - my_gettime(CLOCK_REALTIME, &starttime); - comm->borders(); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.comm_border_total += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - - my_gettime(CLOCK_REALTIME, &starttime); - //atom index maps are generated on CPU, and need to be transfered to GPU if they are used - if(cuda->cu_map_array) - cuda->cu_map_array->upload(); - - - if(domain->triclinic) domain->lamda2x(atom->nlocal + atom->nghost); - - if(n_pre_neighbor) modify->pre_neighbor(); - - cuda->shared_data.buffer_new = 2; - - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor build\n");) - timer->stamp(Timer::COMM); - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.test2 += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - - //rebuild neighbor list - test_atom(testatom, "Pre Neighbor"); - neighbor->build(0); - timer->stamp(Timer::NEIGH); - MYDBG(printf("# CUDA VerletCuda::iterate: neighbor done\n");) - //if bonded interactions are used (in this case collect_forces_later is true), transfer data which only changes upon exchange/border routines from GPU to CPU - if(cuda->shared_data.pair.collect_forces_later) { - if(cuda->cu_molecule) cuda->cu_molecule->downloadAsync(2); - - cuda->cu_tag->downloadAsync(2); - cuda->cu_type->downloadAsync(2); - cuda->cu_mask->downloadAsync(2); - - if(cuda->cu_q) cuda->cu_q->downloadAsync(2); - } - cuda->shared_data.comm.comm_phase = 3; - } - - test_atom(testatom, "Post Exchange"); - - // force computations - - //only do force_clear if it has not been done during overlap of communication with local interactions - if(not((not(eflag || vflag)) && (cuda->shared_data.overlap_comm) && (cuda->shared_data.comm.comm_phase < 3))) - force_clear(); - - if(n_pre_force) modify->pre_force(vflag); - - timer->stamp(); - - //if overlap of bonded interactions with nonbonded interactions takes place, download forces and positions - /* if(cuda->shared_data.pair.collect_forces_later) - { - cuda->cu_x->downloadAsync(2); - cuda->cu_f->downloadAsync(2); - }*/ - - if(force->pair) { - if((not(eflag || vflag)) && (cuda->shared_data.overlap_comm) && (cuda->shared_data.comm.comm_phase < 3) && cuda->shared_data.pair.cudable_force) { - //second part of force calculations in case of overlaping it with commuincation. Only interactions between local and ghost atoms are done now - //regenerate data layout for force computations, its actually only needed for the ghost atoms - cuda->shared_data.comm.comm_phase = 2; - - my_times atime1, atime2; - my_gettime(CLOCK_REALTIME, &atime1); - - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - my_gettime(CLOCK_REALTIME, &atime2); - cuda->shared_data.cuda_timings.pair_xtype_conversion += - atime2.tv_sec - atime1.tv_sec + 1.0 * (atime2.tv_nsec - atime1.tv_nsec) / 1000000000; - force->pair->compute(eflag, vflag); - - } else { - //calculate complete pair interactions - if(not cuda->shared_data.pair.cudable_force) cuda->downloadAll(); - else { - //regenerate data layout for force computations, its actually only needed for the ghost atoms - my_times atime1, atime2; - my_gettime(CLOCK_REALTIME, &atime1); - - Cuda_Pair_GenerateXType(&cuda->shared_data); - - if(cuda->cu_v_radius) - Cuda_Pair_GenerateVRadius(&cuda->shared_data); - - if(cuda->cu_omega_rmass) - Cuda_Pair_GenerateOmegaRmass(&cuda->shared_data); - - my_gettime(CLOCK_REALTIME, &atime2); - cuda->shared_data.cuda_timings.pair_xtype_conversion += - atime2.tv_sec - atime1.tv_sec + 1.0 * (atime2.tv_nsec - atime1.tv_nsec) / 1000000000; - } - - cuda->shared_data.comm.comm_phase = 0; - force->pair->compute(eflag, vflag); - } - - if(not cuda->shared_data.pair.cudable_force) cuda->uploadAll(); - - //wait for force calculation in case of not using overlap with bonded interactions - if(not cuda->shared_data.pair.collect_forces_later) - CudaWrapper_Sync(); - - timer->stamp(Timer::PAIR); - } - - //calculate bonded interactions - if(atom->molecular) { - cuda->cu_x->downloadAsync(2); - - if(n_pre_force == 0) Verlet::force_clear(); - else cuda->cu_f->downloadAsync(2); - - timer->stamp(Timer::PAIR); - - if(neighbor->lastcall == update->ntimestep) { - neighbor->build_topology(); - timer->stamp(Timer::NEIGH); - } - - test_atom(testatom, "pre bond force"); - - if(force->bond) force->bond->compute(eflag, vflag); - - if(force->angle) force->angle->compute(eflag, vflag); - - if(force->dihedral) force->dihedral->compute(eflag, vflag); - - if(force->improper) force->improper->compute(eflag, vflag); - - timer->stamp(Timer::BOND); - } - - //collect forces in case pair force and bonded interactions were overlapped, and either no KSPACE or a GPU KSPACE style is used - if(cuda->shared_data.pair.collect_forces_later && cuda->shared_data.pair.cudable_force && (not(force->kspace && (not cuda->shared_data.pppm.cudable_force)))) { - my_gettime(CLOCK_REALTIME, &starttime); - cuda->cu_f->uploadAsync(2); - - test_atom(testatom, "post molecular force"); - - - if(eflag) cuda->cu_eng_vdwl->upload(); - - if(eflag) cuda->cu_eng_coul->upload(); - - if(vflag) cuda->cu_virial->upload(); - - Cuda_Pair_CollectForces(&cuda->shared_data, eflag, vflag); - - if(eflag) cuda->cu_eng_vdwl->download(); - - if(eflag) cuda->cu_eng_coul->download(); - - if(vflag) cuda->cu_virial->download(); - - timer->stamp(Timer::PAIR); - - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.pair_force_collection += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - } - - //compute kspace force - if(force->kspace) { - if((not cuda->shared_data.pppm.cudable_force) && (not cuda->shared_data.pair.collect_forces_later)) - cuda->downloadAll(); - - if((not cuda->shared_data.pppm.cudable_force) && (cuda->shared_data.pair.collect_forces_later) && (not atom->molecular)) { - cuda->cu_x->downloadAsync(2); - - if(n_pre_force == 0) Verlet::force_clear(); - else cuda->cu_f->downloadAsync(2); - - timer->stamp(Timer::PAIR); - } - - force->kspace->compute(eflag, vflag); - - if((not cuda->shared_data.pppm.cudable_force) && (not cuda->shared_data.pair.collect_forces_later)) - cuda->uploadAll(); - - timer->stamp(Timer::KSPACE); - } - - //collect forces in case pair forces and kspace was overlaped - if(cuda->shared_data.pair.collect_forces_later && cuda->shared_data.pair.cudable_force && ((force->kspace && (not cuda->shared_data.pppm.cudable_force)))) { - cuda->cu_f->uploadAsync(2); - - my_gettime(CLOCK_REALTIME, &starttime); - - if(eflag) cuda->cu_eng_vdwl->upload(); - - if(eflag) cuda->cu_eng_coul->upload(); - - if(vflag) cuda->cu_virial->upload(); - - Cuda_Pair_CollectForces(&cuda->shared_data, eflag, vflag); - - if(eflag) cuda->cu_eng_vdwl->download(); - - if(eflag) cuda->cu_eng_coul->download(); - - if(vflag) cuda->cu_virial->download(); - - timer->stamp(Timer::PAIR); - - my_gettime(CLOCK_REALTIME, &endtime); - cuda->shared_data.cuda_timings.pair_force_collection += - endtime.tv_sec - starttime.tv_sec + 1.0 * (endtime.tv_nsec - starttime.tv_nsec) / 1000000000; - } - - //send forces on ghost atoms back to other GPU: THIS SHOULD NEVER HAPPEN - if(force->newton) { - comm->reverse_comm(); - timer->stamp(Timer::COMM); - } - - test_atom(testatom, "post force"); - // force modifications, final time integration, diagnostics - - if(n_post_force) modify->post_force(vflag); - - test_atom(testatom, "pre final"); - - modify->final_integrate(); - - test_atom(testatom, "post final"); - - if(n_end_of_step) modify->end_of_step(); - - // all output - - test_atom(testatom, "pre output"); - - if(ntimestep == output->next) { - if(not output->thermo->cudable) - cuda->downloadAll(); - - timer->stamp(); - output->write(ntimestep); - timer->stamp(Timer::OUTPUT); - } - - - test_atom(testatom, "post output"); - - if(cuda->shared_data.atom.update_nlocal > 0) - cuda->shared_data.atom.update_nlocal--; - - if(cuda->shared_data.atom.update_nmax > 0) - cuda->shared_data.atom.update_nmax--; - - if(cuda->shared_data.atom.update_neigh > 0) - cuda->shared_data.atom.update_neigh--; - - if(cuda->shared_data.domain.update > 0) - cuda->shared_data.domain.update--; - - if(cuda->shared_data.buffer_new > 0) - cuda->shared_data.buffer_new--; - - cuda->shared_data.atom.reneigh_flag = 0; - } - - - cuda->downloadAll(); - cuda->downloadAllNeighborLists(); - cuda->shared_data.atom.update_nlocal = 1; - cuda->shared_data.atom.update_nmax = 1; - cuda->shared_data.atom.update_neigh = 1; - cuda->shared_data.buffer_new = 1; - cuda->shared_data.domain.update = 1; - cuda->oncpu = true; - cuda->finished_run = true; -} - - -/* ---------------------------------------------------------------------- - clear force on own & ghost atoms - setup and clear other arrays as needed -------------------------------------------------------------------------- */ - -void VerletCuda::force_clear() -{ - cuda->cu_f->memset_device(0); - - if(cuda->cu_torque) cuda->cu_torque->memset_device(0); - -#if 0 - //The rest should not be necessary - int i; - - for(i = 0; i < atom->nlocal; i++) { - atom->f[i][0] = 0.0; - atom->f[i][1] = 0.0; - atom->f[i][2] = 0.0; - } - - // clear force on all particles - // if either newton flag is set, also include ghosts - - if(neighbor->includegroup == 0) { - int nall; - - if(force->newton) nall = atom->nlocal + atom->nghost; - else nall = atom->nlocal; - - if(torqueflag) { - double** torque = atom->torque; - - for(i = 0; i < nall; i++) { - torque[i][0] = 0.0; - torque[i][1] = 0.0; - torque[i][2] = 0.0; - } - } - - // neighbor includegroup flag is set - // clear force only on initial nfirst particles - // if either newton flag is set, also include ghosts - - } else { - int nall = atom->nfirst; - - - if(torqueflag) { - double** torque = atom->torque; - - for(i = 0; i < nall; i++) { - torque[i][0] = 0.0; - torque[i][1] = 0.0; - torque[i][2] = 0.0; - } - } - - if(force->newton) { - nall = atom->nlocal + atom->nghost; - - if(torqueflag) { - double** torque = atom->torque; - - for(i = atom->nlocal; i < nall; i++) { - torque[i][0] = 0.0; - torque[i][1] = 0.0; - torque[i][2] = 0.0; - } - } - } - } -#endif -} - -void VerletCuda::test_atom(int aatom, const char* string) //printing properties of one atom for test purposes -{ - if(not dotestatom) return; - - bool check = false; - - if(cuda->finished_setup) cuda->downloadAll(); - - for(int i = 0; i < atom->nlocal + atom->nghost; i++) { - if((atom->tag[i] == aatom) && (i < atom->nlocal)) { - - printf("%i # CUDA %s: " BIGINT_FORMAT " %i %e %e %e %i ", - comm->me, string, update->ntimestep, atom->tag[i], - atom->x[i][0], atom->v[i][0], atom->f[i][0], i); - - if(atom->molecular && (i < atom->nlocal)) { - printf(" // %i %i %i ", atom->num_bond[i], atom->num_angle[i], atom->num_dihedral[i]); - - for(int k = 0; k < atom->num_bond[i]; k++) - printf("// %i %i ", atom->bond_type[i][k], atom->bond_atom[i][k]); - } - - printf("\n"); - } - - if(i < atom->nlocal) { - if((atom->v[i][0] < -100 || atom->v[i][0] > 100) || - (atom->v[i][1] < -100 || atom->v[i][1] > 100) || - (atom->v[i][2] < -100 || atom->v[i][2] > 100) || - (atom->v[i][0] != atom->v[i][0]) || - (atom->v[i][1] != atom->v[i][1]) || - (atom->v[i][2] != atom->v[i][2])) { - printf("%i # CUDA %s velocity: %i %e %e %e %i\n", comm->me, string, atom->tag[i], atom->x[i][0], atom->v[i][0], atom->f[i][0], i); - check = true; - } - - if((atom->f[i][0] < -10000 || atom->f[i][0] > 10000) || - (atom->f[i][1] < -10000 || atom->f[i][1] > 10000) || - (atom->f[i][2] < -10000 || atom->f[i][2] > 10000) || - (atom->f[i][0] != atom->f[i][0]) || - (atom->f[i][1] != atom->f[i][1]) || - (atom->f[i][2] != atom->f[i][2])) { - printf("%i # CUDA %s force: %i %e %e %e %i\n", comm->me, string, atom->tag[i], atom->x[i][0], atom->v[i][0], atom->f[i][0], i); - check = true; - } - - if(atom->tag[i] <= 0) - printf("%i # CUDA %s tag: %i %e %e %e %i\n", comm->me, string, atom->tag[i], atom->x[i][0], atom->v[i][0], atom->f[i][0], i); - } - } - - if(check) exit(0); -} diff --git a/src/USER-CUDA/verlet_cuda.h b/src/USER-CUDA/verlet_cuda.h deleted file mode 100644 index 6760828010..0000000000 --- a/src/USER-CUDA/verlet_cuda.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - - Original Version: - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - See the README file in the top-level LAMMPS directory. - - ----------------------------------------------------------------------- - - USER-CUDA Package and associated modifications: - https://sourceforge.net/projects/lammpscuda/ - - Christian Trott, christian.trott@tu-ilmenau.de - Lars Winterfeld, lars.winterfeld@tu-ilmenau.de - Theoretical Physics II, University of Technology Ilmenau, Germany - - See the README file in the USER-CUDA directory. - - This software is distributed under the GNU General Public License. -------------------------------------------------------------------------- */ - -#ifdef INTEGRATE_CLASS - -IntegrateStyle(verlet/cuda,VerletCuda) - -#else - - -#ifndef LMP_VERLET_CUDA_H -#define LMP_VERLET_CUDA_H -#include "verlet.h" -#include "modify_cuda.h" - -namespace LAMMPS_NS { - -class VerletCuda : public Verlet -{ - public: - VerletCuda(class LAMMPS *, int, char **); - void setup(); - void setup_minimal(int); - void run(int); - - void test_atom(int atom,const char* astring); //debugging purpose - int dotestatom; //debugging purpose - - protected: - class Cuda *cuda; - void force_clear(); - double time_pair; - double time_kspace; - double time_comm; - double time_modify; - double time_fulliterate; - ModifyCuda* modify_cuda; -}; - -} - -#endif -#endif diff --git a/src/USER-DPD/atom_vec_dpd.cpp b/src/USER-DPD/atom_vec_dpd.cpp index 0b1866e65c..92028b60e6 100644 --- a/src/USER-DPD/atom_vec_dpd.cpp +++ b/src/USER-DPD/atom_vec_dpd.cpp @@ -35,9 +35,9 @@ AtomVecDPD::AtomVecDPD(LAMMPS *lmp) : AtomVec(lmp) mass_type = 1; comm_x_only = comm_f_only = 0; // we communicate not only x forward but also dpdTheta - size_forward = 6; // 3 + dpdTheta + uCond + uMech + size_forward = 7; // 3 + dpdTheta + uCond + uMech + uChem size_reverse = 3; // 3 - size_border = 9; // 6 + dpdTheta + uCond + uMech + size_border = 12; // 6 + dpdTheta + uCond + uMech + uChem + uCG + uCGnew size_velocity = 3; size_data_atom = 6; // we read id + type + dpdTheta + x + y + z size_data_vel = 4; @@ -73,8 +73,12 @@ void AtomVecDPD::grow(int n) dpdTheta = memory->grow(atom->dpdTheta, nmax, "atom:dpdTheta"); uCond = memory->grow(atom->uCond,nmax,"atom:uCond"); uMech = memory->grow(atom->uMech,nmax,"atom:uMech"); + uChem = memory->grow(atom->uChem,nmax,"atom:uChem"); + uCG = memory->grow(atom->uCG,nmax,"atom:uCG"); + uCGnew = memory->grow(atom->uCGnew,nmax,"atom:uCGnew"); duCond = memory->grow(atom->duCond,nmax,"atom:duCond"); duMech = memory->grow(atom->duMech,nmax,"atom:duMech"); + duChem = memory->grow(atom->duChem,nmax,"atom:duChem"); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -94,8 +98,12 @@ void AtomVecDPD::grow_reset() dpdTheta = atom->dpdTheta; uCond = atom->uCond; uMech = atom->uMech; + uChem = atom->uChem; + uCG = atom->uCG; + uCGnew = atom->uCGnew; duCond = atom->duCond; duMech = atom->duMech; + duChem = atom->duChem; } /* ---------------------------------------------------------------------- @@ -117,6 +125,9 @@ void AtomVecDPD::copy(int i, int j, int delflag) dpdTheta[j] = dpdTheta[i]; uCond[j] = uCond[i]; uMech[j] = uMech[i]; + uChem[j] = uChem[i]; + uCG[j] = uCG[i]; + uCGnew[j] = uCGnew[i]; if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -141,6 +152,7 @@ int AtomVecDPD::pack_comm(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; } } else { if (domain->triclinic == 0) { @@ -160,6 +172,7 @@ int AtomVecDPD::pack_comm(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; } } return m; @@ -186,6 +199,7 @@ int AtomVecDPD::pack_comm_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; } } else { if (domain->triclinic == 0) { @@ -209,6 +223,7 @@ int AtomVecDPD::pack_comm_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; } } else { dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; @@ -231,6 +246,7 @@ int AtomVecDPD::pack_comm_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; } } } @@ -252,6 +268,7 @@ void AtomVecDPD::unpack_comm(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; } } @@ -273,6 +290,7 @@ void AtomVecDPD::unpack_comm_vel(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; } } @@ -328,6 +346,9 @@ int AtomVecDPD::pack_border(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } } else { if (domain->triclinic == 0) { @@ -350,6 +371,9 @@ int AtomVecDPD::pack_border(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } } @@ -384,6 +408,9 @@ int AtomVecDPD::pack_border_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } } else { if (domain->triclinic == 0) { @@ -410,6 +437,9 @@ int AtomVecDPD::pack_border_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } } else { dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; @@ -435,6 +465,9 @@ int AtomVecDPD::pack_border_vel(int n, int *list, double *buf, buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } } } @@ -458,6 +491,9 @@ int AtomVecDPD::pack_comm_hybrid(int n, int *list, double *buf) buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } return m; } @@ -474,6 +510,9 @@ int AtomVecDPD::pack_border_hybrid(int n, int *list, double *buf) buf[m++] = dpdTheta[j]; buf[m++] = uCond[j]; buf[m++] = uMech[j]; + buf[m++] = uChem[j]; + buf[m++] = uCG[j]; + buf[m++] = uCGnew[j]; } return m; } @@ -497,6 +536,9 @@ void AtomVecDPD::unpack_border(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; + uCG[i] = buf[m++]; + uCGnew[i] = buf[m++]; } if (atom->nextra_border) @@ -527,6 +569,9 @@ void AtomVecDPD::unpack_border_vel(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; + uCG[i] = buf[m++]; + uCGnew[i] = buf[m++]; } if (atom->nextra_border) @@ -547,6 +592,7 @@ int AtomVecDPD::unpack_comm_hybrid(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; } return m; } @@ -563,6 +609,9 @@ int AtomVecDPD::unpack_border_hybrid(int n, int first, double *buf) dpdTheta[i] = buf[m++]; uCond[i] = buf[m++]; uMech[i] = buf[m++]; + uChem[i] = buf[m++]; + uCG[i] = buf[m++]; + uCGnew[i] = buf[m++]; } return m; } @@ -588,6 +637,9 @@ int AtomVecDPD::pack_exchange(int i, double *buf) buf[m++] = dpdTheta[i]; buf[m++] = uCond[i]; buf[m++] = uMech[i]; + buf[m++] = uChem[i]; + buf[m++] = uCG[i]; + buf[m++] = uCGnew[i]; if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -618,6 +670,9 @@ int AtomVecDPD::unpack_exchange(double *buf) dpdTheta[nlocal] = buf[m++]; uCond[nlocal] = buf[m++]; uMech[nlocal] = buf[m++]; + uChem[nlocal] = buf[m++]; + uCG[nlocal] = buf[m++]; + uCGnew[nlocal] = buf[m++]; if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -638,7 +693,7 @@ int AtomVecDPD::size_restart() int i; int nlocal = atom->nlocal; - int n = 14 * nlocal; // 11 + dpdTheta + uCond + uMech + int n = 15 * nlocal; // 11 + dpdTheta + uCond + uMech + uChem if (atom->nextra_restart) for (int iextra = 0; iextra < atom->nextra_restart; iextra++) @@ -670,6 +725,7 @@ int AtomVecDPD::pack_restart(int i, double *buf) buf[m++] = dpdTheta[i]; buf[m++] = uCond[i]; buf[m++] = uMech[i]; + buf[m++] = uChem[i]; if (atom->nextra_restart) for (int iextra = 0; iextra < atom->nextra_restart; iextra++) @@ -706,6 +762,7 @@ int AtomVecDPD::unpack_restart(double *buf) dpdTheta[nlocal] = buf[m++]; uCond[nlocal] = buf[m++]; uMech[nlocal] = buf[m++]; + uChem[nlocal] = buf[m++]; double **extra = atom->extra; if (atom->nextra_store) { @@ -742,8 +799,12 @@ void AtomVecDPD::create_atom(int itype, double *coord) dpdTheta[nlocal] = 0.0; uCond[nlocal] = 0.0; uMech[nlocal] = 0.0; + uChem[nlocal] = 0.0; + uCG[nlocal] = 0.0; + uCGnew[nlocal] = 0.0; duCond[nlocal] = 0.0; duMech[nlocal] = 0.0; + duChem[nlocal] = 0.0; atom->nlocal++; } @@ -781,6 +842,9 @@ void AtomVecDPD::data_atom(double *coord, tagint imagetmp, char **values) rho[nlocal] = 0.0; uCond[nlocal] = 0.0; uMech[nlocal] = 0.0; + uChem[nlocal] = 0.0; + uCG[nlocal] = 0.0; + uCGnew[nlocal] = 0.0; atom->nlocal++; } @@ -870,8 +934,12 @@ bigint AtomVecDPD::memory_usage() if (atom->memcheck("dpdTheta")) bytes += memory->usage(dpdTheta,nmax); if (atom->memcheck("uCond")) bytes += memory->usage(uCond,nmax); if (atom->memcheck("uMech")) bytes += memory->usage(uMech,nmax); + if (atom->memcheck("uChem")) bytes += memory->usage(uChem,nmax); + if (atom->memcheck("uCG")) bytes += memory->usage(uCG,nmax); + if (atom->memcheck("uCGnew")) bytes += memory->usage(uCGnew,nmax); if (atom->memcheck("duCond")) bytes += memory->usage(duCond,nmax); if (atom->memcheck("duMech")) bytes += memory->usage(duMech,nmax); + if (atom->memcheck("duChem")) bytes += memory->usage(duChem,nmax); return bytes; } diff --git a/src/USER-DPD/atom_vec_dpd.h b/src/USER-DPD/atom_vec_dpd.h index 753705e763..71ef48d053 100644 --- a/src/USER-DPD/atom_vec_dpd.h +++ b/src/USER-DPD/atom_vec_dpd.h @@ -58,8 +58,8 @@ class AtomVecDPD : public AtomVec { void write_data(FILE *, int, double **); int write_data_hybrid(FILE *, double *); bigint memory_usage(); - double *uCond,*uMech,*dpdTheta,*rho; - double *duCond,*duMech; + double *uCond,*uMech,*uChem,*uCG,*uCGnew,*rho,*dpdTheta; + double *duCond,*duMech,*duChem; protected: tagint *tag; diff --git a/src/USER-DPD/compute_dpd.cpp b/src/USER-DPD/compute_dpd.cpp index 87eab0baac..59716362c7 100644 --- a/src/USER-DPD/compute_dpd.cpp +++ b/src/USER-DPD/compute_dpd.cpp @@ -59,6 +59,7 @@ void ComputeDpd::compute_vector() double *uCond = atom->uCond; double *uMech = atom->uMech; + double *uChem = atom->uChem; double *dpdTheta = atom->dpdTheta; int nlocal = atom->nlocal; int *mask = atom->mask; @@ -72,7 +73,7 @@ void ComputeDpd::compute_vector() if (mask[i] & groupbit){ dpdU[0] += uCond[i]; dpdU[1] += uMech[i]; - dpdU[2] += uCond[i] + uMech[i]; + dpdU[2] += uChem[i]; dpdU[3] += 1.0 / dpdTheta[i]; dpdU[4]++; } diff --git a/src/USER-DPD/compute_dpd_atom.cpp b/src/USER-DPD/compute_dpd_atom.cpp index 8d944a292f..10f5d8203f 100644 --- a/src/USER-DPD/compute_dpd_atom.cpp +++ b/src/USER-DPD/compute_dpd_atom.cpp @@ -40,7 +40,7 @@ ComputeDpdAtom::ComputeDpdAtom(LAMMPS *lmp, int narg, char **arg) : if (narg != 3) error->all(FLERR,"Illegal compute dpd/atom command"); peratom_flag = 1; - size_peratom_cols = 3; + size_peratom_cols = 4; nmax = 0; dpdAtom = NULL; @@ -77,21 +77,23 @@ void ComputeDpdAtom::compute_peratom() double *uCond = atom->uCond; double *uMech = atom->uMech; + double *uChem = atom->uChem; double *dpdTheta = atom->dpdTheta; + int nlocal = atom->nlocal; int *mask = atom->mask; - if (atom->nmax > nmax) { + if (nlocal > nmax) { memory->destroy(dpdAtom); nmax = atom->nmax; memory->create(dpdAtom,nmax,size_peratom_cols,"dpd/atom:dpdAtom"); array_atom = dpdAtom; } - const int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++){ if (mask[i] & groupbit){ dpdAtom[i][0] = uCond[i]; dpdAtom[i][1] = uMech[i]; - dpdAtom[i][2] = dpdTheta[i]; + dpdAtom[i][2] = uChem[i]; + dpdAtom[i][3] = dpdTheta[i]; } } } diff --git a/src/USER-DPD/fix_eos_table.cpp b/src/USER-DPD/fix_eos_table.cpp index b9579cfaf7..c74c94abff 100644 --- a/src/USER-DPD/fix_eos_table.cpp +++ b/src/USER-DPD/fix_eos_table.cpp @@ -195,7 +195,7 @@ void FixEOStable::read_table(Table *tb, Table *tb2, char *file, char *keyword) // open file - FILE *fp = fopen(file,"r"); + FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; sprintf(str,"Cannot open file %s",file); diff --git a/src/USER-DPD/fix_eos_table_rx.cpp b/src/USER-DPD/fix_eos_table_rx.cpp new file mode 100644 index 0000000000..2fc56976f3 --- /dev/null +++ b/src/USER-DPD/fix_eos_table_rx.cpp @@ -0,0 +1,789 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: James Larentzos (U.S. Army Research Laboratory) +------------------------------------------------------------------------- */ + +#include +#include +#include "fix_eos_table_rx.h" +#include "atom.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "comm.h" +#include +#include "modify.h" + +#define MAXLINE 1024 + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixEOStableRX::FixEOStableRX(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg != 8) error->all(FLERR,"Illegal fix eos/table/rx command"); + restart_peratom = 1; + nevery = 1; + + bool rx_flag = false; + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (!rx_flag) error->all(FLERR,"FixEOStableRX requires a fix rx command."); + + nspecies = atom->nspecies_dpd; + if(nspecies==0) error->all(FLERR,"There are no rx species specified."); + + if (strcmp(arg[3],"linear") == 0) tabstyle = LINEAR; + else error->all(FLERR,"Unknown table style in fix eos/table/rx"); + + tablength = force->inumeric(FLERR,arg[5]); + if (tablength < 2) error->all(FLERR,"Illegal number of eos/table/rx entries"); + + ntables = 0; + tables = NULL; + tables2 = NULL; + int me; + MPI_Comm_rank(world,&me); + for (int ii=0;iisrealloc(tables,(ntables+1)*sizeof(Table),"eos:table/rx"); + tables2 = (Table *) + memory->srealloc(tables2,(ntables+1)*sizeof(Table),"eos:table/rx"); + + Table *tb = &tables[ntables]; + Table *tb2 = &tables2[ntables]; + + null_table(tb); + null_table(tb2); + + ntables++; + } + + ntables = 0; + Table *tb = &tables[ntables]; + Table *tb2 = &tables2[ntables]; + + if (me == 0) read_table(tb,tb2,arg[4],arg[6]); + + for (int ii=0;iininput <= 1) error->one(FLERR,"Invalid eos/table/rx length"); + + tb->lo = tb->rfile[0]; + tb->hi = tb->rfile[tb->ninput-1]; + if (tb->lo >= tb->hi) error->all(FLERR,"eos/table/rx values are not increasing"); + + if (tb2->ninput <= 1) error->one(FLERR,"Invalid eos/table/rx length"); + + tb2->lo = tb2->rfile[0]; + tb2->hi = tb2->rfile[tb2->ninput-1]; + if (tb2->lo >= tb2->hi) error->all(FLERR,"eos/table/rx values are not increasing"); + + // spline read-in and compute r,e,f vectors within table + + spline_table(tb); + compute_table(tb); + spline_table(tb2); + compute_table(tb2); + ntables++; + } + + // Read the Formation Enthalpies + read_file(arg[7]); + + comm_forward = 3; + comm_reverse = 2; +} + +/* ---------------------------------------------------------------------- */ + +FixEOStableRX::~FixEOStableRX() +{ + for (int m = 0; m < ntables; m++) { + free_table(&tables[m]); + free_table(&tables2[m]); + } + memory->sfree(tables); + memory->sfree(tables2); + + delete [] dHf; +} + +/* ---------------------------------------------------------------------- */ + +int FixEOStableRX::setmask() +{ + int mask = 0; + mask |= POST_INTEGRATE; + mask |= END_OF_STEP; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::setup(int vflag) +{ + int nlocal = atom->nlocal; + int *mask = atom->mask; + double *uCond = atom->uCond; + double *uMech = atom->uMech; + double *uChem = atom->uChem; + double *dpdTheta = atom->dpdTheta; + double duChem; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + duChem = uCG[i] - uCGnew[i]; + uChem[i] += duChem; + uCG[i] = double(0.0); + uCGnew[i] = double(0.0); + } + + // Communicate the updated momenta and velocities to all nodes + comm->forward_comm_fix(this); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + temperature_lookup(i,uCond[i]+uMech[i]+uChem[i],dpdTheta[i]); +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::init() +{ + int nlocal = atom->nlocal; + int *mask = atom->mask; + double *uCond = atom->uCond; + double *uMech = atom->uMech; + double *uChem = atom->uChem; + double *dpdTheta = atom->dpdTheta; + double tmp; + + if(this->restart_reset){ + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + temperature_lookup(i,uCond[i]+uMech[i]+uChem[i],dpdTheta[i]); + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if(dpdTheta[i] <= double(0.0)) + error->one(FLERR,"Internal temperature <= zero"); + energy_lookup(i,dpdTheta[i],tmp); + uCond[i] = tmp / double(2.0); + uMech[i] = tmp / double(2.0); + uChem[i] = double(0.0); + } + } +} + + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::post_integrate() +{ + int nlocal = atom->nlocal; + int *mask = atom->mask; + double *uCond = atom->uCond; + double *uMech = atom->uMech; + double *uChem = atom->uChem; + double *dpdTheta = atom->dpdTheta; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + temperature_lookup(i,uCond[i]+uMech[i]+uChem[i],dpdTheta[i]); + if(dpdTheta[i] <= double(0.0)) + error->one(FLERR,"Internal temperature <= zero"); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::end_of_step() +{ + int nlocal = atom->nlocal; + int *mask = atom->mask; + double *uCond = atom->uCond; + double *uMech = atom->uMech; + double *uChem = atom->uChem; + double *dpdTheta = atom->dpdTheta; + double duChem; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + // Communicate the ghost uCGnew + comm->reverse_comm_fix(this); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + duChem = uCG[i] - uCGnew[i]; + uChem[i] += duChem; + uCG[i] = double(0.0); + uCGnew[i] = double(0.0); + } + + // Communicate the updated momenta and velocities to all nodes + comm->forward_comm_fix(this); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + temperature_lookup(i,uCond[i]+uMech[i]+uChem[i],dpdTheta[i]); + if(dpdTheta[i] <= double(0.0)) + error->one(FLERR,"Internal temperature <= zero"); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::read_file(char *file) +{ + int params_per_line = 2; + char **words = new char*[params_per_line+1]; + + dHf = new double[nspecies]; + + // open file on proc 0 + + FILE *fp; + fp = NULL; + if (comm->me == 0) { + fp = fopen(file,"r"); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open eos table/rx potential file %s",file); + error->one(FLERR,str); + } + } + + // one set of params can span multiple lines + int n,nwords,ispecies; + char line[MAXLINE],*ptr; + int eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // concatenate additional lines until have params_per_line words + + while (nwords < params_per_line) { + n = strlen(line); + if (comm->me == 0) { + ptr = fgets(&line[n],MAXLINE-n,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + } + + if (nwords != params_per_line) + error->all(FLERR,"Incorrect format in eos table/rx potential file"); + + // words = ptrs to all words in line + + nwords = 0; + words[nwords++] = strtok(line," \t\n\r\f"); + while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + + for (ispecies = 0; ispecies < nspecies; ispecies++) + if (strcmp(words[0],&atom->dname[ispecies][0]) == 0) break; + if (ispecies == nspecies) continue; + + dHf[ispecies] = atof(words[1]); + } + + delete [] words; +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::null_table(Table *tb) +{ + tb->rfile = tb->efile = NULL; + tb->e2file = NULL; + tb->r = tb->e = tb->de = NULL; + tb->e2 = NULL; +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::free_table(Table *tb) +{ + memory->destroy(tb->rfile); + memory->destroy(tb->efile); + memory->destroy(tb->e2file); + + memory->destroy(tb->r); + memory->destroy(tb->e); + memory->destroy(tb->de); + memory->destroy(tb->e2); +} + +/* ---------------------------------------------------------------------- + read table file, only called by proc 0 +------------------------------------------------------------------------- */ + +void FixEOStableRX::read_table(Table *tb, Table *tb2, char *file, char *keyword) +{ + char line[MAXLINE]; + + // open file + + FILE *fp = fopen(file,"r"); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open file %s",file); + error->one(FLERR,str); + } + + // loop until section found with matching keyword + + while (1) { + if (fgets(line,MAXLINE,fp) == NULL) + error->one(FLERR,"Did not find keyword in table file"); + if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line + if (line[0] == '#') continue; // comment + char *word = strtok(line," \t\n\r"); + if (strcmp(word,keyword) == 0) break; // matching keyword + fgets(line,MAXLINE,fp); // no match, skip section + param_extract(tb,line); + fgets(line,MAXLINE,fp); + for (int i = 0; i < tb->ninput; i++) fgets(line,MAXLINE,fp); + } + + // read args on 2nd line of section + // allocate table arrays for file values + + fgets(line,MAXLINE,fp); + param_extract(tb,line); + tb2->ninput = tb->ninput; + memory->create(tb->rfile,tb->ninput,"eos:rfile"); + memory->create(tb->efile,tb->ninput,"eos:efile"); + memory->create(tb2->rfile,tb2->ninput,"eos:rfile"); + memory->create(tb2->efile,tb2->ninput,"eos:efile"); + + for (int ispecies=1;ispeciesninput = tb->ninput; + tbl2->ninput = tb2->ninput; + + memory->create(tbl->rfile,tbl->ninput,"eos:rfile"); + memory->create(tbl->efile,tbl->ninput,"eos:efile"); + memory->create(tbl2->rfile,tbl2->ninput,"eos:rfile"); + memory->create(tbl2->efile,tbl2->ninput,"eos:efile"); + } + + // read r,e table values from file + + double rtmp, tmpE; + int nwords; + char * word; + int ispecies; + int ninputs = tb->ninput; + + fgets(line,MAXLINE,fp); + for (int i = 0; i < ninputs; i++) { + fgets(line,MAXLINE,fp); + + nwords = atom->count_words(line); + if(nwords != nspecies+2){ + printf("nwords=%d nspecies=%d\n",nwords,nspecies); + error->all(FLERR,"Illegal fix eos/table/rx command"); + } + nwords = 0; + word = strtok(line," \t\n\r\f"); + word = strtok(NULL," \t\n\r\f"); + rtmp = atof(word); + + for (int icolumn=0;icolumnrfile[i] = rtmp; + tbl->efile[i] = tmpE; + + tbl2->rfile[i] = tmpE; + tbl2->efile[i] = rtmp; + } + } + fclose(fp); +} + +/* ---------------------------------------------------------------------- + build spline representation of e,f over entire range of read-in table + this function sets these values in e2file +------------------------------------------------------------------------- */ + +void FixEOStableRX::spline_table(Table *tb) +{ + memory->create(tb->e2file,tb->ninput,"eos:e2file"); + + double ep0 = 0.0; + double epn = 0.0; + spline(tb->rfile,tb->efile,tb->ninput,ep0,epn,tb->e2file); + +} + +/* ---------------------------------------------------------------------- + compute r,e,f vectors from splined values +------------------------------------------------------------------------- */ + +void FixEOStableRX::compute_table(Table *tb) +{ + // delta = table spacing for N-1 bins + int tlm1 = tablength-1; + + tb->delta = (tb->hi - tb->lo)/ tlm1; + tb->invdelta = 1.0/tb->delta; + tb->deltasq6 = tb->delta*tb->delta / 6.0; + + // N-1 evenly spaced bins in r from min to max + // r,e = value at lower edge of bin + // de values = delta values of e,f + // r,e are N in length so de arrays can compute difference + + memory->create(tb->r,tablength,"eos:r"); + memory->create(tb->e,tablength,"eos:e"); + memory->create(tb->de,tlm1,"eos:de"); + memory->create(tb->e2,tablength,"eos:e2"); + + double a; + for (int i = 0; i < tablength; i++) { + a = tb->lo + i*tb->delta; + tb->r[i] = a; + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,a); + } + + for (int i = 0; i < tlm1; i++) { + tb->de[i] = tb->e[i+1] - tb->e[i]; + } +} + +/* ---------------------------------------------------------------------- + extract attributes from parameter line in table section + format of line: N value + N is required, other params are optional +------------------------------------------------------------------------- */ + +void FixEOStableRX::param_extract(Table *tb, char *line) +{ + int ispecies; + ncolumn = 0; + + eosSpecies = new int[nspecies]; + for (ispecies = 0; ispecies < nspecies; ispecies++) + eosSpecies[ispecies] = -1; + + tb->ninput = 0; + + char *word = strtok(line," \t\n\r\f"); + if (strcmp(word,"N") == 0) { + word = strtok(NULL," \t\n\r\f"); + tb->ninput = atoi(word); + } else + error->one(FLERR,"Invalid keyword in fix eos/table/rx parameters"); + word = strtok(NULL," \t\n\r\f"); + + while (word) { + for (ispecies = 0; ispecies < nspecies; ispecies++) + if (strcmp(word,&atom->dname[ispecies][0]) == 0){ + eosSpecies[ncolumn] = ispecies; + ncolumn++; + break; + } + if (ispecies == nspecies){ + printf("name=%s not found in species list\n",word); + error->one(FLERR,"Invalid keyword in fix eos/table/rx parameters"); + } + word = strtok(NULL," \t\n\r\f"); + } + + for (int icolumn = 0; icolumn < ncolumn; icolumn++) + if(eosSpecies[icolumn]==-1) + error->one(FLERR,"EOS data is missing from fix eos/table/rx tabe"); + if(ncolumn != nspecies){ + printf("ncolumns=%d nspecies=%d\n",ncolumn,nspecies); + error->one(FLERR,"The number of columns in fix eos/table/rx does not match the number of species"); + } + if (tb->ninput == 0) error->one(FLERR,"fix eos/table/rx parameters did not set N"); + +} + +/* ---------------------------------------------------------------------- + broadcast read-in table info from proc 0 to other procs + this function communicates these values in Table: + ninput,rfile,efile +------------------------------------------------------------------------- */ + +void FixEOStableRX::bcast_table(Table *tb) +{ + MPI_Bcast(&tb->ninput,1,MPI_INT,0,world); + + int me; + MPI_Comm_rank(world,&me); + if (me > 0) { + memory->create(tb->rfile,tb->ninput,"eos:rfile"); + memory->create(tb->efile,tb->ninput,"eos:efile"); + } + + MPI_Bcast(tb->rfile,tb->ninput,MPI_DOUBLE,0,world); + MPI_Bcast(tb->efile,tb->ninput,MPI_DOUBLE,0,world); +} + +/* ---------------------------------------------------------------------- + spline and splint routines modified from Numerical Recipes +------------------------------------------------------------------------- */ + +void FixEOStableRX::spline(double *x, double *y, int n, + double yp1, double ypn, double *y2) +{ + int i,k; + double p,qn,sig,un; + double *u = new double[n]; + + if (yp1 > 0.99e30) y2[0] = u[0] = 0.0; + else { + y2[0] = -0.5; + u[0] = (3.0/(x[1]-x[0])) * ((y[1]-y[0]) / (x[1]-x[0]) - yp1); + } + for (i = 1; i < n-1; i++) { + sig = (x[i]-x[i-1]) / (x[i+1]-x[i-1]); + p = sig*y2[i-1] + 2.0; + y2[i] = (sig-1.0) / p; + u[i] = (y[i+1]-y[i]) / (x[i+1]-x[i]) - (y[i]-y[i-1]) / (x[i]-x[i-1]); + u[i] = (6.0*u[i] / (x[i+1]-x[i-1]) - sig*u[i-1]) / p; + } + if (ypn > 0.99e30) qn = un = 0.0; + else { + qn = 0.5; + un = (3.0/(x[n-1]-x[n-2])) * (ypn - (y[n-1]-y[n-2]) / (x[n-1]-x[n-2])); + } + y2[n-1] = (un-qn*u[n-2]) / (qn*y2[n-2] + 1.0); + for (k = n-2; k >= 0; k--) y2[k] = y2[k]*y2[k+1] + u[k]; + + delete [] u; +} + +/* ---------------------------------------------------------------------- */ + +double FixEOStableRX::splint(double *xa, double *ya, double *y2a, int n, double x) +{ + int klo,khi,k; + double h,b,a,y; + + klo = 0; + khi = n-1; + while (khi-klo > 1) { + k = (khi+klo) >> 1; + if (xa[k] > x) khi = k; + else klo = k; + } + h = xa[khi]-xa[klo]; + a = (xa[khi]-x) / h; + b = (x-xa[klo]) / h; + y = a*ya[klo] + b*ya[khi] + + ((a*a*a-a)*y2a[klo] + (b*b*b-b)*y2a[khi]) * (h*h)/6.0; + return y; +} + +/* ---------------------------------------------------------------------- + calculate potential ui at temperature thetai +------------------------------------------------------------------------- */ + +void FixEOStableRX::energy_lookup(int id, double thetai, double &ui) +{ + int itable; + double fraction, uTmp, nTotal; + + ui = double(0.0); + nTotal = double(0.0); + for(int ispecies=0;ispecieslo); + thetai = MIN(thetai,tb->hi); + + if (tabstyle == LINEAR) { + itable = static_cast ((thetai - tb->lo) * tb->invdelta); + fraction = (thetai - tb->r[itable]) * tb->invdelta; + uTmp = tb->e[itable] + fraction*tb->de[itable]; + + uTmp += dHf[ispecies]; + // mol fraction form: + ui += atom->dvector[ispecies][id]*uTmp; + nTotal += atom->dvector[ispecies][id]; + } + } + ui = ui - double(nTotal+1.5)*force->boltz*thetai; +} + +/* ---------------------------------------------------------------------- + calculate temperature thetai at energy ui +------------------------------------------------------------------------- */ + +void FixEOStableRX::temperature_lookup(int id, double ui, double &thetai) +{ + int it; + double t1,t2,u1,u2,f1,f2; + double maxit = 100; + double temp; + + + // Store the current thetai in t1 + t1 = thetai; + + // Compute u1 at thetai + energy_lookup(id,t1,u1); + + // Compute f1 + f1 = u1 - ui; + + // Compute guess of t2 + t2 = (double(1.0) + double(0.001))*t1; + + // Compute u2 at t2 + energy_lookup(id,t2,u2); + + // Compute f1 + f2 = u2 - ui; + + // Apply the Secant Method + for(it=0; itone(FLERR,"Divide by zero in secant solver."); + + temp = t2 - f2*(t2-t1)/(f2-f1); + if(fabs(temp-t2) < 1e-6) break; + f1 = f2; + t1 = t2; + t2 = temp; + energy_lookup(id,t2,u2); + f2 = u2 - ui; + } + if(it==maxit){ + printf("id=%d ui=%lf t1=%lf t2=%lf f1=%lf f2=%lf\n",id,ui,t1,t2,f1,f2); + error->one(FLERR,"Maxit exceeded in secant solver"); + } + thetai = temp; +} + +/* ---------------------------------------------------------------------- */ + +int FixEOStableRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int ii,jj,m; + double *uChem = atom->uChem; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + m = 0; + for (ii = 0; ii < n; ii++) { + jj = list[ii]; + buf[m++] = uChem[jj]; + buf[m++] = uCG[jj]; + buf[m++] = uCGnew[jj]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::unpack_forward_comm(int n, int first, double *buf) +{ + int ii,m,last; + double *uChem = atom->uChem; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + m = 0; + last = first + n ; + for (ii = first; ii < last; ii++){ + uChem[ii] = buf[m++]; + uCG[ii] = buf[m++]; + uCGnew[ii] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int FixEOStableRX::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = uCG[i]; + buf[m++] = uCGnew[i]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixEOStableRX::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + + uCG[j] += buf[m++]; + uCGnew[j] += buf[m++]; + } +} diff --git a/src/USER-DPD/fix_eos_table_rx.h b/src/USER-DPD/fix_eos_table_rx.h new file mode 100644 index 0000000000..bb2e507c44 --- /dev/null +++ b/src/USER-DPD/fix_eos_table_rx.h @@ -0,0 +1,153 @@ +/* ---------------------------------------------------------------------- + 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 FIX_CLASS + +FixStyle(eos/table/rx,FixEOStableRX) + +#else + +#ifndef LMP_FIX_EOS_TABLE_RX_H +#define LMP_FIX_EOS_TABLE_RX_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixEOStableRX : public Fix { + public: + FixEOStableRX(class LAMMPS *, int, char **); + virtual ~FixEOStableRX(); + int setmask(); + void setup(int); + virtual void init(); + virtual void post_integrate(); + virtual void end_of_step(); + void energy_lookup(int, double, double &); + void temperature_lookup(int, double, double &); + + protected: + enum{LINEAR}; + + int tabstyle,tablength; + struct Table { + int ninput; + double lo,hi; + double *rfile,*efile; + double *e2file; + double delta,invdelta,deltasq6; + double *r,*e,*de,*e2; + }; + int ntables; + Table *tables, *tables2; + + void allocate(); + void null_table(Table *); + void free_table(Table *); + void read_table(Table *, Table *, char *, char *); + void bcast_table(Table *); + void spline_table(Table *); + void compute_table(Table *); + + void param_extract(Table *, char *); + void spline(double *, double *, int, double, double, double *); + double splint(double *, double *, double *, int, double); + + int nspecies; + + void read_file(char *); + + double *dHf; + + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + int pack_forward_comm(int , int *, double *, int, int *); + void unpack_forward_comm(int , int , double *); + + int *eosSpecies; + int ncolumn; + }; +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: FixEOStableRX requires a fix rx command. + +The fix rx command must come before the pair style command in the input file + +E: There are no rx species specified + +There must be at least one species specified through the fix rx command + +E: Invalid eos/table/rx length + +The eos/table/rx table must have more than one entry. + +E: eos/table/rx values are not increasing + +The equation-of-state must an increasing function + +E: Internal temperature <= zero. + +Self-explanatory. + +E: Cannot open eos table/rx potential file %s + +Self-explanatory. + +E: Incorrect format in eos table/rx file + +Self-explanatory. + +E: Cannot open file %s + +Self-explanatory. + +E: Did not find keyword in table file + +Self-explanatory. + +E: Illegal fix eos/table/rx command + +Incorrect number of arguments specified for the fix eos/table/rx command. + +E: Invalid keyword in fix eos/table/rx parameters + +Self-explanatory. + +E: The number of columns in fix eos/table/rx does not match the number of species. + +Self-explanatory. Check format for fix eos/table/rx file. + +E: fix eos/table/rx parameters did not set N + +The number of table entries was not set in the eos/table/rx file + +E: Divide by zero in secant solver. + +The secant solver failed to find a solution. + +E: Maxit exceeded in secant solver + +The maximum number of interations was exceeded in the secant solver + +*/ diff --git a/src/USER-DPD/fix_rx.cpp b/src/USER-DPD/fix_rx.cpp new file mode 100644 index 0000000000..b31bba0793 --- /dev/null +++ b/src/USER-DPD/fix_rx.cpp @@ -0,0 +1,804 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "fix_rx.h" +#include "atom.h" +#include "error.h" +#include "group.h" +#include "modify.h" +#include "force.h" +#include "memory.h" +#include "comm.h" +#include "update.h" +#include "domain.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "pair_dpd_fdt_energy.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +enum{NONE,HARMONIC}; +enum{LUCY}; + +#define MAXLINE 1024 +#define DELTA 4 + +/* ---------------------------------------------------------------------- */ + +FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg < 6 || narg > 7) error->all(FLERR,"Illegal fix rx command"); + nevery = 1; + + nreactions = maxparam = 0; + params = NULL; + mol2param = NULL; + pairDPDE = NULL; + + // Keep track of the argument list. + int iarg = 3; + + // Read the kinetic file in arg[3]. + kineticsFile = arg[iarg++]; + + // Determine the local temperature averaging method in arg[4]. + wtFlag = 0; + localTempFlag = NONE; + + { + char *word = arg[iarg++]; + if (strcmp(word,"none") == 0) + { + wtFlag = 0; + localTempFlag = NONE; + } + else if (strcmp(word,"lucy") == 0) + { + wtFlag = LUCY; + localTempFlag = HARMONIC; + } + else + error->all(FLERR,"Illegal fix rx local temperature weighting technique"); + } + + // Determine the ODE solver/stepper strategy in arg[5]. + odeIntegrationFlag = ODE_LAMMPS_RK4; + + { + char *word = arg[iarg++]; + if (strcmp(word,"lammps_rk4") == 0 || strcmp(word,"rk4") == 0) + odeIntegrationFlag = ODE_LAMMPS_RK4; + else + error->all(FLERR,"Illegal ODE integration type"); + } + + /// Set the default ODE parameters here. Modify with arg[6]. + /// RK4: This is the # of steps that will be taken with h = dt_dpd / minSteps; + minSteps = 1; + + if (odeIntegrationFlag == ODE_LAMMPS_RK4 && narg==7) + { + // Only one option: the # of steps to take. + char *word = arg[iarg++]; + minSteps = atoi( word ); + } +} + +/* ---------------------------------------------------------------------- */ + +FixRX::~FixRX() +{ + // De-Allocate memory to prevent memory leak + for (int ii = 0; ii < nreactions; ii++){ + delete [] stoich[ii]; + delete [] stoichReactants[ii]; + delete [] stoichProducts[ii]; + } + delete [] stoich; + delete [] stoichReactants; + delete [] stoichProducts; + delete [] kR; +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::post_constructor() +{ + int maxspecies = 1000; + int nUniqueSpecies = 0; + bool match; + + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style,"property/atom",13) == 0) + error->all(FLERR,"fix rx cannot be combined with fix property/atom"); + + char **tmpspecies = new char*[maxspecies]; + for(int jj=0; jj < maxspecies; jj++) + tmpspecies[jj] = NULL; + + // open file on proc 0 + + FILE *fp; + fp = NULL; + if (comm->me == 0) { + fp = force->open_potential(kineticsFile); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open rx file %s",kineticsFile); + error->one(FLERR,str); + } + } + + // Assign species names to tmpspecies array and determine the number of unique species + + int n,nwords; + char line[MAXLINE],*ptr; + int eof = 0; + char * word; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // words = ptrs to all words in line + + nwords = 0; + word = strtok(line," \t\n\r\f"); + while (word != NULL){ + word = strtok(NULL, " \t\n\r\f"); + match=false; + for(int jj=0;jj=maxspecies) + error->all(FLERR,"Exceeded the maximum number of species permitted in fix rx."); + tmpspecies[nUniqueSpecies] = new char[strlen(word)]; + strcpy(tmpspecies[nUniqueSpecies],word); + nUniqueSpecies++; + } + word = strtok(NULL, " \t\n\r\f"); + if(strcmp(word,"+") != 0 && strcmp(word,"=") != 0) break; + word = strtok(NULL, " \t\n\r\f"); + } + } + atom->nspecies_dpd = nUniqueSpecies; + nspecies = atom->nspecies_dpd; + + // new id = fix-ID + FIX_STORE_ATTRIBUTE + // new fix group = group for this fix + + id_fix_species = NULL; + id_fix_species_old = NULL; + + n = strlen(id) + strlen("_SPECIES") + 1; + id_fix_species = new char[n]; + n = strlen(id) + strlen("_SPECIES_OLD") + 1; + id_fix_species_old = new char[n]; + + strcpy(id_fix_species,id); + strcat(id_fix_species,"_SPECIES"); + strcpy(id_fix_species_old,id); + strcat(id_fix_species_old,"_SPECIES_OLD"); + + char **newarg = new char*[nspecies+5]; + char **newarg2 = new char*[nspecies+5]; + newarg[0] = id_fix_species; + newarg[1] = group->names[igroup]; + newarg[2] = (char *) "property/atom"; + newarg2[0] = id_fix_species_old; + newarg2[1] = group->names[igroup]; + newarg2[2] = (char *) "property/atom"; + for(int ii=0; iiadd_fix(nspecies+5,newarg); + fix_species = (FixPropertyAtom *) modify->fix[modify->nfix-1]; + + modify->add_fix(nspecies+5,newarg2); + fix_species_old = (FixPropertyAtom *) modify->fix[modify->nfix-1]; + + if(nspecies==0) error->all(FLERR,"There are no rx species specified."); + + for(int jj=0;jjpair_match("dpd/fdt/energy",1); + if (pairDPDE == NULL) + error->all(FLERR,"Must use pair_style dpd/fdt/energy with fix rx"); + + bool eos_flag = false; + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"eos/table/rx") == 0) eos_flag = true; + if(!eos_flag) error->all(FLERR,"fix rx requires fix eos/table/rx to be specified"); +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::setup_pre_force(int vflag) +{ + int nlocal = atom->nlocal; + int nghost = atom->nghost; + int *mask = atom->mask; + int newton_pair = force->newton_pair; + double tmp; + int ii; + + if(localTempFlag){ + if (newton_pair) { + dpdThetaLocal = new double[nlocal+nghost]; + for (ii = 0; ii < nlocal+nghost; ii++) + dpdThetaLocal[ii] = double(0.0); + } else { + dpdThetaLocal = new double[nlocal]; + for (ii = 0; ii < nlocal; ii++) + dpdThetaLocal[ii] = double(0.0); + } + computeLocalTemperature(); + } + + for (int id = 0; id < nlocal; id++) + for (int ispecies=0; ispeciesdvector[ispecies][id]; + atom->dvector[ispecies+nspecies][id] = tmp; + } + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + + // Set the reaction rate constants to zero: no reactions occur at step 0 + for(int irxn=0;irxnforward_comm_fix(this); + if(localTempFlag) delete [] dpdThetaLocal; +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::pre_force(int vflag) +{ + int nlocal = atom->nlocal; + int nghost = atom->nghost; + int *mask = atom->mask; + double *dpdTheta = atom->dpdTheta; + int newton_pair = force->newton_pair; + int ii; + double theta; + + if(localTempFlag){ + if (newton_pair) { + dpdThetaLocal = new double[nlocal+nghost]; + for (ii = 0; ii < nlocal+nghost; ii++) + dpdThetaLocal[ii] = double(0.0); + } else { + dpdThetaLocal = new double[nlocal]; + for (ii = 0; ii < nlocal; ii++) + dpdThetaLocal[ii] = double(0.0); + } + computeLocalTemperature(); + } + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + if(localTempFlag) theta = dpdThetaLocal[i]; + else theta=dpdTheta[i]; + + //Compute the reaction rate constants + for(int irxn=0;irxnboltz/theta); + if(odeIntegrationFlag==ODE_LAMMPS_RK4) rk4(i); + } + + // Communicate the updated momenta and velocities to all nodes + comm->forward_comm_fix(this); + if(localTempFlag) delete [] dpdThetaLocal; +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::read_file(char *file) +{ + nreactions = 0; + + // open file on proc 0 + + FILE *fp; + fp = NULL; + if (comm->me == 0) { + fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open rx file %s",file); + error->one(FLERR,str); + } + } + + // Count the number of reactions from kinetics file + + int n,nwords,ispecies; + char line[MAXLINE],*ptr; + int eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + nreactions++; + } + + // open file on proc 0 + if (comm->me == 0) fp = force->open_potential(file); + + // read each reaction from kinetics file + eof=0; + char * word; + double tmpStoich; + double sign; + + Arr = new double[nreactions]; + nArr = new double[nreactions]; + Ea = new double[nreactions]; + tempExp = new double[nreactions]; + stoich = new double*[nreactions]; + stoichReactants = new double*[nreactions]; + stoichProducts = new double*[nreactions]; + for (int ii=0;iime == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // words = ptrs to all words in line + + nwords = 0; + word = strtok(line," \t\n\r\f"); + while (word != NULL){ + tmpStoich = atof(word); + word = strtok(NULL, " \t\n\r\f"); + for (ispecies = 0; ispecies < nspecies; ispecies++){ + if (strcmp(word,&atom->dname[ispecies][0]) == 0){ + stoich[nreactions][ispecies] += sign*tmpStoich; + if(signme) { + fprintf(stderr,"%s mol fraction is not found in data file\n",word); + fprintf(stderr,"nspecies=%d ispecies=%d\n",nspecies,ispecies); + } + error->all(FLERR,"Illegal fix rx command"); + } + word = strtok(NULL, " \t\n\r\f"); + if(strcmp(word,"=") == 0) sign = double(1.0); + if(strcmp(word,"+") != 0 && strcmp(word,"=") != 0){ + if(word==NULL) + error->all(FLERR,"Missing parameters in reaction kinetic equation"); + Arr[nreactions] = atof(word); + word = strtok(NULL, " \t\n\r\f"); + if(word==NULL) + error->all(FLERR,"Missing parameters in reaction kinetic equation"); + nArr[nreactions] = atof(word); + word = strtok(NULL, " \t\n\r\f"); + if(word==NULL) + error->all(FLERR,"Missing parameters in reaction kinetic equation"); + Ea[nreactions] = atof(word); + sign = double(-1.0); + break; + } + word = strtok(NULL, " \t\n\r\f"); + } + nreactions++; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::setupParams() +{ + int i,j,n; + + // set mol2param for all combinations + // must be a single exact match to lines read from file + + memory->destroy(mol2param); + memory->create(mol2param,nspecies,"pair:mol2param"); + + for (i = 0; i < nspecies; i++) { + n = -1; + for (j = 0; j < nreactions; j++) { + if (i == params[j].ispecies) { + if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); + n = j; + } + } + mol2param[i] = n; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::rk4(int id) +{ + double *k1 = new double[6*nspecies + nreactions]; + double *k2 = k1 + nspecies; + double *k3 = k2 + nspecies; + double *k4 = k3 + nspecies; + double *y = k4 + nspecies; + double *yp = y + nspecies; + + double *dummyArray = yp + nspecies; // Passed to the rhs function. + + const int numSteps = minSteps; + + const double h = update->dt / double(numSteps); + + // Update ConcOld + for (int ispecies = 0; ispecies < nspecies; ispecies++) + { + const double tmp = atom->dvector[ispecies][id]; + atom->dvector[ispecies+nspecies][id] = tmp; + y[ispecies] = tmp; + } + + // Run the requested steps with h. + for (int step = 0; step < numSteps; step++) + { + // k1 + rhs(0.0,y,k1,dummyArray); + + // k2 + for (int ispecies = 0; ispecies < nspecies; ispecies++) + yp[ispecies] = y[ispecies] + double(0.5)*h*k1[ispecies]; + + rhs(0.0,yp,k2,dummyArray); + + // k3 + for (int ispecies = 0; ispecies < nspecies; ispecies++) + yp[ispecies] = y[ispecies] + double(0.5)*h*k2[ispecies]; + + rhs(0.0,yp,k3,dummyArray); + + // k4 + for (int ispecies = 0; ispecies < nspecies; ispecies++) + yp[ispecies] = y[ispecies] + h*k3[ispecies]; + + rhs(0.0,yp,k4,dummyArray); + + for (int ispecies = 0; ispecies < nspecies; ispecies++) + y[ispecies] += h*(k1[ispecies]/6.0 + k2[ispecies]/3.0 + + k3[ispecies]/3.0 + k4[ispecies]/6.0); + + } // end for (int step... + + // Store the solution back in atom->dvector. + for (int ispecies = 0; ispecies < nspecies; ispecies++){ + if(y[ispecies] < double(-1.0e-10)) + error->one(FLERR,"Computed concentration in RK4 solver is < -1.0e-10"); + else if(y[ispecies] < double(0.0)) + y[ispecies] = double(0.0); + atom->dvector[ispecies][id] = y[ispecies]; + } + delete [] k1; +} + +/* ---------------------------------------------------------------------- */ + +int FixRX::rhs(double t, const double *y, double *dydt, void *params) +{ + double rxnRateLawForward; + double *rxnRateLaw = (double *) params; + double VDPD = domain->xprd * domain->yprd * domain->zprd / atom->natoms; + double concentration; + int nspecies = atom->nspecies_dpd; + + for(int ispecies=0; ispeciesx; + int *type = atom->type; + int nlocal = atom->nlocal; + int nghost = atom->nghost; + int newton_pair = force->newton_pair; + + // local temperature variables + double wij; + double *dpdTheta = atom->dpdTheta; + + // Initialize the local density and local temperature arrays + if (newton_pair) { + sumWeights = new double[nlocal+nghost]; + for (ii = 0; ii < nlocal+nghost; ii++) + sumWeights[ii] = double(0.0); + } else { + sumWeights = new double[nlocal]; + for (ii = 0; ii < nlocal; ii++) + dpdThetaLocal[ii] = double(0.0); + } + + inum = pairDPDE->list->inum; + ilist = pairDPDE->list->ilist; + numneigh = pairDPDE->list->numneigh; + firstneigh = pairDPDE->list->firstneigh; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < pairDPDE->cutsq[itype][jtype]) { + double rcut = sqrt(pairDPDE->cutsq[itype][jtype]); + double rij = sqrt(rsq); + double ratio = rij/rcut; + + // Lucy's Weight Function + if(wtFlag==LUCY){ + wij = (double(1.0)+double(3.0)*ratio) * (double(1.0)-ratio)*(double(1.0)-ratio)*(double(1.0)-ratio); + dpdThetaLocal[i] += wij/dpdTheta[j]; + if (newton_pair || j < nlocal) + dpdThetaLocal[j] += wij/dpdTheta[i]; + } + + sumWeights[i] += wij; + if (newton_pair || j < nlocal) { + sumWeights[j] += wij; + } + + } + } + } + if (newton_pair) comm->reverse_comm_fix(this); + + // self-interaction for local temperature + for (i = 0; i < nlocal; i++){ + + // Lucy Weight Function + if(wtFlag==LUCY){ + wij = double(1.0); + dpdThetaLocal[i] += wij / dpdTheta[i]; + } + sumWeights[i] += wij; + + // Normalized local temperature + dpdThetaLocal[i] = dpdThetaLocal[i] / sumWeights[i]; + + if(localTempFlag == HARMONIC) + dpdThetaLocal[i] = double(1.0) / dpdThetaLocal[i]; + + } + + delete [] sumWeights; +} + +/* ---------------------------------------------------------------------- */ + +int FixRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int ii,jj,m; + double tmp; + + m = 0; + for (ii = 0; ii < n; ii++) { + jj = list[ii]; + for(int ispecies=0;ispeciesdvector[ispecies][jj]; + buf[m++] = tmp; + tmp = atom->dvector[ispecies+nspecies][jj]; + buf[m++] = tmp; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::unpack_forward_comm(int n, int first, double *buf) +{ + int ii,m,last; + double tmp; + + m = 0; + last = first + n ; + for (ii = first; ii < last; ii++){ + for(int ispecies=0;ispeciesdvector[ispecies][ii] = tmp; + tmp = buf[m++]; + atom->dvector[ispecies+nspecies][ii] = tmp; + } + } +} + +/* ---------------------------------------------------------------------- */ + +int FixRX::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++] = dpdThetaLocal[i]; + buf[m++] = sumWeights[i]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixRX::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + + dpdThetaLocal[j] += buf[m++]; + sumWeights[j] += buf[m++]; + } +} diff --git a/src/USER-DPD/fix_rx.h b/src/USER-DPD/fix_rx.h new file mode 100644 index 0000000000..912b75ed5f --- /dev/null +++ b/src/USER-DPD/fix_rx.h @@ -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. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(rx,FixRX) + +#else + +#ifndef LMP_FIX_RX_H +#define LMP_FIX_RX_H + +#include "fix.h" + +typedef int (*fnptr)(double, const double *, double *, void *); +namespace LAMMPS_NS { + +enum { ODE_LAMMPS_RK4 }; + +class FixRX : public Fix { + public: + FixRX(class LAMMPS *, int, char **); + ~FixRX(); + int setmask(); + void post_constructor(); + virtual void init(); + virtual void setup_pre_force(int); + virtual void pre_force(int); + + protected: + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + int pack_forward_comm(int , int *, double *, int, int *); + void unpack_forward_comm(int , int , double *); + + double tmpArg; + + int *mol2param; // mapping from molecule to parameters + int nreactions; // # of stored parameter sets + int maxparam; // max # of parameter sets + struct Param { + double cp; + int ispecies; + char *name; // names of unique molecules and interaction type + }; + Param *params; // parameter set for an I-J-K interaction + + int nspecies; + void read_file(char *); + void setupParams(); + double *Arr, *nArr, *Ea, *tempExp; + double **stoich, **stoichReactants, **stoichProducts; + double *kR; + void rk4(int); + + class PairDPDfdtEnergy *pairDPDE; + double *dpdThetaLocal; + double *sumWeights; + void computeLocalTemperature(); + int localTempFlag,wtFlag,odeIntegrationFlag; + double sigFactor; + + int rhs(double, const double *, double *, void *); + + private: + char *kineticsFile; + char *id_fix_species,*id_fix_species_old; + class FixPropertyAtom *fix_species,*fix_species_old; + + // ODE Parameters + int minSteps; //!< Minimum # of steps for the ODE solver(s). + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: fix rx cannot be combined with fix property/atom + +Self-explanatory + +E: Cannot open rx file %s + +Self-explanatory + +E: Exceeded the maximum number of species permitted in fix rx + +Reduce the number of species in the fix rx reaction kinetics file + +E: There are no rx species specified. + +Self-explanatory + +E: Must use pair_style dpd/fdt/energy with fix rx. + +Self-explanatory + +E: fix rx requires fix eos/table/rx to be specified. + +Self-explanatory + +E: Missing parameters in reaction kinetic equation. + +Self-explanatory + +E: Potential file has duplicate entry. + +Self-explanatory + +E: Computed concentration in RK4 solver is < -1.0e-10. + +Self-explanatory: Adjust settings for the RK4 solver. + +*/ diff --git a/src/USER-DPD/pair_exp6_rx.cpp b/src/USER-DPD/pair_exp6_rx.cpp new file mode 100644 index 0000000000..288d0ca8da --- /dev/null +++ b/src/USER-DPD/pair_exp6_rx.cpp @@ -0,0 +1,961 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_exp6_rx.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neigh_list.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" +#include "modify.h" +#include "fix.h" +#include "float.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define MAXLINE 1024 +#define DELTA 4 + +/* ---------------------------------------------------------------------- */ + +PairExp6rx::PairExp6rx(LAMMPS *lmp) : Pair(lmp) +{ + writedata = 1; + + nspecies = 0; + nparams = maxparam = 0; + params = NULL; + mol2param = NULL; +} + +/* ---------------------------------------------------------------------- */ + +PairExp6rx::~PairExp6rx() +{ + memory->destroy(params); + memory->destroy(mol2param); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairExp6rx::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,evdwlOld,fpair; + double rsq,r2inv,r6inv,forceExp6,factor_lj; + double rCut,rCutInv,rCut2inv,rCut6inv,rCutExp,urc,durc; + double rm2ij,rm6ij; + double r,rexp; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwlOld = 0.0; + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + double alphaOld12_ij, rmOld12_ij, epsilonOld12_ij; + double alphaOld21_ij, rmOld21_ij, epsilonOld21_ij; + double alpha12_ij, rm12_ij, epsilon12_ij; + double alpha21_ij, rm21_ij, epsilon21_ij; + double rminv, buck1, buck2; + double epsilonOld1_i,alphaOld1_i,rmOld1_i; + double epsilonOld1_j,alphaOld1_j,rmOld1_j; + double epsilonOld2_i,alphaOld2_i,rmOld2_i; + double epsilonOld2_j,alphaOld2_j,rmOld2_j; + double epsilon1_i,alpha1_i,rm1_i; + double epsilon1_j,alpha1_j,rm1_j; + double epsilon2_i,alpha2_i,rm2_i; + double epsilon2_j,alpha2_j,rm2_j; + double evdwlOldEXP6_12, evdwlOldEXP6_21; + double evdwlEXP6_12, evdwlEXP6_21, fpairEXP6_12, fpairEXP6_21; + double fractionOld1_i, fractionOld1_j; + double fractionOld2_i, fractionOld2_j; + double fraction1_i, fraction1_j; + double fraction2_i, fraction2_j; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + const double nRep = double(12.0); + const double shift = double(1.05); + double rin1, aRep, uin1, win1, uin1rep, rin1exp, rin6, rin6inv; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + getParamsEXP6(i,epsilon1_i,alpha1_i,rm1_i,fraction1_i,epsilon2_i,alpha2_i,rm2_i,fraction2_i,epsilonOld1_i,alphaOld1_i,rmOld1_i,fractionOld1_i,epsilonOld2_i,alphaOld2_i,rmOld2_i,fractionOld2_i); + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = double(1.0)/rsq; + r6inv = r2inv*r2inv*r2inv; + + r = sqrt(rsq); + + rCut2inv = double(1.0)/cutsq[itype][jtype]; + rCut6inv = rCut2inv*rCut2inv*rCut2inv; + rCut = sqrt(cutsq[itype][jtype]); + rCutInv = double(1.0)/rCut; + + // + // A. Compute the exp-6 potential + // + + // A1. Get alpha, epsilon and rm for particle j + getParamsEXP6(j,epsilon1_j,alpha1_j,rm1_j,fraction1_j,epsilon2_j,alpha2_j,rm2_j,fraction2_j,epsilonOld1_j,alphaOld1_j,rmOld1_j,fractionOld1_j,epsilonOld2_j,alphaOld2_j,rmOld2_j,fractionOld2_j); + + // A2. Apply Lorentz-Berthelot mixing rules for the i-j pair + alphaOld12_ij = sqrt(alphaOld1_i*alphaOld2_j); + rmOld12_ij = 0.5*(rmOld1_i + rmOld2_j); + epsilonOld12_ij = sqrt(epsilonOld1_i*epsilonOld2_j); + alphaOld21_ij = sqrt(alphaOld2_i*alphaOld1_j); + rmOld21_ij = 0.5*(rmOld2_i + rmOld1_j); + epsilonOld21_ij = sqrt(epsilonOld2_i*epsilonOld1_j); + + alpha12_ij = sqrt(alpha1_i*alpha2_j); + rm12_ij = 0.5*(rm1_i + rm2_j); + epsilon12_ij = sqrt(epsilon1_i*epsilon2_j); + alpha21_ij = sqrt(alpha2_i*alpha1_j); + rm21_ij = 0.5*(rm2_i + rm1_j); + epsilon21_ij = sqrt(epsilon2_i*epsilon1_j); + + if(rmOld12_ij!=double(0.0) && rmOld21_ij!=double(0.0)){ + if(alphaOld21_ij == double(6.0) || alphaOld12_ij == double(6.0)) + error->all(FLERR,"alpha_ij is 6.0 in pair exp6"); + + // A3. Compute some convenient quantities for evaluating the force + rminv = 1.0/rmOld12_ij; + buck1 = epsilonOld12_ij / (alphaOld12_ij - 6.0); + rexp = expValue(alphaOld12_ij*(1.0-r*rminv)); + rm2ij = rmOld12_ij*rmOld12_ij; + rm6ij = rm2ij*rm2ij*rm2ij; + + // Compute the shifted potential + rCutExp = expValue(alphaOld12_ij*(1.0-rCut*rminv)); + buck2 = 6.0*alphaOld12_ij; + urc = buck1*(6.0*rCutExp - alphaOld12_ij*rm6ij*rCut6inv); + durc = -buck1*buck2*(rCutExp* rminv - rCutInv*rm6ij*rCut6inv); + rin1 = shift*rmOld12_ij*func_rin(alphaOld12_ij); + if(r < rin1){ + rin6 = rin1*rin1*rin1*rin1*rin1*rin1; + rin6inv = double(1.0)/rin6; + + rin1exp = expValue(alphaOld12_ij*(1.0-rin1*rminv)); + + uin1 = buck1*(6.0*rin1exp - alphaOld12_ij*rm6ij*rin6inv) - urc - durc*(rin1-rCut); + + win1 = buck1*buck2*(rin1*rin1exp*rminv - rm6ij*rin6inv) - rin1*durc; + + aRep = double(-1.0)*win1*pow(rin1,nRep)/nRep; + + uin1rep = aRep/pow(rin1,nRep); + + evdwlOldEXP6_12 = uin1 - uin1rep + aRep/pow(r,nRep); + + } else { + evdwlOldEXP6_12 = buck1*(6.0*rexp - alphaOld12_ij*rm6ij*r6inv) - urc - durc*(r-rCut); + } + + // A3. Compute some convenient quantities for evaluating the force + rminv = 1.0/rmOld21_ij; + buck1 = epsilonOld21_ij / (alphaOld21_ij - 6.0); + buck2 = 6.0*alphaOld21_ij; + rexp = expValue(alphaOld21_ij*(1.0-r*rminv)); + rm2ij = rmOld21_ij*rmOld21_ij; + rm6ij = rm2ij*rm2ij*rm2ij; + + // Compute the shifted potential + rCutExp = expValue(alphaOld21_ij*(1.0-rCut*rminv)); + buck2 = 6.0*alphaOld21_ij; + urc = buck1*(6.0*rCutExp - alphaOld21_ij*rm6ij*rCut6inv); + durc = -buck1*buck2*(rCutExp* rminv - rCutInv*rm6ij*rCut6inv); + rin1 = shift*rmOld21_ij*func_rin(alphaOld21_ij); + + if(r < rin1){ + rin6 = rin1*rin1*rin1*rin1*rin1*rin1; + rin6inv = double(1.0)/rin6; + + rin1exp = expValue(alphaOld21_ij*(1.0-rin1*rminv)); + + uin1 = buck1*(6.0*rin1exp - alphaOld21_ij*rm6ij*rin6inv) - urc - durc*(rin1-rCut); + + win1 = buck1*buck2*(rin1*rin1exp*rminv - rm6ij*rin6inv) - rin1*durc; + + aRep = double(-1.0)*win1*pow(rin1,nRep)/nRep; + + uin1rep = aRep/pow(rin1,nRep); + + evdwlOldEXP6_21 = uin1 - uin1rep + aRep/pow(r,nRep); + + } else { + evdwlOldEXP6_21 = buck1*(6.0*rexp - alphaOld21_ij*rm6ij*r6inv) - urc - durc*(r-rCut); + } + + if (strcmp(site1,site2) == 0) + evdwlOld = sqrt(fractionOld1_i*fractionOld2_j)*evdwlOldEXP6_12; + else + evdwlOld = sqrt(fractionOld1_i*fractionOld2_j)*evdwlOldEXP6_12 + sqrt(fractionOld2_i*fractionOld1_j)*evdwlOldEXP6_21; + + evdwlOld *= factor_lj; + + uCG[i] += double(0.5)*evdwlOld; + uCG[j] += double(0.5)*evdwlOld; + } + + if(rm12_ij!=double(0.0) && rm21_ij!=double(0.0)){ + if(alpha21_ij == double(6.0) || alpha12_ij == double(6.0)) + error->all(FLERR,"alpha_ij is 6.0 in pair exp6"); + + // A3. Compute some convenient quantities for evaluating the force + rminv = 1.0/rm12_ij; + buck1 = epsilon12_ij / (alpha12_ij - 6.0); + buck2 = 6.0*alpha12_ij; + rexp = expValue(alpha12_ij*(1.0-r*rminv)); + rm2ij = rm12_ij*rm12_ij; + rm6ij = rm2ij*rm2ij*rm2ij; + + // Compute the shifted potential + rCutExp = expValue(alpha12_ij*(1.0-rCut*rminv)); + urc = buck1*(6.0*rCutExp - alpha12_ij*rm6ij*rCut6inv); + durc = -buck1*buck2*(rCutExp*rminv - rCutInv*rm6ij*rCut6inv); + rin1 = shift*rm12_ij*func_rin(alpha12_ij); + + if(r < rin1){ + rin6 = rin1*rin1*rin1*rin1*rin1*rin1; + rin6inv = double(1.0)/rin6; + + rin1exp = expValue(alpha12_ij*(1.0-rin1*rminv)); + + uin1 = buck1*(6.0*rin1exp - alpha12_ij*rm6ij*rin6inv) - urc - durc*(rin1-rCut); + + win1 = buck1*buck2*(rin1*rin1exp*rminv - rm6ij*rin6inv) - rin1*durc; + + aRep = double(-1.0)*win1*pow(rin1,nRep)/nRep; + + uin1rep = aRep/pow(rin1,nRep); + + evdwlEXP6_12 = uin1 - uin1rep + aRep/pow(r,nRep); + + forceExp6 = double(-1.0)*nRep*aRep/pow(r,nRep); + fpairEXP6_12 = factor_lj*forceExp6*r2inv; + + } else { + + // A4. Compute the exp-6 force and energy + forceExp6 = buck1*buck2*(r*rexp*rminv - rm6ij*r6inv) + r*durc; + fpairEXP6_12 = factor_lj*forceExp6*r2inv; + evdwlEXP6_12 = buck1*(6.0*rexp - alpha12_ij*rm6ij*r6inv) - urc - durc*(r-rCut); + } + + rminv = 1.0/rm21_ij; + buck1 = epsilon21_ij / (alpha21_ij - 6.0); + buck2 = 6.0*alpha21_ij; + rexp = expValue(alpha21_ij*(1.0-r*rminv)); + rm2ij = rm21_ij*rm21_ij; + rm6ij = rm2ij*rm2ij*rm2ij; + + // Compute the shifted potential + rCutExp = expValue(alpha21_ij*(1.0-rCut*rminv)); + urc = buck1*(6.0*rCutExp - alpha21_ij*rm6ij*rCut6inv); + durc = -buck1*buck2*(rCutExp*rminv - rCutInv*rm6ij*rCut6inv); + rin1 = shift*rm21_ij*func_rin(alpha21_ij); + + if(r < rin1){ + rin6 = rin1*rin1*rin1*rin1*rin1*rin1; + rin6inv = double(1.0)/rin6; + + rin1exp = expValue(alpha21_ij*(1.0-rin1*rminv)); + + uin1 = buck1*(6.0*rin1exp - alpha21_ij*rm6ij*rin6inv) - urc - durc*(rin1-rCut); + + win1 = buck1*buck2*(rin1*rin1exp*rminv - rm6ij*rin6inv) - rin1*durc; + + aRep = double(-1.0)*win1*pow(rin1,nRep)/nRep; + + uin1rep = aRep/pow(rin1,nRep); + + evdwlEXP6_21 = uin1 - uin1rep + aRep/pow(r,nRep); + + forceExp6 = double(-1.0)*nRep*aRep/pow(r,nRep); + fpairEXP6_21 = factor_lj*forceExp6*r2inv; + + } else { + + // A4. Compute the exp-6 force and energy + forceExp6 = buck1*buck2*(r*rexp*rminv - rm6ij*r6inv) + r*durc; + fpairEXP6_21 = factor_lj*forceExp6*r2inv; + evdwlEXP6_21 = buck1*(6.0*rexp - alpha21_ij*rm6ij*r6inv) - urc - durc*(r-rCut); + } + + // + // Apply Mixing Rule to get the overall force for the CG pair + // + if (strcmp(site1,site2) == 0) fpair = sqrt(fractionOld1_i*fractionOld2_j)*fpairEXP6_12; + else fpair = sqrt(fractionOld1_i*fractionOld2_j)*fpairEXP6_12 + sqrt(fractionOld2_i*fractionOld1_j)*fpairEXP6_21; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (strcmp(site1,site2) == 0) + evdwl = sqrt(fraction1_i*fraction2_j)*evdwlEXP6_12; + else + evdwl = sqrt(fraction1_i*fraction2_j)*evdwlEXP6_12 + sqrt(fraction2_i*fraction1_j)*evdwlEXP6_21; + evdwl *= factor_lj; + + uCGnew[i] += double(0.5)*evdwl; + uCGnew[j] += double(0.5)*evdwl; + evdwl = evdwlOld; + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } + } + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairExp6rx::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut,n+1,n+1,"pair:cut_lj"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairExp6rx::settings(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + + cut_global = force->numeric(FLERR,arg[0]); + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i+1; j <= atom->ntypes; j++) + if (setflag[i][j]) cut[i][j] = cut_global; + } + + allocated = 0; + +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairExp6rx::coeff(int narg, char **arg) +{ + if (narg < 7 || narg > 8) error->all(FLERR,"Incorrect args for pair coefficients"); + + bool rx_flag = false; + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (!rx_flag) error->all(FLERR,"PairExp6rx requires a fix rx command."); + + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + int n; + force->bounds(arg[0],atom->ntypes,ilo,ihi); + force->bounds(arg[1],atom->ntypes,jlo,jhi); + + nspecies = atom->nspecies_dpd; + if(nspecies==0) error->all(FLERR,"There are no rx species specified."); + read_file(arg[2]); + + n = strlen(arg[3]) + 1; + site1 = new char[n]; + strcpy(site1,arg[3]); + + int ispecies; + for (ispecies = 0; ispecies < nspecies; ispecies++){ + if (strcmp(site1,&atom->dname[ispecies][0]) == 0) break; + } + if (ispecies == nspecies && strcmp(site1,"1fluid") != 0) + error->all(FLERR,"Site1 name not recognized in pair coefficients"); + + n = strlen(arg[4]) + 1; + site2 = new char[n]; + strcpy(site2,arg[4]); + + for (ispecies = 0; ispecies < nspecies; ispecies++){ + if (strcmp(site2,&atom->dname[ispecies][0]) == 0) break; + } + if (ispecies == nspecies && strcmp(site2,"1fluid") != 0) + error->all(FLERR,"Site2 name not recognized in pair coefficients"); + + fuchslinR = force->numeric(FLERR,arg[5]); + fuchslinEpsilon = force->numeric(FLERR,arg[6]); + + setup(); + + double cut_one = cut_global; + if (narg == 8) cut_one = force->numeric(FLERR,arg[7]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + cut[i][j] = cut_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairExp6rx::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- */ + +void PairExp6rx::read_file(char *file) +{ + int params_per_line = 5; + char **words = new char*[params_per_line+1]; + + memory->sfree(params); + params = NULL; + nparams = maxparam = 0; + + // open file on proc 0 + + FILE *fp; + fp = NULL; + if (comm->me == 0) { + fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open exp6/rx potential file %s",file); + error->one(FLERR,str); + } + } + + // read each set of params from potential file + // one set of params can span multiple lines + + int n,nwords,ispecies; + char line[MAXLINE],*ptr; + int eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // concatenate additional lines until have params_per_line words + + while (nwords < params_per_line) { + n = strlen(line); + if (comm->me == 0) { + ptr = fgets(&line[n],MAXLINE-n,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + } + + if (nwords != params_per_line) + error->all(FLERR,"Incorrect format in exp6/rx potential file"); + + // words = ptrs to all words in line + + nwords = 0; + words[nwords++] = strtok(line," \t\n\r\f"); + while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + + for (ispecies = 0; ispecies < nspecies; ispecies++) + if (strcmp(words[0],&atom->dname[ispecies][0]) == 0) break; + if (ispecies == nspecies) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ispecies = ispecies; + + n = strlen(&atom->dname[ispecies][0]) + 1; + params[nparams].name = new char[n]; + strcpy(params[nparams].name,&atom->dname[ispecies][0]); + + n = strlen(words[1]) + 1; + params[nparams].potential = new char[n]; + strcpy(params[nparams].potential,words[1]); + if (strcmp(params[nparams].potential,"exp6") == 0){ + params[nparams].alpha = atof(words[2]); + params[nparams].epsilon = atof(words[3]); + params[nparams].rm = atof(words[4]); + if (params[nparams].epsilon <= 0.0 || params[nparams].rm <= 0.0 || + params[nparams].alpha < 0.0) + error->all(FLERR,"Illegal exp6/rx parameters. Rm and Epsilon must be greater than zero. Alpha cannot be negative."); + } else { + error->all(FLERR,"Illegal exp6/rx parameters. Interaction potential does not exist."); + } + nparams++; + } + + delete [] words; +} + +/* ---------------------------------------------------------------------- */ + +void PairExp6rx::setup() +{ + int i,j,n; + + // set mol2param for all combinations + // must be a single exact match to lines read from file + + memory->destroy(mol2param); + memory->create(mol2param,nspecies,"pair:mol2param"); + + for (i = 0; i < nspecies; i++) { + n = -1; + for (j = 0; j < nparams; j++) { + if (i == params[j].ispecies) { + if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); + n = j; + } + } + mol2param[i] = n; + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairExp6rx::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&cut[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairExp6rx::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&cut[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairExp6rx::write_restart_settings(FILE *fp) +{ + fwrite(&cut_global,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairExp6rx::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_global,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + } + MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- */ + +void PairExp6rx::getParamsEXP6(int id,double &epsilon1,double &alpha1,double &rm1, double &fraction1,double &epsilon2,double &alpha2,double &rm2,double &fraction2,double &epsilon1_old,double &alpha1_old,double &rm1_old, double &fraction1_old,double &epsilon2_old,double &alpha2_old,double &rm2_old,double &fraction2_old) +{ + int iparam, jparam; + double rmi, rmj, rmij, rm3ij; + double epsiloni, epsilonj, epsilonij; + double alphai, alphaj, alphaij; + double epsilon_old, rm3_old, alpha_old; + double epsilon, rm3, alpha; + double fractionOFA, fractionOFA_old; + double nTotalOFA, nTotalOFA_old; + double nTotal, nTotal_old; + double xMolei, xMolej, xMolei_old, xMolej_old; + + rm3 = double(0.0); + epsilon = double(0.0); + alpha = double(0.0); + epsilon_old = double(0.0); + rm3_old = double(0.0); + alpha_old = double(0.0); + fractionOFA = double(0.0); + fractionOFA_old = double(0.0); + nTotalOFA = double(0.0); + nTotalOFA_old = double(0.0); + nTotal = double(0.0); + nTotal_old = double(0.0); + + // Compute the total number of molecules in the old and new CG particle as well as the total number of molecules in the fluid portion of the old and new CG particle + for (int ispecies = 0; ispecies < nspecies; ispecies++){ + nTotal += atom->dvector[ispecies][id]; + nTotal_old += atom->dvector[ispecies+nspecies][id]; + + iparam = mol2param[ispecies]; + if (iparam < 0 || strcmp(params[iparam].potential,"exp6") != 0) continue; + if (strcmp(site1,"1fluid") == 0 || strcmp(site2,"1fluid") == 0) { + if (strcmp(site1,params[iparam].name) == 0 || strcmp(site2,params[iparam].name) == 0) continue; + nTotalOFA_old += atom->dvector[ispecies+nspecies][id]; + nTotalOFA += atom->dvector[ispecies][id]; + } + } + if(nTotal < 1e-8 || nTotal_old < 1e-8) + error->all(FLERR,"The number of molecules in CG particle is less than 1e-8."); + + // Compute the mole fraction of molecules within the fluid portion of the particle (One Fluid Approximation) + fractionOFA_old = nTotalOFA_old / nTotal_old; + fractionOFA = nTotalOFA / nTotal; + + for (int ispecies = 0; ispecies < nspecies; ispecies++) { + iparam = mol2param[ispecies]; + if (iparam < 0 || strcmp(params[iparam].potential,"exp6") != 0) continue; + + // If Site1 matches a pure species, then grab the parameters + if (strcmp(site1,params[iparam].name) == 0){ + rm1_old = params[iparam].rm; + rm1 = params[iparam].rm; + epsilon1_old = params[iparam].epsilon; + epsilon1 = params[iparam].epsilon; + alpha1_old = params[iparam].alpha; + alpha1 = params[iparam].alpha; + + // Compute the mole fraction of Site1 + fraction1_old = atom->dvector[ispecies+nspecies][id]/nTotal_old; + fraction1 = atom->dvector[ispecies][id]/nTotal; + } + + // If Site2 matches a pure species, then grab the parameters + if (strcmp(site2,params[iparam].name) == 0){ + rm2_old = params[iparam].rm; + rm2 = params[iparam].rm; + epsilon2_old = params[iparam].epsilon; + epsilon2 = params[iparam].epsilon; + alpha2_old = params[iparam].alpha; + alpha2 = params[iparam].alpha; + + // Compute the mole fraction of Site2 + fraction2_old = atom->dvector[ispecies+nspecies][id]/nTotal_old; + fraction2 = atom->dvector[ispecies][id]/nTotal; + } + + // If Site1 or Site2 matches is a fluid, then compute the paramters + if (strcmp(site1,"1fluid") == 0 || strcmp(site2,"1fluid") == 0) { + if (strcmp(site1,params[iparam].name) == 0 || strcmp(site2,params[iparam].name) == 0) continue; + rmi = params[iparam].rm; + epsiloni = params[iparam].epsilon; + alphai = params[iparam].alpha; + xMolei = atom->dvector[ispecies][id]/nTotalOFA; + xMolei_old = atom->dvector[ispecies+nspecies][id]/nTotalOFA_old; + + for (int jspecies = 0; jspecies < nspecies; jspecies++) { + jparam = mol2param[jspecies]; + if (jparam < 0 || strcmp(params[jparam].potential,"exp6") != 0) continue; + if (strcmp(site1,params[jparam].name) == 0 || strcmp(site2,params[jparam].name) == 0) continue; + rmj = params[jparam].rm; + epsilonj = params[jparam].epsilon; + alphaj = params[jparam].alpha; + xMolej = atom->dvector[jspecies][id]/nTotalOFA; + xMolej_old = atom->dvector[jspecies+nspecies][id]/nTotalOFA_old; + + rmij = (rmi+rmj)/2.0; + rm3ij = rmij*rmij*rmij; + epsilonij = sqrt(epsiloni*epsilonj); + alphaij = sqrt(alphai*alphaj); + + if(fractionOFA_old > double(0.0)){ + rm3_old += xMolei_old*xMolej_old*rm3ij; + epsilon_old += xMolei_old*xMolej_old*rm3ij*epsilonij; + alpha_old += xMolei_old*xMolej_old*rm3ij*epsilonij*alphaij; + } + if(fractionOFA > double(0.0)){ + rm3 += xMolei*xMolej*rm3ij; + epsilon += xMolei*xMolej*rm3ij*epsilonij; + alpha += xMolei*xMolej*rm3ij*epsilonij*alphaij; + } + } + } + } + + if(strcmp(site1,"1fluid") == 0){ + rm1 = cbrt(rm3); + if(rm1 < 1e-16) { + rm1 = double(0.0); + epsilon1 = double(0.0); + alpha1 = double(0.0); + } else { + epsilon1 = epsilon / rm3; + alpha1 = alpha / epsilon1 / rm3; + } + + fraction1 = fractionOFA; + + rm1_old = cbrt(rm3_old); + if(rm1_old < 1e-16) { + rm1_old = double(0.0); + epsilon1_old = double(0.0); + alpha1_old = double(0.0); + } else { + epsilon1_old = epsilon_old / rm3_old; + alpha1_old = alpha_old / epsilon1_old / rm3_old; + } + fraction1_old = fractionOFA_old; + + // Fuchslin-Like Exp-6 Scaling + double powfuch = 0.0; + if(fuchslinEpsilon < 0.0){ + fuchslinEpsilon = -1.0*fuchslinEpsilon; + powfuch = pow(nTotalOFA,fuchslinEpsilon); + if(powfuch<1e-15) epsilon1 = 0.0; + else epsilon1 *= 1.0/powfuch; + + powfuch = pow(nTotalOFA_old,fuchslinEpsilon); + if(powfuch<1e-15) epsilon1_old = 0.0; + else epsilon1_old *= 1.0/powfuch; + + } else { + epsilon1 *= pow(nTotalOFA,fuchslinEpsilon); + epsilon1_old *= pow(nTotalOFA_old,fuchslinEpsilon); + } + + if(fuchslinR < 0.0){ + fuchslinR = -1.0*fuchslinR; + powfuch = pow(nTotalOFA,fuchslinR); + if(powfuch<1e-15) rm1 = 0.0; + else rm1 *= 1.0/powfuch; + + powfuch = pow(nTotalOFA_old,fuchslinR); + if(powfuch<1e-15) rm1_old = 0.0; + else rm1_old *= 1.0/powfuch; + + } else { + rm1 *= pow(nTotalOFA,fuchslinR); + rm1_old *= pow(nTotalOFA_old,fuchslinR); + } + } + + if(strcmp(site2,"1fluid") == 0){ + rm2 = cbrt(rm3); + if(rm2 < 1e-16) { + rm2 = double(0.0); + epsilon2 = double(0.0); + alpha2 = double(0.0); + } else { + epsilon2 = epsilon / rm3; + alpha2 = alpha / epsilon2 / rm3; + } + fraction2 = fractionOFA; + + rm2_old = cbrt(rm3_old); + if(rm2_old < 1e-16) { + rm2_old = double(0.0); + epsilon2_old = double(0.0); + alpha2_old = double(0.0); + } else { + epsilon2_old = epsilon_old / rm3_old; + alpha2_old = alpha_old / epsilon2_old / rm3_old; + } + fraction2_old = fractionOFA_old; + + // Fuchslin-Like Exp-6 Scaling + double powfuch = 0.0; + if(fuchslinEpsilon < 0.0){ + fuchslinEpsilon = -1.0*fuchslinEpsilon; + powfuch = pow(nTotalOFA,fuchslinEpsilon); + if(powfuch<1e-15) epsilon2 = 0.0; + else epsilon2 *= 1.0/powfuch; + + powfuch = pow(nTotalOFA_old,fuchslinEpsilon); + if(powfuch<1e-15) epsilon2_old = 0.0; + else epsilon2_old *= 1.0/powfuch; + + } else { + epsilon2 *= pow(nTotalOFA,fuchslinEpsilon); + epsilon2_old *= pow(nTotalOFA_old,fuchslinEpsilon); + } + + if(fuchslinR < 0.0){ + fuchslinR = -1.0*fuchslinR; + powfuch = pow(nTotalOFA,fuchslinR); + if(powfuch<1e-15) rm2 = 0.0; + else rm2 *= 1.0/powfuch; + + powfuch = pow(nTotalOFA_old,fuchslinR); + if(powfuch<1e-15) rm2_old = 0.0; + else rm2_old *= 1.0/powfuch; + + } else { + rm2 *= pow(nTotalOFA,fuchslinR); + rm2_old *= pow(nTotalOFA_old,fuchslinR); + } + } +} + +/* ---------------------------------------------------------------------- */ + +double PairExp6rx::func_rin(double &alpha) +{ + double function; + + const double a = double(3.7682065); + const double b = double(-1.4308614); + + function = a+b*sqrt(alpha); + function = expValue(function); + + return function; +} + +/* ---------------------------------------------------------------------- */ + +double PairExp6rx::expValue(double value) +{ + double returnValue; + if(value < DBL_MIN_EXP) returnValue = double(0.0); + else returnValue = exp(value); + + return returnValue; +} diff --git a/src/USER-DPD/pair_exp6_rx.h b/src/USER-DPD/pair_exp6_rx.h new file mode 100644 index 0000000000..ece29dcda7 --- /dev/null +++ b/src/USER-DPD/pair_exp6_rx.h @@ -0,0 +1,137 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(exp6/rx,PairExp6rx) + +#else + +#ifndef LMP_PAIR_EXP6_RX_H +#define LMP_PAIR_EXP6_RX_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairExp6rx : public Pair { + public: + PairExp6rx(class LAMMPS *); + virtual ~PairExp6rx(); + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + + protected: + enum{LINEAR}; + double cut_global; + double **cut; + double **epsilon,**rm,**alpha; + double **rminv,**buck1,**buck2,**offset; + + void allocate(); + int *mol2param; // mapping from molecule to parameters + int nparams; // # of stored parameter sets + int maxparam; // max # of parameter sets + struct Param { + double epsilon,rm,alpha; + int ispecies; + char *name, *potential; // names of unique molecules and interaction type + char *tablename; // name of interaction table + }; + Param *params; // parameter set for an I-J-K interaction + + int nspecies; + void read_file(char *); + void setup(); + + char *site1, *site2; + double fuchslinR, fuchslinEpsilon; + void getParamsEXP6(int, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &); + double func_rin(double &); + double expValue(double); + +/* class FixRX *fixRX; */ +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: alpha_ij is 6.0 in pair exp6 + +Self-explanator + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: PairExp6rx requires a fix rx command + +The fix rx command must come before the pair style command in the input file + +E: There are no rx species specified + +There must be at least one species specified through the fix rx command + +E: Site1 name not recognized in pair coefficients + +The site1 keyword does not match the species keywords specified throug the fix rx command + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +E: Cannot open exp6/rx potential file %s + +Self-explanatory + +E: Incorrect format in exp6/rx potential file + +Self-explanatory + +E: Illegal exp6/rx parameters. Rm and Epsilon must be greater than zero. Alpha cannot be negative. + +Self-explanatory + +E: Illegal exp6/rx parameters. Interaction potential does not exist. + +Self-explanatory + +E: Potential file has duplicate entry. + +Self-explanatory + +E: The number of molecules in CG particle is less than 1e-8. + +Self-explanatory. Check the species concentrations have been properly set +and check the reaction kinetic solver parameters in fix rx to more for +sufficient accuracy. + + +*/ diff --git a/src/USER-DPD/pair_multi_lucy.cpp b/src/USER-DPD/pair_multi_lucy.cpp index 37f235b8e3..08e9d9d335 100644 --- a/src/USER-DPD/pair_multi_lucy.cpp +++ b/src/USER-DPD/pair_multi_lucy.cpp @@ -87,12 +87,10 @@ PairMultiLucy::~PairMultiLucy() void PairMultiLucy::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype,itable; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; - double rsq,factor_lj,fraction,value,a,b; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,rsq; int *ilist,*jlist,*numneigh,**firstneigh; Table *tb; - union_int_float_t rsq_lookup; int tlm1 = tablength - 1; evdwl = 0.0; @@ -110,7 +108,6 @@ void PairMultiLucy::compute(int eflag, int vflag) double A_i; double A_j; double fraction_i,fraction_j; - double a_i,a_j,b_i,b_j; int jtable; double *rho = atom->rho; @@ -134,7 +131,6 @@ void PairMultiLucy::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; - factor_lj = special_lj[sbmask(j)]; j &= NEIGHMASK; delx = xtmp - x[j][0]; @@ -293,13 +289,11 @@ void PairMultiLucy::coeff(int narg, char **arg) // insure cutoff is within table if (tb->ninput <= 1) error->one(FLERR,"Invalid pair table length"); - double rlo,rhi; + double rlo; if (tb->rflag == 0) { rlo = tb->rfile[0]; - rhi = tb->rfile[tb->ninput-1]; } else { rlo = tb->rlo; - rhi = tb->rhi; } rho_0 = rlo; @@ -390,7 +384,6 @@ void PairMultiLucy::read_table(Table *tb, char *file, char *keyword) int itmp; double rtmp; - union_int_float_t rsq_lookup; fgets(line,MAXLINE,fp); for (int i = 0; i < tb->ninput; i++) { @@ -733,7 +726,7 @@ void PairMultiLucy::computeLocalDensity() int *type = atom->type; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; - double factor, volume; + double factor; inum = list->inum; ilist = list->ilist; diff --git a/src/USER-DPD/pair_multi_lucy_rx.cpp b/src/USER-DPD/pair_multi_lucy_rx.cpp new file mode 100644 index 0000000000..154a4cf5de --- /dev/null +++ b/src/USER-DPD/pair_multi_lucy_rx.cpp @@ -0,0 +1,957 @@ +/* ---------------------------------------------------------------------- + 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 Larentzos and Joshua Moore (U.S. Army Research Laboratory) + + Please cite the related publications: + J.D. Moore, B.C. Barnes, S. Izvekov, M. Lisal, M.S. Sellers, D.E. Taylor & J.K. Brennan + "A coarse-grain force field for RDX: Density dependent and energy conserving" + The Journal of Chemical Physics, 2016, 144, 104501. +------------------------------------------------------------------------------------------- */ + +#include "mpi.h" +#include +#include "math_const.h" +#include +#include +#include "pair_multi_lucy_rx.h" +#include "atom.h" +#include "force.h" +#include "comm.h" +#include "neigh_list.h" +#include "memory.h" +#include "error.h" +#include "citeme.h" +#include "modify.h" +#include "fix.h" + +using namespace LAMMPS_NS; + +enum{NONE,RLINEAR,RSQ}; + +#define MAXLINE 1024 + +static const char cite_pair_multi_lucy_rx[] = + "pair_style multi/lucy/rx command:\n\n" + "@Article{Moore16,\n" + " author = {J.D. Moore, B.C. Barnes, S. Izvekov, M. Lisal, M.S. Sellers, D.E. Taylor and J. K. Brennan},\n" + " title = {A coarse-grain force field for RDX: Density dependent and energy conserving},\n" + " journal = {J. Chem. Phys.},\n" + " year = 2016,\n" + " volume = 144\n" + " pages = {104501}\n" + "}\n\n"; + +/* ---------------------------------------------------------------------- */ + +PairMultiLucyRX::PairMultiLucyRX(LAMMPS *lmp) : Pair(lmp) +{ + if (lmp->citeme) lmp->citeme->add(cite_pair_multi_lucy_rx); + + if (atom->rho_flag != 1) error->all(FLERR,"Pair multi/lucy/rx command requires atom_style with density (e.g. dpd, meso)"); + + ntables = 0; + tables = NULL; + + comm_forward = 1; + comm_reverse = 1; + +} + +/* ---------------------------------------------------------------------- */ + +PairMultiLucyRX::~PairMultiLucyRX() +{ + for (int m = 0; m < ntables; m++) free_table(&tables[m]); + memory->sfree(tables); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(tabindex); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairMultiLucyRX::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype,itable; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,evdwlOld,fpair; + double rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + Table *tb; + + int tlm1 = tablength - 1; + + evdwlOld = 0.0; + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + double fractionOld1_i,fractionOld1_j; + double fractionOld2_i,fractionOld2_j; + double fraction1_i,fraction1_j; + double fraction2_i,fraction2_j; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + double pi = MathConst::MY_PI; + double A_i, A_j; + double fraction_i,fraction_j; + int jtable; + double *rho = atom->rho; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + computeLocalDensity(); + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + getParams(i,fractionOld1_i,fractionOld2_i,fraction1_i,fraction2_i); + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + fpair = double(0.0); + getParams(j,fractionOld1_j,fractionOld2_j,fraction1_j,fraction2_j); + + tb = &tables[tabindex[itype][jtype]]; + if (rho[i]*rho[i] < tb->innersq || rho[j]*rho[j] < tb->innersq){ + printf("Table inner cutoff = %lf\n",sqrt(tb->innersq)); + printf("rho[%d]=%lf\n",i,rho[i]); + printf("rho[%d]=%lf\n",j,rho[j]); + error->one(FLERR,"Density < table inner cutoff"); + } + if (tabstyle == LOOKUP) { + itable = static_cast (((rho[i]*rho[i]) - tb->innersq) * tb->invdelta); + jtable = static_cast (((rho[j]*rho[j]) - tb->innersq) * tb->invdelta); + if (itable >= tlm1 || jtable >= tlm1){ + printf("Table outer index = %d\n",tlm1); + printf("itableIndex=%d rho[%d]=%lf\n",itable,i,rho[i]); + printf("jtableIndex=%d rho[%d]=%lf\n",jtable,j,rho[j]); + error->one(FLERR,"Density > table outer cutoff"); + } + A_i = tb->f[itable]; + A_j = tb->f[jtable]; + fpair = double(0.5)*(A_i + A_j)*(double(1.0)+double(3.0)*sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype])); + fpair = fpair/sqrt(rsq); + + } else if (tabstyle == LINEAR) { + itable = static_cast ((rho[i]*rho[i] - tb->innersq) * tb->invdelta); + jtable = static_cast (((rho[j]*rho[j]) - tb->innersq) * tb->invdelta); + if (itable >= tlm1 || jtable >= tlm1){ + printf("Table outer index = %d\n",tlm1); + printf("itableIndex=%d rho[%d]=%lf\n",itable,i,rho[i]); + printf("jtableIndex=%d rho[%d]=%lf\n",jtable,j,rho[j]); + error->one(FLERR,"Density > table outer cutoff"); + } + if(itable<0) itable=0; + if(itable>=tlm1) itable=tlm1; + if(jtable<0) jtable=0; + if(jtable>=tlm1)jtable=tlm1; + + fraction_i = (((rho[i]*rho[i]) - tb->rsq[itable]) * tb->invdelta); + fraction_j = (((rho[j]*rho[j]) - tb->rsq[jtable]) * tb->invdelta); + if(itable==0) fraction_i=double(0.0); + if(itable==tlm1) fraction_i=double(0.0); + if(jtable==0) fraction_j=double(0.0); + if(jtable==tlm1) fraction_j=double(0.0); + + A_i = tb->f[itable] + fraction_i*tb->df[itable]; + A_j = tb->f[jtable] + fraction_j*tb->df[jtable]; + + fpair = double(0.5)*(A_i + A_j)*(double(1.0)+double(3.0)*sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype]))*(double(1.0) - sqrt(rsq)/sqrt(cutsq[itype][jtype])); + + fpair = fpair / sqrt(rsq); + + } else error->one(FLERR,"Only LOOKUP and LINEAR table styles have been implemented for pair multi/lucy/rx"); + + + if (strcmp(site1,site2) == 0) fpair = sqrt(fractionOld1_i*fractionOld2_j)*fpair; + else fpair = (sqrt(fractionOld1_i*fractionOld2_j) + sqrt(fractionOld2_i*fractionOld1_j))*fpair; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + if (evflag) ev_tally(i,j,nlocal,newton_pair, + 0.0,0.0,fpair,delx,dely,delz); + } + } + + tb = &tables[tabindex[itype][itype]]; + itable = static_cast (((rho[i]*rho[i]) - tb->innersq) * tb->invdelta); + if (tabstyle == LOOKUP) evdwl = tb->e[itable]; + else if (tabstyle == LINEAR){ + if (itable >= tlm1){ + printf("itableIndex=%d rho[%d]=%lf\n",itable,i,rho[i]); + error->one(FLERR,"Density > table outer cutoff"); + } + if(itable==0) fraction_i=double(0.0); + else fraction_i = (((rho[i]*rho[i]) - tb->rsq[itable]) * tb->invdelta); + evdwl = tb->e[itable] + fraction_i*tb->de[itable]; + } else error->one(FLERR,"Only LOOKUP and LINEAR table styles have been implemented for pair multi/lucy/rx"); + + evdwl *=(pi*cutsq[itype][itype]*cutsq[itype][itype])/double(84.0); + evdwlOld = fractionOld1_i*evdwl; + evdwl = fraction1_i*evdwl; + + uCG[i] += evdwlOld; + uCGnew[i] += evdwl; + + evdwl = evdwlOld; + + if (evflag) ev_tally(0,0,nlocal,newton_pair, + evdwl,0.0,0.0,0.0,0.0,0.0); + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::allocate() +{ + allocated = 1; + const int nt = atom->ntypes + 1; + + memory->create(setflag,nt,nt,"pair:setflag"); + memory->create(cutsq,nt,nt,"pair:cutsq"); + memory->create(tabindex,nt,nt,"pair:tabindex"); + + memset(&setflag[0][0],0,nt*nt*sizeof(int)); + memset(&cutsq[0][0],0,nt*nt*sizeof(double)); + memset(&tabindex[0][0],0,nt*nt*sizeof(int)); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::settings(int narg, char **arg) +{ + if (narg != 2) error->all(FLERR,"Illegal pair_style command"); + + // new settings + + if (strcmp(arg[0],"lookup") == 0) tabstyle = LOOKUP; + else if (strcmp(arg[0],"linear") == 0) tabstyle = LINEAR; + else error->all(FLERR,"Unknown table style in pair_style command"); + + tablength = force->inumeric(FLERR,arg[1]); + if (tablength < 2) error->all(FLERR,"Illegal number of pair table entries"); + + // delete old tables, since cannot just change settings + + for (int m = 0; m < ntables; m++) free_table(&tables[m]); + memory->sfree(tables); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(tabindex); + } + allocated = 0; + + ntables = 0; + tables = NULL; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::coeff(int narg, char **arg) +{ + if (narg != 6 && narg != 7) error->all(FLERR,"Illegal pair_coeff command"); + + bool rx_flag = false; + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (!rx_flag) error->all(FLERR,"PairMultiLucyRX requires a fix rx command."); + + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(arg[0],atom->ntypes,ilo,ihi); + force->bounds(arg[1],atom->ntypes,jlo,jhi); + + int me; + MPI_Comm_rank(world,&me); + tables = (Table *) + memory->srealloc(tables,(ntables+1)*sizeof(Table),"pair:tables"); + Table *tb = &tables[ntables]; + null_table(tb); + if (me == 0) read_table(tb,arg[2],arg[3]); + bcast_table(tb); + + nspecies = atom->nspecies_dpd; + int n; + n = strlen(arg[3]) + 1; + site1 = new char[n]; + strcpy(site1,arg[4]); + + n = strlen(arg[4]) + 1; + site2 = new char[n]; + strcpy(site2,arg[5]); + + // set table cutoff + + if (narg == 7) tb->cut = force->numeric(FLERR,arg[6]); + else if (tb->rflag) tb->cut = tb->rhi; + else tb->cut = tb->rfile[tb->ninput-1]; + + // error check on table parameters + // insure cutoff is within table + + if (tb->ninput <= 1) error->one(FLERR,"Invalid pair table length"); + double rlo; + if (tb->rflag == 0) { + rlo = tb->rfile[0]; + } else { + rlo = tb->rlo; + } + rho_0 = rlo; + + tb->match = 0; + if (tabstyle == LINEAR && tb->ninput == tablength && + tb->rflag == RSQ) tb->match = 1; + + // spline read-in values and compute r,e,f vectors within table + + if (tb->match == 0) spline_table(tb); + compute_table(tb); + + // store ptr to table in tabindex + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + tabindex[i][j] = ntables; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Illegal pair_coeff command"); + ntables++; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairMultiLucyRX::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + tabindex[j][i] = tabindex[i][j]; + + return tables[tabindex[i][j]].cut; +} + +/* ---------------------------------------------------------------------- + read a table section from a tabulated potential file + only called by proc 0 + this function sets these values in Table: + ninput,rfile,efile,ffile,rflag,rlo,rhi,fpflag,fplo,fphi +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::read_table(Table *tb, char *file, char *keyword) +{ + char line[MAXLINE]; + + // open file + + FILE *fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open file %s",file); + error->one(FLERR,str); + } + + // loop until section found with matching keyword + + while (1) { + if (fgets(line,MAXLINE,fp) == NULL) + error->one(FLERR,"Did not find keyword in table file"); + if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line + if (line[0] == '#') continue; // comment + char *word = strtok(line," \t\n\r"); + if (strcmp(word,keyword) == 0) break; // matching keyword + fgets(line,MAXLINE,fp); // no match, skip section + param_extract(tb,line); + fgets(line,MAXLINE,fp); + for (int i = 0; i < tb->ninput; i++) fgets(line,MAXLINE,fp); + } + + // read args on 2nd line of section + // allocate table arrays for file values + + fgets(line,MAXLINE,fp); + param_extract(tb,line); + memory->create(tb->rfile,tb->ninput,"pair:rfile"); + memory->create(tb->efile,tb->ninput,"pair:efile"); + memory->create(tb->ffile,tb->ninput,"pair:ffile"); + + // read r,e,f table values from file + // if rflag set, compute r + // if rflag not set, use r from file + + int itmp; + double rtmp; + + fgets(line,MAXLINE,fp); + for (int i = 0; i < tb->ninput; i++) { + fgets(line,MAXLINE,fp); + sscanf(line,"%d %lg %lg %lg",&itmp,&rtmp,&tb->efile[i],&tb->ffile[i]); + + if (tb->rflag == RLINEAR) + rtmp = tb->rlo + (tb->rhi - tb->rlo)*i/(tb->ninput-1); + else if (tb->rflag == RSQ) { + rtmp = tb->rlo*tb->rlo + + (tb->rhi*tb->rhi - tb->rlo*tb->rlo)*i/(tb->ninput-1); + rtmp = sqrt(rtmp); + } + + tb->rfile[i] = rtmp; + } + + // close file + + fclose(fp); +} + +/* ---------------------------------------------------------------------- + broadcast read-in table info from proc 0 to other procs + this function communicates these values in Table: + ninput,rfile,efile,ffile,rflag,rlo,rhi,fpflag,fplo,fphi +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::bcast_table(Table *tb) +{ + MPI_Bcast(&tb->ninput,1,MPI_INT,0,world); + + int me; + MPI_Comm_rank(world,&me); + if (me > 0) { + memory->create(tb->rfile,tb->ninput,"pair:rfile"); + memory->create(tb->efile,tb->ninput,"pair:efile"); + memory->create(tb->ffile,tb->ninput,"pair:ffile"); + } + + MPI_Bcast(tb->rfile,tb->ninput,MPI_DOUBLE,0,world); + MPI_Bcast(tb->efile,tb->ninput,MPI_DOUBLE,0,world); + MPI_Bcast(tb->ffile,tb->ninput,MPI_DOUBLE,0,world); + + MPI_Bcast(&tb->rflag,1,MPI_INT,0,world); + if (tb->rflag) { + MPI_Bcast(&tb->rlo,1,MPI_DOUBLE,0,world); + MPI_Bcast(&tb->rhi,1,MPI_DOUBLE,0,world); + } + MPI_Bcast(&tb->fpflag,1,MPI_INT,0,world); + if (tb->fpflag) { + MPI_Bcast(&tb->fplo,1,MPI_DOUBLE,0,world); + MPI_Bcast(&tb->fphi,1,MPI_DOUBLE,0,world); + } +} + +/* ---------------------------------------------------------------------- + build spline representation of e,f over entire range of read-in table + this function sets these values in Table: e2file,f2file +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::spline_table(Table *tb) +{ + memory->create(tb->e2file,tb->ninput,"pair:e2file"); + memory->create(tb->f2file,tb->ninput,"pair:f2file"); + + double ep0 = - tb->ffile[0]; + double epn = - tb->ffile[tb->ninput-1]; + spline(tb->rfile,tb->efile,tb->ninput,ep0,epn,tb->e2file); + + if (tb->fpflag == 0) { + tb->fplo = (tb->ffile[1] - tb->ffile[0]) / (tb->rfile[1] - tb->rfile[0]); + tb->fphi = (tb->ffile[tb->ninput-1] - tb->ffile[tb->ninput-2]) / + (tb->rfile[tb->ninput-1] - tb->rfile[tb->ninput-2]); + } + + double fp0 = tb->fplo; + double fpn = tb->fphi; + spline(tb->rfile,tb->ffile,tb->ninput,fp0,fpn,tb->f2file); +} + +/* ---------------------------------------------------------------------- + extract attributes from parameter line in table section + format of line: N value R/RSQ lo hi FP fplo fphi + N is required, other params are optional +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::param_extract(Table *tb, char *line) +{ + tb->ninput = 0; + tb->rflag = NONE; + tb->fpflag = 0; + + char *word = strtok(line," \t\n\r\f"); + while (word) { + if (strcmp(word,"N") == 0) { + word = strtok(NULL," \t\n\r\f"); + tb->ninput = atoi(word); + } else if (strcmp(word,"R") == 0 || strcmp(word,"RSQ") == 0) { + if (strcmp(word,"R") == 0) tb->rflag = RLINEAR; + else if (strcmp(word,"RSQ") == 0) tb->rflag = RSQ; + word = strtok(NULL," \t\n\r\f"); + tb->rlo = atof(word); + word = strtok(NULL," \t\n\r\f"); + tb->rhi = atof(word); + } else if (strcmp(word,"FP") == 0) { + tb->fpflag = 1; + word = strtok(NULL," \t\n\r\f"); + tb->fplo = atof(word); + word = strtok(NULL," \t\n\r\f"); + tb->fphi = atof(word); + } else { + printf("WORD: %s\n",word); + error->one(FLERR,"Invalid keyword in pair table parameters"); + } + word = strtok(NULL," \t\n\r\f"); + } + + if (tb->ninput == 0) error->one(FLERR,"Pair table parameters did not set N"); +} + +/* ---------------------------------------------------------------------- + compute r,e,f vectors from splined values +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::compute_table(Table *tb) +{ + int tlm1 = tablength-1; + + // inner = inner table bound + // cut = outer table bound + // delta = table spacing in rsq for N-1 bins + + double inner; + if (tb->rflag) inner = tb->rlo; + else inner = tb->rfile[0]; + tb->innersq = inner*inner; + tb->delta = (tb->rhi*tb->rhi - tb->innersq) / tlm1; + tb->invdelta = 1.0/tb->delta; + + // direct lookup tables + // N-1 evenly spaced bins in rsq from inner to cut + // e,f = value at midpt of bin + // e,f are N-1 in length since store 1 value at bin midpt + // f is converted to f/r when stored in f[i] + // e,f are never a match to read-in values, always computed via spline interp + + if (tabstyle == LOOKUP) { + memory->create(tb->e,tlm1,"pair:e"); + memory->create(tb->f,tlm1,"pair:f"); + + double r,rsq; + for (int i = 0; i < tlm1; i++) { + rsq = tb->innersq + (i+0.5)*tb->delta; + r = sqrt(rsq); + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r); + } + } + + // linear tables + // N-1 evenly spaced bins in rsq from inner to cut + // rsq,e,f = value at lower edge of bin + // de,df values = delta from lower edge to upper edge of bin + // rsq,e,f are N in length so de,df arrays can compute difference + // f is converted to f/r when stored in f[i] + // e,f can match read-in values, else compute via spline interp + + if (tabstyle == LINEAR) { + memory->create(tb->rsq,tablength,"pair:rsq"); + memory->create(tb->e,tablength,"pair:e"); + memory->create(tb->f,tablength,"pair:f"); + memory->create(tb->de,tlm1,"pair:de"); + memory->create(tb->df,tlm1,"pair:df"); + + double r,rsq; + for (int i = 0; i < tablength; i++) { + rsq = tb->innersq + i*tb->delta; + r = sqrt(rsq); + tb->rsq[i] = rsq; + if (tb->match) { + tb->e[i] = tb->efile[i]; + tb->f[i] = tb->ffile[i]; + } else { + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r); + } + } + + for (int i = 0; i < tlm1; i++) { + tb->de[i] = tb->e[i+1] - tb->e[i]; + tb->df[i] = tb->f[i+1] - tb->f[i]; + } + } +} + +/* ---------------------------------------------------------------------- + set all ptrs in a table to NULL, so can be freed safely +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::null_table(Table *tb) +{ + tb->rfile = tb->efile = tb->ffile = NULL; + tb->e2file = tb->f2file = NULL; + tb->rsq = tb->drsq = tb->e = tb->de = NULL; + tb->f = tb->df = tb->e2 = tb->f2 = NULL; +} + +/* ---------------------------------------------------------------------- + free all arrays in a table +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::free_table(Table *tb) +{ + memory->destroy(tb->rfile); + memory->destroy(tb->efile); + memory->destroy(tb->ffile); + memory->destroy(tb->e2file); + memory->destroy(tb->f2file); + + memory->destroy(tb->rsq); + memory->destroy(tb->drsq); + memory->destroy(tb->e); + memory->destroy(tb->de); + memory->destroy(tb->f); + memory->destroy(tb->df); + memory->destroy(tb->e2); + memory->destroy(tb->f2); +} + +/* ---------------------------------------------------------------------- + spline and splint routines modified from Numerical Recipes +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::spline(double *x, double *y, int n, + double yp1, double ypn, double *y2) +{ + int i,k; + double p,qn,sig,un; + double *u = new double[n]; + + if (yp1 > 0.99e30) y2[0] = u[0] = 0.0; + else { + y2[0] = -0.5; + u[0] = (3.0/(x[1]-x[0])) * ((y[1]-y[0]) / (x[1]-x[0]) - yp1); + } + for (i = 1; i < n-1; i++) { + sig = (x[i]-x[i-1]) / (x[i+1]-x[i-1]); + p = sig*y2[i-1] + 2.0; + y2[i] = (sig-1.0) / p; + u[i] = (y[i+1]-y[i]) / (x[i+1]-x[i]) - (y[i]-y[i-1]) / (x[i]-x[i-1]); + u[i] = (6.0*u[i] / (x[i+1]-x[i-1]) - sig*u[i-1]) / p; + } + if (ypn > 0.99e30) qn = un = 0.0; + else { + qn = 0.5; + un = (3.0/(x[n-1]-x[n-2])) * (ypn - (y[n-1]-y[n-2]) / (x[n-1]-x[n-2])); + } + y2[n-1] = (un-qn*u[n-2]) / (qn*y2[n-2] + 1.0); + for (k = n-2; k >= 0; k--) y2[k] = y2[k]*y2[k+1] + u[k]; + + delete [] u; +} + +/* ---------------------------------------------------------------------- */ + +double PairMultiLucyRX::splint(double *xa, double *ya, double *y2a, int n, double x) +{ + int klo,khi,k; + double h,b,a,y; + + klo = 0; + khi = n-1; + while (khi-klo > 1) { + k = (khi+klo) >> 1; + if (xa[k] > x) khi = k; + else klo = k; + } + h = xa[khi]-xa[klo]; + a = (xa[khi]-x) / h; + b = (x-xa[klo]) / h; + y = a*ya[klo] + b*ya[khi] + + ((a*a*a-a)*y2a[klo] + (b*b*b-b)*y2a[khi]) * (h*h)/6.0; + return y; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::write_restart(FILE *fp) +{ + write_restart_settings(fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::read_restart(FILE *fp) +{ + read_restart_settings(fp); + allocate(); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::write_restart_settings(FILE *fp) +{ + fwrite(&tabstyle,sizeof(int),1,fp); + fwrite(&tablength,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMultiLucyRX::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&tabstyle,sizeof(int),1,fp); + fread(&tablength,sizeof(int),1,fp); + } + MPI_Bcast(&tabstyle,1,MPI_INT,0,world); + MPI_Bcast(&tablength,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- */ + +void PairMultiLucyRX::computeLocalDensity() +{ + int i,j,m,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz; + double rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + double factor; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + double pi = MathConst::MY_PI; + double *rho = atom->rho; + + // zero out density + + if (newton_pair) { + m = nlocal + atom->nghost; + for (i = 0; i < m; i++) rho[i] = 0.0; + } else for (i = 0; i < nlocal; i++) rho[i] = 0.0; + +// rho = density at each atom +// loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < cutsq[itype][jtype]) { + double rcut = sqrt(cutsq[itype][jtype]); + double tmpFactor = double(1.0)-sqrt(rsq)/rcut; + double tmpFactor4 = tmpFactor*tmpFactor*tmpFactor*tmpFactor; + factor = (double(84.0)/(double(5.0)*pi*rcut*rcut*rcut))*(double(1.0)+double(3.0)*sqrt(rsq)/(double(2.0)*rcut))*tmpFactor4; + rho[i] += factor; + if (newton_pair || j < nlocal) { + rho[j] += factor; + } + } + } + } + if (newton_pair) comm->reverse_comm_pair(this); + + comm->forward_comm_pair(this); + +} + +/* ---------------------------------------------------------------------- */ + +void PairMultiLucyRX::getParams(int id, double &fractionOld1, double &fractionOld2, double &fraction1, double &fraction2) +{ + double fractionOld, fraction; + double nTotal, nTotalOld; + + fractionOld = double(0.0); + fraction = double(0.0); + fractionOld1 = double(0.0); + fractionOld2 = double(0.0); + fraction1 = double(0.0); + fraction2 = double(0.0); + + nTotal = double(0.0); + nTotalOld = double(0.0); + for(int ispecies=0;ispeciesdvector[ispecies][id]; + nTotalOld += atom->dvector[ispecies+nspecies][id]; + } + + for (int ispecies = 0; ispecies < nspecies; ispecies++) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0){ + fractionOld1 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction1 = atom->dvector[ispecies][id]/nTotal; + } + if (strcmp(site2,&atom->dname[ispecies][0]) == 0){ + fractionOld2 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction2 = atom->dvector[ispecies][id]/nTotal; + } + } + + for (int ispecies = 0; ispecies < nspecies; ispecies++) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0){ + fractionOld1 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction1 = atom->dvector[ispecies][id]/nTotal; + } + if (strcmp(site2,&atom->dname[ispecies][0]) == 0){ + fractionOld2 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction2 = atom->dvector[ispecies][id]/nTotal; + } + + if (strcmp(site1,"all") == 0 || strcmp(site2,"all") == 0) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0 || strcmp(site2,&atom->dname[ispecies][0]) == 0) continue; + fractionOld += atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction += atom->dvector[ispecies][id]/nTotal; + } + } + if(strcmp(site1,"all") == 0){ + fractionOld1 = fractionOld; + fraction1 = fraction; + } + if(strcmp(site2,"all") == 0){ + fractionOld2 = fractionOld; + fraction2 = fraction; + } +} + +/* ---------------------------------------------------------------------- */ + +int PairMultiLucyRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int i,j,m; + double *rho = atom->rho; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = rho[j]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void PairMultiLucyRX::unpack_forward_comm(int n, int first, double *buf) +{ + int i,m,last; + double *rho = atom->rho; + + m = 0; + last = first + n; + for (i = first; i < last; i++) rho[i] = buf[m++]; +} + +/* ---------------------------------------------------------------------- */ + +int PairMultiLucyRX::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + double *rho = atom->rho; + + m = 0; + last = first + n; + for (i = first; i < last; i++) buf[m++] = rho[i]; + return m; +} + +/* ---------------------------------------------------------------------- */ + +void PairMultiLucyRX::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + double *rho = atom->rho; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + rho[j] += buf[m++]; + } +} diff --git a/src/USER-DPD/pair_multi_lucy_rx.h b/src/USER-DPD/pair_multi_lucy_rx.h new file mode 100644 index 0000000000..8600a3d2c6 --- /dev/null +++ b/src/USER-DPD/pair_multi_lucy_rx.h @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(multi/lucy/rx,PairMultiLucyRX) + +#else + +#ifndef LMP_PAIR_MULTI_LUCY_RX_H +#define LMP_PAIR_MUTLI_LUCY_RX_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairMultiLucyRX : public Pair { + public: + PairMultiLucyRX(class LAMMPS *); + virtual ~PairMultiLucyRX(); + + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + void computeLocalDensity(); + double rho_0; + + + protected: + enum{LOOKUP,LINEAR}; + + int nmax; + + int tabstyle,tablength; + struct Table { + int ninput,rflag,fpflag,match; + double rlo,rhi,fplo,fphi,cut; + double *rfile,*efile,*ffile; + double *e2file,*f2file; + double innersq,delta,invdelta,deltasq6; + double *rsq,*drsq,*e,*de,*f,*df,*e2,*f2; + }; + int ntables; + Table *tables; + + int **tabindex; + + void allocate(); + void read_table(Table *, char *, char *); + void param_extract(Table *, char *); + void bcast_table(Table *); + void spline_table(Table *); + void compute_table(Table *); + void null_table(Table *); + void free_table(Table *); + void spline(double *, double *, int, double, double, double *); + double splint(double *, double *, double *, int, double); + + int nspecies; + char *site1, *site2; + void getParams(int, double &, double &, double &, double &); + +/* class FixRX *fixRX; */ +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Pair multi/lucy/rx command requires atom_style with density (e.g. dpd, meso) + +Self-explanatory + +E: Density < table inner cutoff + +The local density inner is smaller than the inner cutoff + +E: Density > table inner cutoff + +The local density inner is greater than the inner cutoff + +E: Only LOOKUP and LINEAR table styles have been implemented for pair multi/lucy/rx + +Self-explanatory + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Unknown table style in pair_style command + +Self-explanatory + +E: Illegal number of pair table entries + +There must be at least 2 table entries. + +E: Illegal pair_coeff command + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +E: PairMultiLucyRX requires a fix rx command + +The fix rx command must come before the pair style command in the input file + +E: There are no rx species specified + +There must be at least one species specified through the fix rx command + +E: Invalid pair table length + +Length of read-in pair table is invalid + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +E: Cannot open file %s + +The specified file cannot be opened. Check that the path and name are +correct. + +E: Did not find keyword in table file + +Keyword used in pair_coeff command was not found in table file. + +E: Invalid keyword in pair table parameters + +Keyword used in list of table parameters is not recognized. + +E: Pair table parameters did not set N + +List of pair table parameters must include N setting. + +*/ diff --git a/src/USER-DPD/pair_table_rx.cpp b/src/USER-DPD/pair_table_rx.cpp new file mode 100644 index 0000000000..71b48b2776 --- /dev/null +++ b/src/USER-DPD/pair_table_rx.cpp @@ -0,0 +1,1126 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Paul Crozier (SNL) +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include +#include +#include +#include "pair_table_rx.h" +#include "atom.h" +#include "force.h" +#include "comm.h" +#include "neigh_list.h" +#include "memory.h" +#include "error.h" +#include "modify.h" +#include "fix.h" + +using namespace LAMMPS_NS; + +enum{NONE,RLINEAR,RSQ,BMP}; + +#define MAXLINE 1024 + +/* ---------------------------------------------------------------------- */ + +PairTableRX::PairTableRX(LAMMPS *lmp) : Pair(lmp) +{ + ntables = 0; + tables = NULL; +} + +/* ---------------------------------------------------------------------- */ + +PairTableRX::~PairTableRX() +{ + for (int m = 0; m < ntables; m++) free_table(&tables[m]); + memory->sfree(tables); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(tabindex); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairTableRX::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype,itable; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,evdwlOld,fpair; + double rsq,factor_lj,fraction,value,a,b; + int *ilist,*jlist,*numneigh,**firstneigh; + Table *tb; + + union_int_float_t rsq_lookup; + int tlm1 = tablength - 1; + + fraction = double(0.0); + a = double(0.0); + b = double(0.0); + + evdwlOld = 0.0; + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + double fractionOld1_i, fractionOld1_j; + double fractionOld2_i, fractionOld2_j; + double fraction1_i, fraction1_j; + double fraction2_i, fraction2_j; + double *uCG = atom->uCG; + double *uCGnew = atom->uCGnew; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + getParams(i,fractionOld1_i,fractionOld2_i,fraction1_i,fraction2_i); + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + getParams(j,fractionOld1_j,fractionOld2_j,fraction1_j,fraction2_j); + + tb = &tables[tabindex[itype][jtype]]; + if (rsq < tb->innersq) + error->one(FLERR,"Pair distance < table inner cutoff"); + + if (tabstyle == LOOKUP) { + itable = static_cast ((rsq - tb->innersq) * tb->invdelta); + if (itable >= tlm1) + error->one(FLERR,"Pair distance > table outer cutoff"); + fpair = factor_lj * tb->f[itable]; + } else if (tabstyle == LINEAR) { + itable = static_cast ((rsq - tb->innersq) * tb->invdelta); + if (itable >= tlm1) + error->one(FLERR,"Pair distance > table outer cutoff"); + fraction = (rsq - tb->rsq[itable]) * tb->invdelta; + value = tb->f[itable] + fraction*tb->df[itable]; + fpair = factor_lj * value; + } else if (tabstyle == SPLINE) { + itable = static_cast ((rsq - tb->innersq) * tb->invdelta); + if (itable >= tlm1) + error->one(FLERR,"Pair distance > table outer cutoff"); + b = (rsq - tb->rsq[itable]) * tb->invdelta; + a = 1.0 - b; + value = a * tb->f[itable] + b * tb->f[itable+1] + + ((a*a*a-a)*tb->f2[itable] + (b*b*b-b)*tb->f2[itable+1]) * + tb->deltasq6; + fpair = factor_lj * value; + } else { + rsq_lookup.f = rsq; + itable = rsq_lookup.i & tb->nmask; + itable >>= tb->nshiftbits; + fraction = (rsq_lookup.f - tb->rsq[itable]) * tb->drsq[itable]; + value = tb->f[itable] + fraction*tb->df[itable]; + fpair = factor_lj * value; + } + if (strcmp(site1,site2) == 0) fpair = sqrt(fractionOld1_i*fractionOld2_j)*fpair; + else fpair = (sqrt(fractionOld1_i*fractionOld2_j) + sqrt(fractionOld2_i*fractionOld1_j))*fpair; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (tabstyle == LOOKUP) + evdwl = tb->e[itable]; + else if (tabstyle == LINEAR || tabstyle == BITMAP){ + evdwl = tb->e[itable] + fraction*tb->de[itable]; + } + else + evdwl = a * tb->e[itable] + b * tb->e[itable+1] + + ((a*a*a-a)*tb->e2[itable] + (b*b*b-b)*tb->e2[itable+1]) * + tb->deltasq6; + if (strcmp(site1,site2) == 0){ + evdwlOld = sqrt(fractionOld1_i*fractionOld2_j)*evdwl; + evdwl = sqrt(fraction1_i*fraction2_j)*evdwl; + } else { + evdwlOld = (sqrt(fractionOld1_i*fractionOld2_j) + sqrt(fractionOld2_i*fractionOld1_j))*evdwl; + evdwl = (sqrt(fraction1_i*fraction2_j) + sqrt(fraction2_i*fraction1_j))*evdwl; + } + evdwlOld *= factor_lj; + evdwl *= factor_lj; + uCG[i] += double(0.5)*evdwlOld; + uCG[j] += double(0.5)*evdwlOld; + uCGnew[i] += double(0.5)*evdwl; + uCGnew[j] += double(0.5)*evdwl; + evdwl = evdwlOld; + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairTableRX::allocate() +{ + allocated = 1; + const int nt = atom->ntypes + 1; + + memory->create(setflag,nt,nt,"pair:setflag"); + memory->create(cutsq,nt,nt,"pair:cutsq"); + memory->create(tabindex,nt,nt,"pair:tabindex"); + + memset(&setflag[0][0],0,nt*nt*sizeof(int)); + memset(&cutsq[0][0],0,nt*nt*sizeof(double)); + memset(&tabindex[0][0],0,nt*nt*sizeof(int)); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairTableRX::settings(int narg, char **arg) +{ + if (narg < 2) error->all(FLERR,"Illegal pair_style command"); + + // new settings + + if (strcmp(arg[0],"lookup") == 0) tabstyle = LOOKUP; + else if (strcmp(arg[0],"linear") == 0) tabstyle = LINEAR; + else if (strcmp(arg[0],"spline") == 0) tabstyle = SPLINE; + else if (strcmp(arg[0],"bitmap") == 0) tabstyle = BITMAP; + else error->all(FLERR,"Unknown table style in pair_style command"); + + tablength = force->inumeric(FLERR,arg[1]); + if (tablength < 2) error->all(FLERR,"Illegal number of pair table entries"); + + // optional keywords + // assert the tabulation is compatible with a specific long-range solver + + int iarg = 2; + while (iarg < narg) { + if (strcmp(arg[iarg],"ewald") == 0) ewaldflag = 1; + else if (strcmp(arg[iarg],"pppm") == 0) pppmflag = 1; + else if (strcmp(arg[iarg],"msm") == 0) msmflag = 1; + else if (strcmp(arg[iarg],"dispersion") == 0) dispersionflag = 1; + else if (strcmp(arg[iarg],"tip4p") == 0) tip4pflag = 1; + else error->all(FLERR,"Illegal pair_style command"); + iarg++; + } + + // delete old tables, since cannot just change settings + + for (int m = 0; m < ntables; m++) free_table(&tables[m]); + memory->sfree(tables); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(tabindex); + } + allocated = 0; + + ntables = 0; + tables = NULL; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairTableRX::coeff(int narg, char **arg) +{ + if (narg != 6 && narg != 7) error->all(FLERR,"Illegal pair_coeff command"); + if (!allocated) allocate(); + + bool rx_flag = false; + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (!rx_flag) error->all(FLERR,"PairTableRX requires a fix rx command."); + + int ilo,ihi,jlo,jhi; + force->bounds(arg[0],atom->ntypes,ilo,ihi); + force->bounds(arg[1],atom->ntypes,jlo,jhi); + + int me; + MPI_Comm_rank(world,&me); + tables = (Table *) + memory->srealloc(tables,(ntables+1)*sizeof(Table),"pair:tables"); + Table *tb = &tables[ntables]; + null_table(tb); + if (me == 0) read_table(tb,arg[2],arg[3]); + bcast_table(tb); + + nspecies = atom->nspecies_dpd; + if(nspecies==0) error->all(FLERR,"There are no rx species specified."); + int n; + n = strlen(arg[3]) + 1; + site1 = new char[n]; + strcpy(site1,arg[4]); + + int ispecies; + for (ispecies = 0; ispecies < nspecies; ispecies++){ + if (strcmp(site1,&atom->dname[ispecies][0]) == 0) break; + } + if (ispecies == nspecies && strcmp(site1,"1fluid") != 0) + error->all(FLERR,"Site1 name not recognized in pair coefficients"); + + n = strlen(arg[4]) + 1; + site2 = new char[n]; + strcpy(site2,arg[5]); + + for (ispecies = 0; ispecies < nspecies; ispecies++){ + if (strcmp(site2,&atom->dname[ispecies][0]) == 0) break; + } + if (ispecies == nspecies && strcmp(site2,"1fluid") != 0) + error->all(FLERR,"Site2 name not recognized in pair coefficients"); + + // set table cutoff + + if (narg == 7) tb->cut = force->numeric(FLERR,arg[6]); + else if (tb->rflag) tb->cut = tb->rhi; + else tb->cut = tb->rfile[tb->ninput-1]; + + // error check on table parameters + // insure cutoff is within table + // for BITMAP tables, file values can be in non-ascending order + + if (tb->ninput <= 1) error->one(FLERR,"Invalid pair table length"); + double rlo,rhi; + if (tb->rflag == 0) { + rlo = tb->rfile[0]; + rhi = tb->rfile[tb->ninput-1]; + } else { + rlo = tb->rlo; + rhi = tb->rhi; + } + if (tb->cut <= rlo || tb->cut > rhi) + error->all(FLERR,"Invalid pair table cutoff"); + if (rlo <= 0.0) error->all(FLERR,"Invalid pair table cutoff"); + + // match = 1 if don't need to spline read-in tables + // this is only the case if r values needed by final tables + // exactly match r values read from file + // for tabstyle SPLINE, always need to build spline tables + + tb->match = 0; + if (tabstyle == LINEAR && tb->ninput == tablength && + tb->rflag == RSQ && tb->rhi == tb->cut) tb->match = 1; + if (tabstyle == BITMAP && tb->ninput == 1 << tablength && + tb->rflag == BMP && tb->rhi == tb->cut) tb->match = 1; + if (tb->rflag == BMP && tb->match == 0) + error->all(FLERR,"Bitmapped table in file does not match requested table"); + + // spline read-in values and compute r,e,f vectors within table + + if (tb->match == 0) spline_table(tb); + compute_table(tb); + + // store ptr to table in tabindex + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + tabindex[i][j] = ntables; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Illegal pair_coeff command"); + ntables++; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairTableRX::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + tabindex[j][i] = tabindex[i][j]; + + return tables[tabindex[i][j]].cut; +} + +/* ---------------------------------------------------------------------- + read a table section from a tabulated potential file + only called by proc 0 + this function sets these values in Table: + ninput,rfile,efile,ffile,rflag,rlo,rhi,fpflag,fplo,fphi,ntablebits +------------------------------------------------------------------------- */ + +void PairTableRX::read_table(Table *tb, char *file, char *keyword) +{ + char line[MAXLINE]; + + // open file + + FILE *fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + sprintf(str,"Cannot open file %s",file); + error->one(FLERR,str); + } + + // loop until section found with matching keyword + + while (1) { + if (fgets(line,MAXLINE,fp) == NULL) + error->one(FLERR,"Did not find keyword in table file"); + if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line + if (line[0] == '#') continue; // comment + char *word = strtok(line," \t\n\r"); + if (strcmp(word,keyword) == 0) break; // matching keyword + fgets(line,MAXLINE,fp); // no match, skip section + param_extract(tb,line); + fgets(line,MAXLINE,fp); + for (int i = 0; i < tb->ninput; i++) fgets(line,MAXLINE,fp); + } + + // read args on 2nd line of section + // allocate table arrays for file values + + fgets(line,MAXLINE,fp); + param_extract(tb,line); + memory->create(tb->rfile,tb->ninput,"pair:rfile"); + memory->create(tb->efile,tb->ninput,"pair:efile"); + memory->create(tb->ffile,tb->ninput,"pair:ffile"); + + // setup bitmap parameters for table to read in + + tb->ntablebits = 0; + int masklo,maskhi,nmask,nshiftbits; + if (tb->rflag == BMP) { + while (1 << tb->ntablebits < tb->ninput) tb->ntablebits++; + if (1 << tb->ntablebits != tb->ninput) + error->one(FLERR,"Bitmapped table is incorrect length in table file"); + init_bitmap(tb->rlo,tb->rhi,tb->ntablebits,masklo,maskhi,nmask,nshiftbits); + } + + // read r,e,f table values from file + // if rflag set, compute r + // if rflag not set, use r from file + + int itmp; + double rtmp; + union_int_float_t rsq_lookup; + + fgets(line,MAXLINE,fp); + for (int i = 0; i < tb->ninput; i++) { + fgets(line,MAXLINE,fp); + sscanf(line,"%d %lg %lg %lg",&itmp,&rtmp,&tb->efile[i],&tb->ffile[i]); + + if (tb->rflag == RLINEAR) + rtmp = tb->rlo + (tb->rhi - tb->rlo)*i/(tb->ninput-1); + else if (tb->rflag == RSQ) { + rtmp = tb->rlo*tb->rlo + + (tb->rhi*tb->rhi - tb->rlo*tb->rlo)*i/(tb->ninput-1); + rtmp = sqrt(rtmp); + } else if (tb->rflag == BMP) { + rsq_lookup.i = i << nshiftbits; + rsq_lookup.i |= masklo; + if (rsq_lookup.f < tb->rlo*tb->rlo) { + rsq_lookup.i = i << nshiftbits; + rsq_lookup.i |= maskhi; + } + rtmp = sqrtf(rsq_lookup.f); + } + + tb->rfile[i] = rtmp; + } + + // close file + + fclose(fp); +} + +/* ---------------------------------------------------------------------- + broadcast read-in table info from proc 0 to other procs + this function communicates these values in Table: + ninput,rfile,efile,ffile,rflag,rlo,rhi,fpflag,fplo,fphi +------------------------------------------------------------------------- */ + +void PairTableRX::bcast_table(Table *tb) +{ + MPI_Bcast(&tb->ninput,1,MPI_INT,0,world); + + int me; + MPI_Comm_rank(world,&me); + if (me > 0) { + memory->create(tb->rfile,tb->ninput,"pair:rfile"); + memory->create(tb->efile,tb->ninput,"pair:efile"); + memory->create(tb->ffile,tb->ninput,"pair:ffile"); + } + + MPI_Bcast(tb->rfile,tb->ninput,MPI_DOUBLE,0,world); + MPI_Bcast(tb->efile,tb->ninput,MPI_DOUBLE,0,world); + MPI_Bcast(tb->ffile,tb->ninput,MPI_DOUBLE,0,world); + + MPI_Bcast(&tb->rflag,1,MPI_INT,0,world); + if (tb->rflag) { + MPI_Bcast(&tb->rlo,1,MPI_DOUBLE,0,world); + MPI_Bcast(&tb->rhi,1,MPI_DOUBLE,0,world); + } + MPI_Bcast(&tb->fpflag,1,MPI_INT,0,world); + if (tb->fpflag) { + MPI_Bcast(&tb->fplo,1,MPI_DOUBLE,0,world); + MPI_Bcast(&tb->fphi,1,MPI_DOUBLE,0,world); + } +} + +/* ---------------------------------------------------------------------- + build spline representation of e,f over entire range of read-in table + this function sets these values in Table: e2file,f2file +------------------------------------------------------------------------- */ + +void PairTableRX::spline_table(Table *tb) +{ + memory->create(tb->e2file,tb->ninput,"pair:e2file"); + memory->create(tb->f2file,tb->ninput,"pair:f2file"); + + double ep0 = - tb->ffile[0]; + double epn = - tb->ffile[tb->ninput-1]; + spline(tb->rfile,tb->efile,tb->ninput,ep0,epn,tb->e2file); + + if (tb->fpflag == 0) { + tb->fplo = (tb->ffile[1] - tb->ffile[0]) / (tb->rfile[1] - tb->rfile[0]); + tb->fphi = (tb->ffile[tb->ninput-1] - tb->ffile[tb->ninput-2]) / + (tb->rfile[tb->ninput-1] - tb->rfile[tb->ninput-2]); + } + + double fp0 = tb->fplo; + double fpn = tb->fphi; + spline(tb->rfile,tb->ffile,tb->ninput,fp0,fpn,tb->f2file); +} + +/* ---------------------------------------------------------------------- + extract attributes from parameter line in table section + format of line: N value R/RSQ/BITMAP lo hi FP fplo fphi + N is required, other params are optional +------------------------------------------------------------------------- */ + +void PairTableRX::param_extract(Table *tb, char *line) +{ + tb->ninput = 0; + tb->rflag = NONE; + tb->fpflag = 0; + + char *word = strtok(line," \t\n\r\f"); + while (word) { + if (strcmp(word,"N") == 0) { + word = strtok(NULL," \t\n\r\f"); + tb->ninput = atoi(word); + } else if (strcmp(word,"R") == 0 || strcmp(word,"RSQ") == 0 || + strcmp(word,"BITMAP") == 0) { + if (strcmp(word,"R") == 0) tb->rflag = RLINEAR; + else if (strcmp(word,"RSQ") == 0) tb->rflag = RSQ; + else if (strcmp(word,"BITMAP") == 0) tb->rflag = BMP; + word = strtok(NULL," \t\n\r\f"); + tb->rlo = atof(word); + word = strtok(NULL," \t\n\r\f"); + tb->rhi = atof(word); + } else if (strcmp(word,"FP") == 0) { + tb->fpflag = 1; + word = strtok(NULL," \t\n\r\f"); + tb->fplo = atof(word); + word = strtok(NULL," \t\n\r\f"); + tb->fphi = atof(word); + } else { + printf("WORD: %s\n",word); + error->one(FLERR,"Invalid keyword in pair table parameters"); + } + word = strtok(NULL," \t\n\r\f"); + } + + if (tb->ninput == 0) error->one(FLERR,"Pair table parameters did not set N"); +} + +/* ---------------------------------------------------------------------- + compute r,e,f vectors from splined values +------------------------------------------------------------------------- */ + +void PairTableRX::compute_table(Table *tb) +{ + int tlm1 = tablength-1; + + // inner = inner table bound + // cut = outer table bound + // delta = table spacing in rsq for N-1 bins + + double inner; + if (tb->rflag) inner = tb->rlo; + else inner = tb->rfile[0]; + tb->innersq = double(inner)*double(inner); + tb->delta = double(tb->cut*tb->cut - double(tb->innersq)) / double(tlm1); + tb->invdelta = double(1.0)/double(tb->delta); + + // direct lookup tables + // N-1 evenly spaced bins in rsq from inner to cut + // e,f = value at midpt of bin + // e,f are N-1 in length since store 1 value at bin midpt + // f is converted to f/r when stored in f[i] + // e,f are never a match to read-in values, always computed via spline interp + + if (tabstyle == LOOKUP) { + memory->create(tb->e,tlm1,"pair:e"); + memory->create(tb->f,tlm1,"pair:f"); + + double r,rsq; + for (int i = 0; i < tlm1; i++) { + rsq = tb->innersq + (i+0.5)*tb->delta; + r = sqrt(rsq); + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r)/r; + } + } + + // linear tables + // N-1 evenly spaced bins in rsq from inner to cut + // rsq,e,f = value at lower edge of bin + // de,df values = delta from lower edge to upper edge of bin + // rsq,e,f are N in length so de,df arrays can compute difference + // f is converted to f/r when stored in f[i] + // e,f can match read-in values, else compute via spline interp + + if (tabstyle == LINEAR) { + memory->create(tb->rsq,tablength,"pair:rsq"); + memory->create(tb->e,tablength,"pair:e"); + memory->create(tb->f,tablength,"pair:f"); + memory->create(tb->de,tlm1,"pair:de"); + memory->create(tb->df,tlm1,"pair:df"); + + double r,rsq; + for (int i = 0; i < tablength; i++) { + rsq = tb->innersq + i*tb->delta; + r = sqrt(rsq); + tb->rsq[i] = rsq; + if (tb->match) { + tb->e[i] = tb->efile[i]; + tb->f[i] = tb->ffile[i]/r; + } else { + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r)/r; + } + } + + for (int i = 0; i < tlm1; i++) { + tb->de[i] = tb->e[i+1] - tb->e[i]; + tb->df[i] = tb->f[i+1] - tb->f[i]; + } + } + + // cubic spline tables + // N-1 evenly spaced bins in rsq from inner to cut + // rsq,e,f = value at lower edge of bin + // e2,f2 = spline coefficient for each bin + // rsq,e,f,e2,f2 are N in length so have N-1 spline bins + // f is converted to f/r after e is splined + // e,f can match read-in values, else compute via spline interp + + if (tabstyle == SPLINE) { + memory->create(tb->rsq,tablength,"pair:rsq"); + memory->create(tb->e,tablength,"pair:e"); + memory->create(tb->f,tablength,"pair:f"); + memory->create(tb->e2,tablength,"pair:e2"); + memory->create(tb->f2,tablength,"pair:f2"); + + tb->deltasq6 = tb->delta*tb->delta / 6.0; + + double r,rsq; + for (int i = 0; i < tablength; i++) { + rsq = tb->innersq + i*tb->delta; + r = sqrt(rsq); + tb->rsq[i] = rsq; + if (tb->match) { + tb->e[i] = tb->efile[i]; + tb->f[i] = tb->ffile[i]/r; + } else { + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r); + } + } + + // ep0,epn = dh/dg at inner and at cut + // h(r) = e(r) and g(r) = r^2 + // dh/dg = (de/dr) / 2r = -f/2r + + double ep0 = - tb->f[0] / (2.0 * sqrt(tb->innersq)); + double epn = - tb->f[tlm1] / (2.0 * tb->cut); + spline(tb->rsq,tb->e,tablength,ep0,epn,tb->e2); + + // fp0,fpn = dh/dg at inner and at cut + // h(r) = f(r)/r and g(r) = r^2 + // dh/dg = (1/r df/dr - f/r^2) / 2r + // dh/dg in secant approx = (f(r2)/r2 - f(r1)/r1) / (g(r2) - g(r1)) + + double fp0,fpn; + double secant_factor = 0.1; + if (tb->fpflag) fp0 = (tb->fplo/sqrt(tb->innersq) - tb->f[0]/tb->innersq) / + (2.0 * sqrt(tb->innersq)); + else { + double rsq1 = tb->innersq; + double rsq2 = rsq1 + secant_factor*tb->delta; + fp0 = (splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,sqrt(rsq2)) / + sqrt(rsq2) - tb->f[0] / sqrt(rsq1)) / (secant_factor*tb->delta); + } + + if (tb->fpflag && tb->cut == tb->rfile[tb->ninput-1]) fpn = + (tb->fphi/tb->cut - tb->f[tlm1]/(tb->cut*tb->cut)) / (2.0 * tb->cut); + else { + double rsq2 = tb->cut * tb->cut; + double rsq1 = rsq2 - secant_factor*tb->delta; + fpn = (tb->f[tlm1] / sqrt(rsq2) - + splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,sqrt(rsq1)) / + sqrt(rsq1)) / (secant_factor*tb->delta); + } + + for (int i = 0; i < tablength; i++) tb->f[i] /= sqrt(tb->rsq[i]); + spline(tb->rsq,tb->f,tablength,fp0,fpn,tb->f2); + } + + // bitmapped linear tables + // 2^N bins from inner to cut, spaced in bitmapped manner + // f is converted to f/r when stored in f[i] + // e,f can match read-in values, else compute via spline interp + + if (tabstyle == BITMAP) { + double r; + union_int_float_t rsq_lookup; + int masklo,maskhi; + + // linear lookup tables of length ntable = 2^n + // stored value = value at lower edge of bin + + init_bitmap(inner,tb->cut,tablength,masklo,maskhi,tb->nmask,tb->nshiftbits); + int ntable = 1 << tablength; + int ntablem1 = ntable - 1; + + memory->create(tb->rsq,ntable,"pair:rsq"); + memory->create(tb->e,ntable,"pair:e"); + memory->create(tb->f,ntable,"pair:f"); + memory->create(tb->de,ntable,"pair:de"); + memory->create(tb->df,ntable,"pair:df"); + memory->create(tb->drsq,ntable,"pair:drsq"); + + union_int_float_t minrsq_lookup; + minrsq_lookup.i = 0 << tb->nshiftbits; + minrsq_lookup.i |= maskhi; + + for (int i = 0; i < ntable; i++) { + rsq_lookup.i = i << tb->nshiftbits; + rsq_lookup.i |= masklo; + if (rsq_lookup.f < tb->innersq) { + rsq_lookup.i = i << tb->nshiftbits; + rsq_lookup.i |= maskhi; + } + r = sqrtf(rsq_lookup.f); + tb->rsq[i] = rsq_lookup.f; + if (tb->match) { + tb->e[i] = tb->efile[i]; + tb->f[i] = tb->ffile[i]/r; + } else { + tb->e[i] = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + tb->f[i] = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r)/r; + } + minrsq_lookup.f = MIN(minrsq_lookup.f,rsq_lookup.f); + } + + tb->innersq = minrsq_lookup.f; + + for (int i = 0; i < ntablem1; i++) { + tb->de[i] = tb->e[i+1] - tb->e[i]; + tb->df[i] = tb->f[i+1] - tb->f[i]; + tb->drsq[i] = 1.0/(tb->rsq[i+1] - tb->rsq[i]); + } + + // get the delta values for the last table entries + // tables are connected periodically between 0 and ntablem1 + + tb->de[ntablem1] = tb->e[0] - tb->e[ntablem1]; + tb->df[ntablem1] = tb->f[0] - tb->f[ntablem1]; + tb->drsq[ntablem1] = 1.0/(tb->rsq[0] - tb->rsq[ntablem1]); + + // get the correct delta values at itablemax + // smallest r is in bin itablemin + // largest r is in bin itablemax, which is itablemin-1, + // or ntablem1 if itablemin=0 + + // deltas at itablemax only needed if corresponding rsq < cut*cut + // if so, compute deltas between rsq and cut*cut + // if tb->match, data at cut*cut is unavailable, so we'll take + // deltas at itablemax-1 as a good approximation + + double e_tmp,f_tmp; + int itablemin = minrsq_lookup.i & tb->nmask; + itablemin >>= tb->nshiftbits; + int itablemax = itablemin - 1; + if (itablemin == 0) itablemax = ntablem1; + int itablemaxm1 = itablemax - 1; + if (itablemax == 0) itablemaxm1 = ntablem1; + rsq_lookup.i = itablemax << tb->nshiftbits; + rsq_lookup.i |= maskhi; + if (rsq_lookup.f < tb->cut*tb->cut) { + if (tb->match) { + tb->de[itablemax] = tb->de[itablemaxm1]; + tb->df[itablemax] = tb->df[itablemaxm1]; + tb->drsq[itablemax] = tb->drsq[itablemaxm1]; + } else { + rsq_lookup.f = tb->cut*tb->cut; + r = sqrtf(rsq_lookup.f); + e_tmp = splint(tb->rfile,tb->efile,tb->e2file,tb->ninput,r); + f_tmp = splint(tb->rfile,tb->ffile,tb->f2file,tb->ninput,r)/r; + tb->de[itablemax] = e_tmp - tb->e[itablemax]; + tb->df[itablemax] = f_tmp - tb->f[itablemax]; + tb->drsq[itablemax] = 1.0/(rsq_lookup.f - tb->rsq[itablemax]); + } + } + } +} + +/* ---------------------------------------------------------------------- + set all ptrs in a table to NULL, so can be freed safely +------------------------------------------------------------------------- */ + +void PairTableRX::null_table(Table *tb) +{ + tb->rfile = tb->efile = tb->ffile = NULL; + tb->e2file = tb->f2file = NULL; + tb->rsq = tb->drsq = tb->e = tb->de = NULL; + tb->f = tb->df = tb->e2 = tb->f2 = NULL; +} + +/* ---------------------------------------------------------------------- + free all arrays in a table +------------------------------------------------------------------------- */ + +void PairTableRX::free_table(Table *tb) +{ + memory->destroy(tb->rfile); + memory->destroy(tb->efile); + memory->destroy(tb->ffile); + memory->destroy(tb->e2file); + memory->destroy(tb->f2file); + + memory->destroy(tb->rsq); + memory->destroy(tb->drsq); + memory->destroy(tb->e); + memory->destroy(tb->de); + memory->destroy(tb->f); + memory->destroy(tb->df); + memory->destroy(tb->e2); + memory->destroy(tb->f2); +} + +/* ---------------------------------------------------------------------- + spline and splint routines modified from Numerical Recipes +------------------------------------------------------------------------- */ + +void PairTableRX::spline(double *x, double *y, int n, + double yp1, double ypn, double *y2) +{ + int i,k; + double p,qn,sig,un; + double *u = new double[n]; + + if (yp1 > 0.99e30) y2[0] = u[0] = 0.0; + else { + y2[0] = -0.5; + u[0] = (3.0/(x[1]-x[0])) * ((y[1]-y[0]) / (x[1]-x[0]) - yp1); + } + for (i = 1; i < n-1; i++) { + sig = (x[i]-x[i-1]) / (x[i+1]-x[i-1]); + p = sig*y2[i-1] + 2.0; + y2[i] = (sig-1.0) / p; + u[i] = (y[i+1]-y[i]) / (x[i+1]-x[i]) - (y[i]-y[i-1]) / (x[i]-x[i-1]); + u[i] = (6.0*u[i] / (x[i+1]-x[i-1]) - sig*u[i-1]) / p; + } + if (ypn > 0.99e30) qn = un = 0.0; + else { + qn = 0.5; + un = (3.0/(x[n-1]-x[n-2])) * (ypn - (y[n-1]-y[n-2]) / (x[n-1]-x[n-2])); + } + y2[n-1] = (un-qn*u[n-2]) / (qn*y2[n-2] + 1.0); + for (k = n-2; k >= 0; k--) y2[k] = y2[k]*y2[k+1] + u[k]; + + delete [] u; +} + +/* ---------------------------------------------------------------------- */ + +double PairTableRX::splint(double *xa, double *ya, double *y2a, int n, double x) +{ + int klo,khi,k; + double h,b,a,y; + + klo = 0; + khi = n-1; + while (khi-klo > 1) { + k = (khi+klo) >> 1; + if (xa[k] > x) khi = k; + else klo = k; + } + h = xa[khi]-xa[klo]; + a = (xa[khi]-x) / h; + b = (x-xa[klo]) / h; + y = a*ya[klo] + b*ya[khi] + + ((a*a*a-a)*y2a[klo] + (b*b*b-b)*y2a[khi]) * (h*h)/6.0; + return y; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairTableRX::write_restart(FILE *fp) +{ + write_restart_settings(fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairTableRX::read_restart(FILE *fp) +{ + read_restart_settings(fp); + allocate(); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairTableRX::write_restart_settings(FILE *fp) +{ + fwrite(&tabstyle,sizeof(int),1,fp); + fwrite(&tablength,sizeof(int),1,fp); + fwrite(&ewaldflag,sizeof(int),1,fp); + fwrite(&pppmflag,sizeof(int),1,fp); + fwrite(&msmflag,sizeof(int),1,fp); + fwrite(&dispersionflag,sizeof(int),1,fp); + fwrite(&tip4pflag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairTableRX::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&tabstyle,sizeof(int),1,fp); + fread(&tablength,sizeof(int),1,fp); + fread(&ewaldflag,sizeof(int),1,fp); + fread(&pppmflag,sizeof(int),1,fp); + fread(&msmflag,sizeof(int),1,fp); + fread(&dispersionflag,sizeof(int),1,fp); + fread(&tip4pflag,sizeof(int),1,fp); + } + MPI_Bcast(&tabstyle,1,MPI_INT,0,world); + MPI_Bcast(&tablength,1,MPI_INT,0,world); + MPI_Bcast(&ewaldflag,1,MPI_INT,0,world); + MPI_Bcast(&pppmflag,1,MPI_INT,0,world); + MPI_Bcast(&msmflag,1,MPI_INT,0,world); + MPI_Bcast(&dispersionflag,1,MPI_INT,0,world); + MPI_Bcast(&tip4pflag,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- */ + +double PairTableRX::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + int itable; + double fraction,value,a,b,phi; + int tlm1 = tablength - 1; + + Table *tb = &tables[tabindex[itype][jtype]]; + double fraction1_i, fraction1_j; + double fraction2_i, fraction2_j; + double fractionOld1_i, fractionOld1_j; + double fractionOld2_i, fractionOld2_j; + + fraction = double(0.0); + a = double(0.0); + b = double(0.0); + + getParams(i,fractionOld1_i,fractionOld2_i,fraction1_i,fraction2_i); + getParams(j,fractionOld1_j,fractionOld2_j,fraction1_j,fraction2_j); + + if (rsq < tb->innersq) error->one(FLERR,"Pair distance < table inner cutoff"); + + if (tabstyle == LOOKUP) { + itable = static_cast ((rsq-tb->innersq) * tb->invdelta); + if (itable >= tlm1) error->one(FLERR,"Pair distance > table outer cutoff"); + fforce = factor_lj * tb->f[itable]; + } else if (tabstyle == LINEAR) { + itable = static_cast ((rsq-tb->innersq) * tb->invdelta); + if (itable >= tlm1) error->one(FLERR,"Pair distance > table outer cutoff"); + fraction = (rsq - tb->rsq[itable]) * tb->invdelta; + value = tb->f[itable] + fraction*tb->df[itable]; + fforce = factor_lj * value; + } else if (tabstyle == SPLINE) { + itable = static_cast ((rsq-tb->innersq) * tb->invdelta); + if (itable >= tlm1) error->one(FLERR,"Pair distance > table outer cutoff"); + b = (rsq - tb->rsq[itable]) * tb->invdelta; + a = 1.0 - b; + value = a * tb->f[itable] + b * tb->f[itable+1] + + ((a*a*a-a)*tb->f2[itable] + (b*b*b-b)*tb->f2[itable+1]) * + tb->deltasq6; + fforce = factor_lj * value; + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & tb->nmask; + itable >>= tb->nshiftbits; + fraction = (rsq_lookup.f - tb->rsq[itable]) * tb->drsq[itable]; + value = tb->f[itable] + fraction*tb->df[itable]; + fforce = factor_lj * value; + } + + if (strcmp(site1,site2) == 0) fforce = sqrt(fraction1_i*fraction2_j)*fforce; + else fforce = (sqrt(fraction1_i*fraction2_j) + sqrt(fraction2_i*fraction1_j))*fforce; + + if (tabstyle == LOOKUP) + phi = tb->e[itable]; + else if (tabstyle == LINEAR || tabstyle == BITMAP) + phi = tb->e[itable] + fraction*tb->de[itable]; + else + phi = a * tb->e[itable] + b * tb->e[itable+1] + + ((a*a*a-a)*tb->e2[itable] + (b*b*b-b)*tb->e2[itable+1]) * tb->deltasq6; + + if (strcmp(site1,site2) == 0) phi = sqrt(fraction1_i*fraction2_j)*phi; + else phi = (sqrt(fraction1_i*fraction2_j) + sqrt(fraction2_i*fraction1_j))*phi; + + return factor_lj*phi; +} + +/* ---------------------------------------------------------------------- + return the Coulomb cutoff for tabled potentials + called by KSpace solvers which require that all pairwise cutoffs be the same + loop over all tables not just those indexed by tabindex[i][j] since + no way to know which tables are active since pair::init() not yet called +------------------------------------------------------------------------- */ + +void *PairTableRX::extract(const char *str, int &dim) +{ + if (strcmp(str,"cut_coul") != 0) return NULL; + if (ntables == 0) error->all(FLERR,"All pair coeffs are not set"); + + double cut_coul = tables[0].cut; + for (int m = 1; m < ntables; m++) + if (tables[m].cut != cut_coul) + error->all(FLERR, + "Pair table cutoffs must all be equal to use with KSpace"); + dim = 0; + return &tables[0].cut; +} + +/* ---------------------------------------------------------------------- */ + +void PairTableRX::getParams(int id, double &fractionOld1, double &fractionOld2, double &fraction1, double &fraction2) +{ + double fractionOld, fraction; + double nTotal, nTotalOld; + + fractionOld = double(0.0); + fraction = double(0.0); + fractionOld1 = double(0.0); + fractionOld2 = double(0.0); + fraction1 = double(0.0); + fraction2 = double(0.0); + + nTotal = double(0.0); + nTotalOld = double(0.0); + for(int ispecies=0;ispeciesdvector[ispecies][id]; + nTotalOld += atom->dvector[ispecies+nspecies][id]; + } + if(nTotal < 1e-8 || nTotalOld < 1e-8) + error->all(FLERR,"The number of molecules in CG particle is less than 1e-8."); + + for (int ispecies = 0; ispecies < nspecies; ispecies++) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0){ + fractionOld1 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction1 = atom->dvector[ispecies][id]/nTotal; + } + if (strcmp(site2,&atom->dname[ispecies][0]) == 0){ + fractionOld2 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction2 = atom->dvector[ispecies][id]/nTotal; + } + } + + for (int ispecies = 0; ispecies < nspecies; ispecies++) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0){ + fractionOld1 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction1 = atom->dvector[ispecies][id]/nTotal; + } + if (strcmp(site2,&atom->dname[ispecies][0]) == 0){ + fractionOld2 = atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction2 = atom->dvector[ispecies][id]/nTotal; + } + + if (strcmp(site1,"1fluid") == 0 || strcmp(site2,"1fluid") == 0) { + if (strcmp(site1,&atom->dname[ispecies][0]) == 0 || strcmp(site2,&atom->dname[ispecies][0]) == 0) continue; + fractionOld += atom->dvector[ispecies+nspecies][id]/nTotalOld; + fraction += atom->dvector[ispecies][id]/nTotal; + } + } + if(strcmp(site1,"1fluid") == 0){ + fractionOld1 = fractionOld; + fraction1 = fraction; + } + if(strcmp(site2,"1fluid") == 0){ + fractionOld2 = fractionOld; + fraction2 = fraction; + } +} + diff --git a/src/USER-DPD/pair_table_rx.h b/src/USER-DPD/pair_table_rx.h new file mode 100644 index 0000000000..00b83bafb7 --- /dev/null +++ b/src/USER-DPD/pair_table_rx.h @@ -0,0 +1,172 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(table/rx,PairTableRX) + +#else + +#ifndef LMP_PAIR_TABLE_RX_H +#define LMP_PAIR_TABLE_RX_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairTableRX : public Pair { + public: + PairTableRX(class LAMMPS *); + virtual ~PairTableRX(); + + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + double single(int, int, int, int, double, double, double, double &); + void *extract(const char *, int &); + + protected: + enum{LOOKUP,LINEAR,SPLINE,BITMAP}; + + int tabstyle,tablength; + struct Table { + int ninput,rflag,fpflag,match,ntablebits; + int nshiftbits,nmask; + double rlo,rhi,fplo,fphi,cut; + double *rfile,*efile,*ffile; + double *e2file,*f2file; + double innersq,delta,invdelta,deltasq6; + double *rsq,*drsq,*e,*de,*f,*df,*e2,*f2; + }; + int ntables; + Table *tables; + + int **tabindex; + + void allocate(); + void read_table(Table *, char *, char *); + void param_extract(Table *, char *); + void bcast_table(Table *); + void spline_table(Table *); + void compute_table(Table *); + void null_table(Table *); + void free_table(Table *); + void spline(double *, double *, int, double, double, double *); + double splint(double *, double *, double *, int, double); + + int nspecies; + char *site1, *site2; + void getParams(int, double &, double &, double &, double &); + +/* class FixRX *fixRX; */ +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Pair distance < table inner cutoff + +Two atoms are closer together than the pairwise table allows. + +E: Pair distance > table outer cutoff + +Two atoms are further apart than the pairwise table allows. + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Unknown table style in pair_style command + +Style of table is invalid for use with pair_style table command. + +E: PairTableRX requires a fix rx command + +The fix rx command must come before the pair style command in the input file + +E: There are no rx species specified + +There must be at least one species specified through the fix rx command + +E: Site1 name not recognized in pair coefficients + +The site1 keyword does not match the species keywords specified throug the fix rx command + +E: Illegal number of pair table entries + +There must be at least 2 table entries. + +E: Invalid pair table length + +Length of read-in pair table is invalid + +E: Invalid pair table cutoff + +Cutoffs in pair_coeff command are not valid with read-in pair table. + +E: Bitmapped table in file does not match requested table + +Setting for bitmapped table in pair_coeff command must match table +in file exactly. + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +E: Cannot open file %s + +The specified file cannot be opened. Check that the path and name are +correct. If the file is a compressed file, also check that the gzip +executable can be found and run. + +E: Did not find keyword in table file + +Keyword used in pair_coeff command was not found in table file. + +E: Bitmapped table is incorrect length in table file + +Number of table entries is not a correct power of 2. + +E: Invalid keyword in pair table parameters + +Keyword used in list of table parameters is not recognized. + +E: Pair table parameters did not set N + +List of pair table parameters must include N setting. + +E: Pair table cutoffs must all be equal to use with KSpace + +When using pair style table with a long-range KSpace solver, the +cutoffs for all atom type pairs must all be the same, since the +long-range solver starts at that cutoff. + +E: The number of molecules in CG particle is less than 1e-8 + +Self-explanatory. Check the species concentrations have been properly set +and check the reaction kinetic solver parameters in fix rx to more for +sufficient accuracy. + +*/ diff --git a/src/USER-EFF/fix_nph_eff.cpp b/src/USER-EFF/fix_nph_eff.cpp index dc6bfe20d5..0fe8c8e6db 100644 --- a/src/USER-EFF/fix_nph_eff.cpp +++ b/src/USER-EFF/fix_nph_eff.cpp @@ -46,7 +46,7 @@ FixNPHEff::FixNPHEff(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPHEff::FixNPHEff(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-EFF/fix_npt_eff.cpp b/src/USER-EFF/fix_npt_eff.cpp index 36a6f87cba..02f09839b1 100644 --- a/src/USER-EFF/fix_npt_eff.cpp +++ b/src/USER-EFF/fix_npt_eff.cpp @@ -46,7 +46,7 @@ FixNPTEff::FixNPTEff(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTEff::FixNPTEff(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-EFF/fix_nvt_eff.cpp b/src/USER-EFF/fix_nvt_eff.cpp index 36a9ff3293..ab82f9e0f8 100644 --- a/src/USER-EFF/fix_nvt_eff.cpp +++ b/src/USER-EFF/fix_nvt_eff.cpp @@ -46,5 +46,5 @@ FixNVTEff::FixNVTEff(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/USER-EFF/fix_nvt_sllod_eff.cpp b/src/USER-EFF/fix_nvt_sllod_eff.cpp index 1f6dea658f..1b4ec1f3fb 100644 --- a/src/USER-EFF/fix_nvt_sllod_eff.cpp +++ b/src/USER-EFF/fix_nvt_sllod_eff.cpp @@ -58,7 +58,7 @@ FixNVTSllodEff::FixNVTSllodEff(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-INTEL/fix_npt_intel.cpp b/src/USER-INTEL/fix_npt_intel.cpp index 150464413e..2bfbd5e735 100644 --- a/src/USER-INTEL/fix_npt_intel.cpp +++ b/src/USER-INTEL/fix_npt_intel.cpp @@ -46,7 +46,7 @@ FixNPTIntel::FixNPTIntel(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTIntel::FixNPTIntel(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-INTEL/fix_nvt_intel.cpp b/src/USER-INTEL/fix_nvt_intel.cpp index 65854b07a8..3fe712c9ab 100644 --- a/src/USER-INTEL/fix_nvt_intel.cpp +++ b/src/USER-INTEL/fix_nvt_intel.cpp @@ -45,6 +45,6 @@ FixNVTIntel::FixNVTIntel(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/USER-INTEL/fix_nvt_sllod_intel.cpp b/src/USER-INTEL/fix_nvt_sllod_intel.cpp index 5505abb9ce..bab748ad74 100644 --- a/src/USER-INTEL/fix_nvt_sllod_intel.cpp +++ b/src/USER-INTEL/fix_nvt_sllod_intel.cpp @@ -59,7 +59,7 @@ FixNVTSllodIntel::FixNVTSllodIntel(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MISC/README b/src/USER-MISC/README index dc1a76e014..131befd5ca 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -35,7 +35,6 @@ dihedral_style nharmonic, Loukas Peristeras, loukas.peristeras at scienomics.com dihedral_style quadratic, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12 dihedral_style table, Andrew Jewett, jewett.aij@gmail.com, 10 Jan 12 fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 -fix ave/spatial/sphere, Niall Jackson (Imperial College), niall.jackson at gmail.com, 18 Nov 14 fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015 fix gle, Michele Ceriotti (EPFL Lausanne), michele.ceriotti at gmail.com, 24 Nov 2014 fix imd, Axel Kohlmeyer, akohlmey at gmail.com, 9 Nov 2009 diff --git a/src/USER-MISC/fix_ave_spatial_sphere.cpp b/src/USER-MISC/fix_ave_spatial_sphere.cpp deleted file mode 100644 index dd89d38779..0000000000 --- a/src/USER-MISC/fix_ave_spatial_sphere.cpp +++ /dev/null @@ -1,1063 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Adapted from fix ave/spatial by Niall Jackson -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_ave_spatial_sphere.h" -#include "atom.h" -#include "update.h" -#include "force.h" -#include "domain.h" -#include "region.h" -#include "lattice.h" -#include "modify.h" -#include "compute.h" -#include "input.h" -#include "variable.h" -#include "memory.h" -#include "error.h" -#include "math_const.h" - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace MathConst; - -//the different types of variables that we can track -enum{V,F,DENSITY_NUMBER,DENSITY_MASS,COMPUTE,FIX,VARIABLE,CONSTANT}; -//normalisation types -enum{SAMPLE,ALL}; -//unit scaling options -enum{BOX,LATTICE,REDUCED}; -//averaging types -enum{ONE,RUNNING,WINDOW}; - -#define INVOKED_SCALAR 1 -#define INVOKED_VECTOR 2 -#define INVOKED_PERATOM 8 -#define BIG 1000000000 - -/* ---------------------------------------------------------------------- */ - -FixAveSpatialSphere::FixAveSpatialSphere(LAMMPS* lmp, int narg, char** arg) : - Fix(lmp, narg, arg) { - - if (narg < 12) error->all(FLERR, "Illegal fix ave/spatial/sphere command"); - - MPI_Comm_rank(world, &me); - - nevery= force->inumeric(FLERR, arg[3]); - nrepeat= force->inumeric(FLERR, arg[4]); - nfreq= force->inumeric(FLERR, arg[5]); - - global_freq= nfreq; - - for (int iarg = 6; iarg < 9; ++iarg) { - int dim= iarg-6; - origin_ids[dim]= NULL; - if (strncmp(arg[iarg],"c_",2) == 0 || - strncmp(arg[iarg],"v_",2) == 0) { - if(arg[iarg][0] == 'c') { - origin_type[dim]= COMPUTE; - } else { - origin_type[dim]= VARIABLE; - } - - //strip the v_/c_ off the front of the variable name - int n= strlen(arg[iarg]); - char *suffix= new char[n]; - strcpy(suffix, &arg[iarg][2]); - //does the variable name contain a [? - //(in other words, is this an array element?) - char *ptr= strchr(suffix, '['); - if(ptr) { - //if the last character ISN'T ], then the array syntax - //has been used wrongly - if(suffix[strlen(suffix)-1] != ']') { - error->all(FLERR, "Illegal fix ave/spatial/sphere command"); - } - origin_index[dim]= atoi(ptr+1); - *ptr= '\0'; - } else { - origin_index[dim]= 0; - } - //store the name of the variable - n= strlen(suffix)+1; - origin_ids[dim]= new char[n]; - strcpy(origin_ids[dim], suffix); - //tidy up the array we allocated earlier - delete[] suffix; - - if(origin_type[dim] == COMPUTE) { - int icompute= modify->find_compute(origin_ids[dim]); - if(icompute < 0) - error->all(FLERR, - "Compute ID for fix ave/spatial/sphere does not exist"); - - if(origin_index[dim] == 0 && - modify->compute[icompute]->scalar_flag != 0) - error->all(FLERR,"Compute for fix ave/spatial/sphere does not calculate a scalar"); - else if(origin_index[dim] && modify->compute[icompute]->vector_flag == 0) - error->all(FLERR, "Compute for fix ave/spatial/sphere does not calculate a vector"); - else if(origin_index[dim] && origin_index[dim] > modify->compute[icompute]->size_vector) - error->all(FLERR, "Fix ave/spatial/sphere compute vector accessed out of range"); - } else if(origin_type[dim] == VARIABLE) { - int ivariable = input->variable->find(origin_ids[dim]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix ave/spatial/sphere does not exist"); - else if (input->variable->equalstyle(ivariable) == 0) - error->all(FLERR,"Fix ave/spatial/sphere variable is not equal-style variable"); - } - } else { - origin_type[dim]= CONSTANT; - origin[dim]= force->numeric(FLERR, arg[iarg]); - } - } - - //the extrema of the radius - r_min= force->numeric(FLERR, arg[9]); - r_max= force->numeric(FLERR, arg[10]); - - //and finally, the number of spherical bins - nbins= force->inumeric(FLERR, arg[11]); - - if (r_min >= r_max) { - error->all(FLERR, "r_min must be less than r_max in fix ave/spatial/sphere"); - } - - if (nbins <= 0) { - error->all(FLERR, "nbins must be positive in fix ave/spatial/sphere"); - } - - int iarg= 12; - which= new int[narg-12]; - argindex= new int[narg-12]; - ids= new char*[narg-12]; - value2index= new int[narg-12]; - nvalues= 0; - - while(iarg < narg) { - ids[nvalues]= NULL; - - if(strcmp(arg[iarg], "vx") == 0) { - which[nvalues] = V; - argindex[nvalues++]= 0; - } else if(strcmp(arg[iarg], "vy") == 0) { - which[nvalues] = V; - argindex[nvalues++]= 1; - } else if(strcmp(arg[iarg], "vz") == 0) { - which[nvalues] = V; - argindex[nvalues++]= 2; - } else if(strcmp(arg[iarg], "fx") == 0) { - which[nvalues] = F; - argindex[nvalues++]= 0; - } else if(strcmp(arg[iarg], "fy") == 0) { - which[nvalues] = F; - argindex[nvalues++]= 1; - } else if(strcmp(arg[iarg], "fz") == 0) { - which[nvalues] = F; - argindex[nvalues++]= 2; - } else if(strcmp(arg[iarg], "density/number") == 0) { - which[nvalues] = DENSITY_NUMBER; - argindex[nvalues++]= 0; - } else if(strcmp(arg[iarg], "density/mass") == 0) { - which[nvalues] = DENSITY_MASS; - argindex[nvalues++]= 0; - } else if (strncmp(arg[iarg],"c_",2) == 0 || - strncmp(arg[iarg],"f_",2) == 0 || - strncmp(arg[iarg],"v_",2) == 0) { - if(arg[iarg][0] == 'c') which[nvalues] = COMPUTE; - else if(arg[iarg][0] == 'f') which[nvalues] = FIX; - else if(arg[iarg][0] == 'v') which[nvalues] = VARIABLE; - - //strip the v_/c_/f_ off the front of the variable name - int n= strlen(arg[iarg]); - char *suffix= new char[n]; - strcpy(suffix, &arg[iarg][2]); - - //does the variable name contain a [? - //(in other words, is this an array element?) - char *ptr= strchr(suffix, '['); - if(ptr) { - //if the last character ISN'T ], then the array syntax - //has been used wrongly - if(suffix[strlen(suffix)-1] != ']') { - error->all(FLERR, "Illegal fix ave/spatial/sphere command"); - } - argindex[nvalues]= atoi(ptr+1); - *ptr= '\0'; - } else { - argindex[nvalues]= 0; - } - - //store the name of the variable - n= strlen(suffix)+1; - ids[nvalues]= new char[n]; - strcpy(ids[nvalues], suffix); - nvalues++; - //tidy up the array we allocated earlier - delete[] suffix; - } else break; - - iarg++; - } - - //process the optional arguments - normflag= ALL; //normalise the average right at the end - scaleflag= LATTICE; // lattice units are the default - regionflag= 0; //are we restricted to a particular region? - idregion= NULL; //name of the region to sue, if so - fp= NULL; //output file - ave= ONE; //averaging mode - nwindow= 0; //number of averaging windows - overwrite= 0; //continuously overwrite output? - char *title1= NULL; - char *title2= NULL; - char *title3= NULL; - - while (iarg < narg) { - if (strcmp(arg[iarg],"norm") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (strcmp(arg[iarg+1],"all") == 0) normflag = ALL; - else if (strcmp(arg[iarg+1],"sample") == 0) normflag = SAMPLE; - else error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - iarg += 2; - } else if (strcmp(arg[iarg],"units") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX; - else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE; - else if (strcmp(arg[iarg+1],"reduced") == 0) scaleflag = REDUCED; - else error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - iarg += 2; - } else if (strcmp(arg[iarg],"region") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - int iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) - error->all(FLERR,"Region ID for fix ave/spatial does not exist"); - int n = strlen(arg[iarg+1]) + 1; - idregion = new char[n]; - strcpy(idregion,arg[iarg+1]); - regionflag = 1; - iarg += 2; - } else if (strcmp(arg[iarg],"file") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (me == 0) { - fp = fopen(arg[iarg+1],"w"); - if (fp == NULL) { - char str[128]; - sprintf(str,"Cannot open fix ave/spatial file %s",arg[iarg+1]); - error->one(FLERR,str); - } - } - iarg += 2; - } else if (strcmp(arg[iarg],"ave") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (strcmp(arg[iarg+1],"one") == 0) ave = ONE; - else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING; - else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW; - else error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (ave == WINDOW) { - if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - nwindow = force->inumeric(FLERR,arg[iarg+2]); - if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - } - iarg += 2; - if (ave == WINDOW) iarg++; - } else if (strcmp(arg[iarg],"overwrite") == 0) { - overwrite = 1; - iarg += 1; - } else if (strcmp(arg[iarg],"title1") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - delete [] title1; - int n = strlen(arg[iarg+1]) + 1; - title1 = new char[n]; - strcpy(title1,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"title2") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - delete [] title2; - int n = strlen(arg[iarg+1]) + 1; - title2 = new char[n]; - strcpy(title2,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"title3") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - delete [] title3; - int n = strlen(arg[iarg+1]) + 1; - title3 = new char[n]; - strcpy(title3,arg[iarg+1]); - iarg += 2; - } else error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - } - - //setup and error checking - if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0) - error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (nfreq % nevery || nrepeat*nevery > nfreq) - error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - if (ave != RUNNING && overwrite) - error->all(FLERR,"Illegal fix ave/spatial/sphere command"); - - //setup the variables that we need to average - for (int i = 0; i < nvalues; i++) { - if (which[i] == COMPUTE) { - int icompute = modify->find_compute(ids[i]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix ave/spatial/sphere does not exist"); - if (modify->compute[icompute]->peratom_flag == 0) - error->all(FLERR,"Fix ave/spatial/sphere compute does not " - "calculate per-atom values"); - if (argindex[i] == 0 && - modify->compute[icompute]->size_peratom_cols != 0) - error->all(FLERR,"Fix ave/spatial/sphere compute does not " - "calculate a per-atom vector"); - if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0) - error->all(FLERR,"Fix ave/spatial/sphere compute does not " - "calculate a per-atom array"); - if (argindex[i] && - argindex[i] > modify->compute[icompute]->size_peratom_cols) - error->all(FLERR, - "Fix ave/spatial/sphere compute vector is accessed out-of-range"); - - } else if (which[i] == FIX) { - int ifix = modify->find_fix(ids[i]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix ave/spatial/sphere does not exist"); - if (modify->fix[ifix]->peratom_flag == 0) - error->all(FLERR, - "Fix ave/spatial/sphere fix does not calculate per-atom values"); - if (argindex[i] && modify->fix[ifix]->size_peratom_cols != 0) - error->all(FLERR, - "Fix ave/spatial/spherefix does not calculate a per-atom vector"); - if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0) - error->all(FLERR, - "Fix ave/spatial/sphere fix does not calculate a per-atom array"); - if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols) - error->all(FLERR,"Fix ave/spatial/sphere fix vector is accessed out-of-range"); - } else if (which[i] == VARIABLE) { - int ivariable = input->variable->find(ids[i]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix ave/spatial/sphere does not exist"); - if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR,"Fix ave/spatial/sphere variable is not atom-style variable"); - } - } - - // setup the scaling - int triclinic= domain->triclinic; - if(scaleflag != REDUCED) { - if (triclinic) { - error->all(FLERR, "Fix ave/spatial/sphere for triclinic boxes requires units reduced"); - } else { - // if not in reduced units, the box must not become triclinic - no_change_box= 1; - } - } - - if(scaleflag == LATTICE) { - scale= domain->lattice->xlattice; - if(domain->lattice->xlattice != domain->lattice->ylattice - && domain->lattice->xlattice != domain->lattice->zlattice) - error->all(FLERR, "Fix ave/spatial/sphere with lattice units requires that the lattice " - "spacing be equal in all dimensions"); - } else if(scaleflag == REDUCED) { - scale= 1.0; - } else { - scale= 1.0; - } - - //apply the scaling factors - origin[0]*= scale; - origin[1]*= scale; - origin[2]*= scale; - r_min*= scale; - r_max*= scale; - r_minsq= r_min*r_min; - r_maxsq= r_max*r_max; - deltar= (r_max-r_min)/nbins; - inv_deltar= 1.0/deltar; - - //print file comment lines - if (fp && me == 0) { - if (title1) { - fprintf(fp,"%s\n",title1); - } else { - fprintf(fp,"# Spatial-averaged data for fix %s and group %s\n", id,arg[1]); - fprintf(fp,"# Spherical bins centred at ("); - for (int i= 0; i < 3; ++i) { - if(origin_type[i] == CONSTANT) fprintf(fp,"%g",origin[i]); - else fprintf(fp,"%s",arg[i+6]); - - if(i != 2) fprintf(fp, ", "); - else fprintf(fp, ")"); - } - if (scaleflag == REDUCED) { - fprintf(fp, " [reduced units]"); - } - fprintf(fp, "\n"); - } - if (title2) fprintf(fp,"%s\n",title2); - else fprintf(fp,"# Timestep Number-of-bins\n"); - if (title3) fprintf(fp,"%s\n",title3); - else { - fprintf(fp,"# Bin r Ncount"); - for (int i = 0; i < nvalues; i++) fprintf(fp," %s",arg[12+i]); - fprintf(fp,"\n"); - } - filepos = ftell(fp); - } - - delete [] title1; - delete [] title2; - delete [] title3; - - //this fix produces a global array - array_flag= 1; - size_array_rows= BIG; - size_array_cols= 1 + 1 + nvalues; - extarray= 0; //intensive value (don't divide by N when we output this) - - //initialization of remaining variables - irepeat= 0; - iwindow= window_limit= 0; - norm= 0; - maxvar= 0; - varatom= NULL; - maxatom= 0; - bin= NULL; - binvol= NULL; - maxbin= 0; - count_one= count_many= count_sum= count_total= NULL; - coord= NULL; - count_list= NULL; - values_one= values_many= values_sum= values_total= NULL; - values_list= NULL; - - //nvalid = next step on which end_of_step does something - nvalid= nextvalid(); - //make every compute update itself on step nvalid - //since we don't yet know which ones we need - //can correct this when we call end_of_step - modify->addstep_compute_all(nvalid); -} - -/* ---------------------------------------------------------------------- */ - -FixAveSpatialSphere::~FixAveSpatialSphere() -{ - delete [] which; - delete [] argindex; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; - delete [] value2index; - delete [] idregion; - for (int i= 0; i < 3; ++i) delete [] origin_ids[i]; - - if (fp && me == 0) fclose(fp); - - memory->destroy(varatom); - memory->destroy(bin); - memory->destroy(binvol); - - memory->destroy(count_one); - memory->destroy(count_many); - memory->destroy(count_sum); - memory->destroy(count_total); - memory->destroy(coord); - memory->destroy(count_list); - memory->destroy(values_one); - memory->destroy(values_many); - memory->destroy(values_sum); - memory->destroy(values_total); - memory->destroy(values_list); -} - -/* ---------------------------------------------------------------------- - tell LAMMPS at which stages in the timestep we want to be called - we only care about running at the end of a step -------------------------------------------------------------------------- */ - -int FixAveSpatialSphere::setmask() -{ - int mask = 0; - mask |= END_OF_STEP; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixAveSpatialSphere::init() -{ - //set up the region and check it's valid - if(regionflag) { - int iregion= domain->find_region(idregion); - if(iregion == -1) - error->all(FLERR,"Region ID for fix ave/spatial/sphere does not exist"); - region = domain->regions[iregion]; - } - - // set indices and check validity of all computes,fixes,variables - // check that fix frequency is acceptable - - for (int m = 0; m < 3; ++m) { - if (origin_type[m] == COMPUTE) { - int icompute = modify->find_compute(origin_ids[m]); - if (icompute < 0) - error->all(FLERR, "Compute ID for fix ave/spatial/sphere does not exist"); - origin_val2idx[m]= icompute; - } else if (origin_type[m] == VARIABLE) { - int ivariable = input->variable->find(origin_ids[m]); - if (ivariable < 0) - error->all(FLERR, "Variable name for fix ave/spatial/sphere does not exist"); - origin_val2idx[m]= ivariable; - } - } - - for (int m = 0; m < nvalues; m++) { - if (which[m] == COMPUTE) { - int icompute = modify->find_compute(ids[m]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix ave/spatial/sphere does not exist"); - value2index[m] = icompute; - - } else if (which[m] == FIX) { - int ifix = modify->find_fix(ids[m]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix ave/spatial/sphere does not exist"); - value2index[m] = ifix; - - if (nevery % modify->fix[ifix]->peratom_freq) - error->all(FLERR, - "Fix for fix ave/spatial/sphere not computed at compatible time"); - - } else if (which[m] == VARIABLE) { - int ivariable = input->variable->find(ids[m]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix ave/spatial/sphere does not exist"); - value2index[m] = ivariable; - - } else value2index[m] = -1; - } - - - // need to reset nvalid if nvalid < ntimestep b/c minimize was performed - if (nvalid < update->ntimestep) { - irepeat = 0; - nvalid = nextvalid(); - modify->addstep_compute_all(nvalid); - } -} - -/* ---------------------------------------------------------------------- - setup initial bins - only does averaging if nvalid = current timestep -------------------------------------------------------------------------- */ - -void FixAveSpatialSphere::setup(int vflag) -{ - setup_bins(); - end_of_step(); -} - -/* ---------------------------------------------------------------------- */ - -void FixAveSpatialSphere::end_of_step() -{ - //skip this step if we don't need to do anything - bigint ntimestep= update->ntimestep; - if(ntimestep != nvalid) return; - - //update region if necessary - if (regionflag) region->prematch(); - - //zero out arrays that accumulate over many samples - if(irepeat == 0) { - for(int m= 0; m < nbins; m++) { - count_many[m]= count_sum[m]= 0.0; - for(int i= 0; i < nvalues; i++) values_many[m][i]= 0.0; - } - } - - //if in reduced units, we need to update the bin volumes - if (scaleflag == REDUCED && domain->box_change) set_bin_volumes(); - - //zero out arrays for one sample - for(int m= 0; m < nbins; m++) { - count_one[m]= 0.0; - for (int i= 0; i < nvalues; i++) values_one[m][i]= 0.0; - } - - //bin each atom - int *mask= atom->mask; - int nlocal= atom->nlocal; - - if (atom->nmax > maxatom) { - maxatom= atom->nmax; - memory->destroy(bin); - memory->create(bin,maxatom,"ave/spatial/sphere:bin"); - } - - // perform the computation for one sample - // accumulate results of attributes,computes,fixes,variables to local copy - // sum within each bin, only include atoms in fix group - // compute/fix/variable may invoke computes so wrap with clear/add - modify->clearstep_compute(); - - //allocates the bins array - //each atom gets either the number of the bin into which - //it fits, or -1 - bin_atoms(); - - for(int m= 0; m < nvalues; m++) { - int n= value2index[m]; - int j= argindex[m]; - - if(which[m] == V || which[m] == F) { - double **attribute; - if(which[m] == V) attribute= atom->v; - else attribute= atom->f; - - for(int i= 0; i < nlocal; i++) { - if(mask[i] & groupbit && bin[i] > -1) { - values_one[bin[i]][m] += attribute[i][j]; - } - } - } else if(which[m] == DENSITY_NUMBER) { - for(int i= 0; i < nlocal; i++) { - if(mask[i] & groupbit && bin[i] > -1) { - values_one[bin[i]][m] += 1.0; - } - } - // density is additionally normalized by bin volume - for (int j = 0; j < nbins; j++) - values_one[j][m] /= binvol[j]; - } else if(which[m] == DENSITY_MASS) { - int *type = atom->type; - double *mass = atom->mass; - double *rmass = atom->rmass; - for(int i= 0; i < nlocal; i++) { - if(mask[i] & groupbit && bin[i] > -1) { - if (rmass) values_one[bin[i]][m] += rmass[i]; - else values_one[bin[i]][m] += mass[type[i]]; - } - } - // density is additionally normalized by bin volume - for (int j = 0; j < nbins; j++) - values_one[j][m] /= binvol[j]; - } else if(which[m] == COMPUTE) { - Compute *compute = modify->compute[n]; - if (!(compute->invoked_flag & INVOKED_PERATOM)) { - compute->compute_peratom(); - compute->invoked_flag |= INVOKED_PERATOM; - } - double *vector = compute->vector_atom; - double **array = compute->array_atom; - int jm1 = j - 1; - - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] > -1) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - - } else if(which[m] == FIX) { - double *vector = modify->fix[n]->vector_atom; - double **array = modify->fix[n]->array_atom; - int jm1 = j - 1; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] > -1) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - } else if(which[m] == VARIABLE) { - if (atom->nmax > maxvar) { - maxvar = atom->nmax; - memory->destroy(varatom); - memory->create(varatom,maxvar,"ave/spatial:varatom"); - } - - input->variable->compute_atom(n,igroup,varatom,1,0); - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] > -1) - values_one[bin[i]][m] += varatom[i]; - } - } - - // process a single sample - // if normflag = ALL, accumulate values,count separately to many - // if normflag = SAMPLE, one = value/count, accumulate one to many - // exception is SAMPLE density: no normalization by atom count - - if (normflag == ALL) { - for (int m = 0; m < nbins; m++) { - count_many[m] += count_one[m]; - for (int j = 0; j < nvalues; j++) - values_many[m][j] += values_one[m][j]; - } - } else { - MPI_Allreduce(count_one,count_many,nbins,MPI_DOUBLE,MPI_SUM,world); - for (int m = 0; m < nbins; m++) { - if (count_many[m] > 0.0) - for (int j = 0; j < nvalues; j++) { - if (which[j] == DENSITY_NUMBER || which[j] == DENSITY_MASS) - values_many[m][j] += values_one[m][j]; - else values_many[m][j] += values_one[m][j]/count_many[m]; - } - count_sum[m] += count_many[m]; - } - } - - // done if irepeat < nrepeat - // else reset irepeat and nvalid - irepeat++; - if (irepeat < nrepeat) { - nvalid += nevery; - modify->addstep_compute(nvalid); - return; - } - - irepeat++; - if (irepeat < nrepeat) { - nvalid += nevery; - modify->addstep_compute(nvalid); - return; - } - - irepeat = 0; - nvalid = ntimestep+nfreq - (nrepeat-1)*nevery; - modify->addstep_compute(nvalid); - - // time average across samples - // if normflag = ALL, final is total value / total count - // if normflag = SAMPLE, final is sum of ave / repeat - // exception is densities: normalized by repeat, not total count - - double repeat = nrepeat; - double mv2d = force->mv2d; - if (normflag == ALL) { - MPI_Allreduce(count_many,count_sum,nbins,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues, - MPI_DOUBLE,MPI_SUM,world); - for (int m = 0; m < nbins; m++) { - if (count_sum[m] > 0.0) - for (int j = 0; j < nvalues; j++) - if (which[j] == DENSITY_NUMBER) values_sum[m][j] /= repeat; - else if (which[j] == DENSITY_MASS) values_sum[m][j] *= mv2d/repeat; - else values_sum[m][j] /= count_sum[m]; - count_sum[m] /= repeat; - } - } else { - MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues, - MPI_DOUBLE,MPI_SUM,world); - for (int m = 0; m < nbins; m++) { - for (int j = 0; j < nvalues; j++) - values_sum[m][j] /= repeat; - count_sum[m] /= repeat; - } - } - - // if ave = ONE, only single Nfreq timestep value is needed - // if ave = RUNNING, combine with all previous Nfreq timestep values - // if ave = WINDOW, comine with nwindow most recent Nfreq timestep values - - if (ave == ONE) { - for (int m = 0; m < nbins; m++) { - for (int i = 0; i < nvalues; i++) - values_total[m][i] = values_sum[m][i]; - count_total[m] = count_sum[m]; - } - norm = 1; - - } else if (ave == RUNNING) { - for (int m = 0; m < nbins; m++) { - for (int i = 0; i < nvalues; i++) - values_total[m][i] += values_sum[m][i]; - count_total[m] += count_sum[m]; - } - norm++; - - } else if (ave == WINDOW) { - for (int m = 0; m < nbins; m++) { - for (int i = 0; i < nvalues; i++) { - values_total[m][i] += values_sum[m][i]; - if (window_limit) values_total[m][i] -= values_list[iwindow][m][i]; - values_list[iwindow][m][i] = values_sum[m][i]; - } - count_total[m] += count_sum[m]; - if (window_limit) count_total[m] -= count_list[iwindow][m]; - count_list[iwindow][m] = count_sum[m]; - } - - iwindow++; - if (iwindow == nwindow) { - iwindow = 0; - window_limit = 1; - } - if (window_limit) norm = nwindow; - else norm = iwindow; - } - - // output result to file - - if (fp && me == 0) { - if (overwrite) fseek(fp,filepos,SEEK_SET); - fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nbins); - for (int m = 0; m < nbins; m++) { - fprintf(fp," %d %g %g",m+1,coord[m], - count_total[m]/norm); - for (int i = 0; i < nvalues; i++) - fprintf(fp," %g",values_total[m][i]/norm); - fprintf(fp,"\n"); - } - - fflush(fp); - if (overwrite) { - long fileend = ftell(fp); - if (fileend > 0) ftruncate(fileno(fp),fileend); - } - } -} - -/* ---------------------------------------------------------------------- - setup the bins - called at setup() -------------------------------------------------------------------------- */ - -void FixAveSpatialSphere::setup_bins() -{ - if(nbins > maxbin) { - maxbin= nbins; - memory->grow(count_one,nbins,"ave/spatial/sphere:count_one"); - memory->grow(count_many,nbins,"ave/spatial/sphere:count_many"); - memory->grow(count_sum,nbins,"ave/spatial/sphere:count_sum"); - memory->grow(count_total,nbins,"ave/spatial/sphere:count_total"); - - memory->grow(coord,nbins,"ave/spatial/sphere:coord"); - memory->grow(binvol,nbins, "ave/spatial/sphere:binvol"); - memory->grow(values_one,nbins,nvalues,"ave/spatial/sphere:values_one"); - memory->grow(values_many,nbins,nvalues,"ave/spatial/sphere:values_many"); - memory->grow(values_sum,nbins,nvalues,"ave/spatial/sphere:values_sum"); - memory->grow(values_total,nbins,nvalues,"ave/spatial/sphere:values_total"); - - //the count and value lists are only relevant for windowed averaging - if(ave == WINDOW) { - memory->create(count_list,nwindow,nbins,"ave/spatial/sphere:count_list"); - memory->create(values_list,nwindow,nbins,nvalues, - "ave/spatial/sphere:values_list"); - } - - //reinitialize the regrown count and values - for(int m= 0; m < nbins; m++) { - for(int i= 0; i < nvalues; i++) values_total[m][i]= 0.0; - count_total[m]= 0.0; - } - } - - //set the bin coordinates - for(int i= 0; i < nbins; i++) - coord[i]= r_min + (i+0.5)*deltar; - - set_bin_volumes(); -} - -/* ---------------------------------------------------------------------- - set the bin volumes - called at setup() and when averaging occurs if box size changes -------------------------------------------------------------------------- */ - -void FixAveSpatialSphere::set_bin_volumes() -{ - double last_vol= THIRD*MY_4PI*r_minsq*r_min; - for(int i= 0; i < nbins; i++) { - double temp_r= r_min + (i+1)*deltar; - double temp_vol= THIRD*MY_4PI*temp_r*temp_r*temp_r; - binvol[i]= temp_vol-last_vol; - last_vol= temp_vol; - } - - //if in reduced co-ordinates, need to adjust the bin volumes appropriately - if (scaleflag == REDUCED) { - double xprd= domain->xprd; - double yprd= domain->yprd; - double zprd= domain->zprd; - for(int i= 0; i < nbins; i++) { - binvol[i]*= xprd*yprd*zprd; - } - } -} - -/* ---------------------------------------------------------------------- - assign atoms to bins -------------------------------------------------------------------------- */ - -void FixAveSpatialSphere::bin_atoms() -{ - //update the origin coordinates if necessary - //unscale the existing coordinates - if(scaleflag == REDUCED) domain->lamda2x(origin, origin); - - for (int i = 0; i < 3; ++i) { - if (origin_type[i] == COMPUTE) { - Compute *compute = modify->compute[origin_val2idx[i]]; - if (origin_index[i] == 0) { - if (!(compute->invoked_flag & INVOKED_SCALAR)) { - compute->compute_scalar(); - compute->invoked_flag |= INVOKED_SCALAR; - } - origin[i] = compute->scalar; - } else { - if (!(compute->invoked_flag & INVOKED_VECTOR)) { - compute->compute_vector(); - compute->invoked_flag |= INVOKED_VECTOR; - } - origin[i] = compute->vector[origin_index[i]-1]; - } - } else if (origin_type[i] == VARIABLE) { - origin[i] = input->variable->compute_equal(origin_val2idx[i]); - } - } - //make sure that the origin point is INSIDE the box - domain->remap(origin); - //rescale if necessary - if(scaleflag == REDUCED) domain->x2lamda(origin, origin); - - double **x= atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - double *prd,*prd_half; - //deal with the periodic boundary conditions - if(domain->periodicity[0] || domain->periodicity[1] || domain->periodicity[2]) { - if(scaleflag == REDUCED) { - prd= domain->prd_lamda; - prd_half= domain->prd_half_lamda; - } else { - prd= domain->prd; - prd_half= domain->prd_half; - } - } - - double rsq, tmp; - - if(!regionflag) { - if(scaleflag == REDUCED) { - //convert the atomic coordinates into reduced coordinates - domain->x2lamda(nlocal); - } - for(int i= 0; i < nlocal; i++) { - if(mask[i] & groupbit) { - rsq= 0.0; - for(int dim= 0; dim < 3; dim++) { - tmp= x[i][dim] - origin[dim]; - if(domain->periodicity[dim]) { - if(tmp < -prd_half[dim]) tmp+= prd[dim]; - else if(tmp >= prd_half[dim]) tmp-= prd[dim]; - } - rsq+= tmp*tmp; - } - if(rsq >= r_minsq && rsq <= r_maxsq) { - double r= sqrt(rsq); - int ibin= static_cast((r-r_min)*inv_deltar); - ibin = MAX(ibin,0); - ibin = MIN(ibin,nbins-1); - bin[i]= ibin; - count_one[ibin]+= 1.0; - } else { - bin[i]= -1; - } - } - } - if(scaleflag == REDUCED) { - //convert the atomic coordinates back into "real" coordinates - domain->lamda2x(nlocal); - } - } else { - for(int i= 0; i < nlocal; i++) { - if(mask[i] & groupbit && region->match(x[i][0], x[i][1], x[i][2])) { - rsq= 0.0; - for(int dim= 0; dim < 3; dim++) { - tmp= x[i][dim] - origin[dim]; - if(domain->periodicity[dim]) { - if(tmp < -0.5*prd[dim]) tmp+= prd[dim]; - else if(tmp >= 0.5*prd[dim]) tmp-= prd[dim]; - } - rsq+= tmp*tmp; - } - if(rsq >= r_minsq && rsq <= r_maxsq) { - double r= sqrt(rsq); - int ibin= static_cast((r-r_min)*inv_deltar); - ibin = MAX(ibin,0); - ibin = MIN(ibin,nbins-1); - bin[i]= ibin; - count_one[ibin]+= 1.0; - } else { - bin[i]= -1; - } - } - } - } -} - -/* ---------------------------------------------------------------------- - return I,J array value - if I exceeds current bins, return 0.0 instead of generating an error - column 1 = bin coords, next column = count, remaining columns = Nvalues -------------------------------------------------------------------------- */ - -double FixAveSpatialSphere::compute_array(int i, int j) -{ - if (values_total == NULL) return 0.0; - if (i >= nbins || j > nvalues) return 0.0; - if (!norm) return 0.0; - if (j == 0) return coord[i]; - if (j == 1) return count_total[i]/norm; - return values_total[i][j]/norm; -} - - -/* ---------------------------------------------------------------------- - calculate nvalid = next step on which end_of_step does something - can be this timestep if multiple of nfreq and nrepeat = 1 - else backup from next multiple of nfreq -------------------------------------------------------------------------- */ - -bigint FixAveSpatialSphere::nextvalid() -{ - bigint nvalid = (update->ntimestep/nfreq)*nfreq + nfreq; - if (nvalid-nfreq == update->ntimestep && nrepeat == 1) - nvalid = update->ntimestep; - else - nvalid -= (nrepeat-1)*nevery; - if (nvalid < update->ntimestep) nvalid += nfreq; - return nvalid; -} - -/* ---------------------------------------------------------------------- - memory usage of varatom and bins -------------------------------------------------------------------------- */ - -double FixAveSpatialSphere::memory_usage() -{ - double bytes = maxvar * sizeof(double); // varatom - bytes += maxatom * sizeof(int); // bin - bytes += 4*nbins * sizeof(double); // count one,many,sum,total - bytes += nbins * sizeof(double); // coord - bytes += nvalues*nbins * sizeof(double); // values one,many,sum,total - bytes += nwindow*nbins * sizeof(double); // count_list - bytes += nwindow*nbins*nvalues * sizeof(double); // values_list - return bytes; -} diff --git a/src/USER-MISC/fix_ave_spatial_sphere.h b/src/USER-MISC/fix_ave_spatial_sphere.h deleted file mode 100644 index 1ac550c5e0..0000000000 --- a/src/USER-MISC/fix_ave_spatial_sphere.h +++ /dev/null @@ -1,186 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* Adapted from fix ave/spatial by Niall Jackson */ - -#ifdef FIX_CLASS - -FixStyle(ave/spatial/sphere,FixAveSpatialSphere) - -#else - -#ifndef LMP_FIX_AVE_SPATIAL_SPHERE_H -#define LMP_FIX_AVE_SPATIAL_SPHERE_H - -#include -#include "fix.h" - -namespace LAMMPS_NS { - -class FixAveSpatialSphere : public Fix { - public: - FixAveSpatialSphere(class LAMMPS *, int, char **); - ~FixAveSpatialSphere(); - int setmask(); - void init(); - void setup(int); - void end_of_step(); - double memory_usage(); - double compute_array(int,int); - - private: - int me; //rank of the MPI Process - int nfreq; //fix nfreq parameter - int nrepeat; //fix nrepeat parameter - bigint nvalid; //the next timestep on which I'll be invoked - - //controls for various optional behaviours - int normflag; //what type of normalisation to do - int norm; - int scaleflag; //default units (lattice, box, etc.) - double scale; //coordinate scaling factor - int regionflag; //restricted to a particular region? - char *idregion; //name of the region to use - class Region *region; //pointer to the region - FILE *fp; //pointer for the output file - long int filepos; //file position pointer - int ave; //averaging mode - int nwindow; //number of averaging windows - int iwindow; //current window - int window_limit; - int overwrite; //continuously overwrite the output (requires ave running) - - //used to keep track of which per-atom values we deal with - int nvalues; //number of variables to average - int *argindex; //if the variable is an array, this is the offset in that array - int *value2index; - int *which; //what sort of variable is arg i? Variable, compute, etc? - char **ids; //names of the variables - int maxvar; //current size of the varatom array - double* varatom; //contains the peratom values of a variable - - //details of the sphere and the bins - int maxbin; //current number of bins in memory (relevant if box changes) - int nbins; //number of spherical bins - int maxatom; //current size of the bin array - int *bin; //stores the bin of each atom - double *coord; //values of r at the mid points of the bins - double *binvol; //volumes of the bins - double *count_one, *count_many, *count_sum, *count_total; //bin populations - double **values_one, **values_many, **values_sum, **values_total; //accumulated bin values - double origin[3]; //origin coordinates of the sphere - int origin_type[3]; //are origin coordinates constant or variable? - char *origin_ids[3]; //store the names of variables used to access the origin - int origin_index[3]; //indices for the origin variables - int origin_val2idx[3]; //compute/variable indices - double r_min, r_minsq; //minimum radius, and its square - double r_max, r_maxsq; //maximum radius, and its square - double deltar, inv_deltar; //radial width of a bin, and its inverse (and their squares) - - void setup_bins(); //create the bin arrays - void set_bin_volumes(); //calculate the volume of each bin - void bin_atoms(); //put the atom into bins based on their coordinates - bigint nextvalid(); //return the next timestep on which this is invoked - - //NEED TO BE CATEGORISED - int irepeat; - double **count_list; - double ***values_list; - -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Region ID for fix ave/spatial/spherical does not exist - -Self-explanatory. - -E: Cannot open fix ave/spatial/spherical file %s - -The specified file cannot be opened. Check that the path and name are -correct. - -E: Compute ID for fix ave/spatial/spherical does not exist - -Self-explanatory. - -E: Fix ave/spatial/spherical compute does not calculate per-atom values - -A compute used by fix ave/spatial/spherical must generate per-atom values. - -E: Fix ave/spatial/spherical compute does not calculate a per-atom vector - -A compute used by fix ave/spatial/spherical must generate per-atom values. - -E: Fix ave/spatial/spherical compute does not calculate a per-atom array - -Self-explanatory. - -E: Fix ave/spatial/spherical compute vector is accessed out-of-range - -The index for the vector is out of bounds. - -E: Fix ID for fix ave/spatial/spherical does not exist - -Self-explanatory. - -E: Fix ave/spatial/spherical fix does not calculate per-atom values - -A fix used by fix ave/spatial/spherical must generate per-atom values. - -E: Fix ave/spatial/spherical fix does not calculate a per-atom vector - -A fix used by fix ave/spatial/spherical must generate per-atom values. - -E: Fix ave/spatial/spherical fix does not calculate a per-atom array - -Self-explanatory. - -E: Fix ave/spatial/spherical fix vector is accessed out-of-range - -The index for the vector is out of bounds. - -E: Variable name for fix ave/spatial/spherical does not exist - -Self-explanatory. - -E: Fix ave/spatial/spherical variable is not atom-style variable - -A variable used by fix ave/spatial/spherical must generate per-atom values. - -E: Fix ave/spatial/spherical for triclinic boxes requires units reduced - -Self-explanatory. - -E: Fix ave/spatial/spherical requires reduced units if the box changes size. - -If the box size changes, only the units reduced option can be -used. - -E: Invalid timestep reset for fix ave/spatial/sphere - -Resetting the timestep has invalidated the sequence of timesteps this -fix needs to process. - -*/ diff --git a/src/USER-OMP/fix_nph_asphere_omp.cpp b/src/USER-OMP/fix_nph_asphere_omp.cpp index 3e0a6c9df0..dfcbc87e6f 100644 --- a/src/USER-OMP/fix_nph_asphere_omp.cpp +++ b/src/USER-OMP/fix_nph_asphere_omp.cpp @@ -46,7 +46,7 @@ FixNPHAsphereOMP::FixNPHAsphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPHAsphereOMP::FixNPHAsphereOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nph_omp.cpp b/src/USER-OMP/fix_nph_omp.cpp index be21da2eed..f2a4e66f55 100644 --- a/src/USER-OMP/fix_nph_omp.cpp +++ b/src/USER-OMP/fix_nph_omp.cpp @@ -46,7 +46,7 @@ FixNPHOMP::FixNPHOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPHOMP::FixNPHOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nph_sphere_omp.cpp b/src/USER-OMP/fix_nph_sphere_omp.cpp index a5626f9d1c..670009de2f 100644 --- a/src/USER-OMP/fix_nph_sphere_omp.cpp +++ b/src/USER-OMP/fix_nph_sphere_omp.cpp @@ -46,7 +46,7 @@ FixNPHSphereOMP::FixNPHSphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPHSphereOMP::FixNPHSphereOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nphug_omp.cpp b/src/USER-OMP/fix_nphug_omp.cpp index 7721781769..b652cf563a 100644 --- a/src/USER-OMP/fix_nphug_omp.cpp +++ b/src/USER-OMP/fix_nphug_omp.cpp @@ -135,7 +135,7 @@ FixNPHugOMP::FixNPHugOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -153,7 +153,7 @@ FixNPHugOMP::FixNPHugOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; // create a new compute potential energy compute diff --git a/src/USER-OMP/fix_npt_asphere_omp.cpp b/src/USER-OMP/fix_npt_asphere_omp.cpp index 00bafe661a..1db62d40c0 100644 --- a/src/USER-OMP/fix_npt_asphere_omp.cpp +++ b/src/USER-OMP/fix_npt_asphere_omp.cpp @@ -46,7 +46,7 @@ FixNPTAsphereOMP::FixNPTAsphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTAsphereOMP::FixNPTAsphereOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_npt_omp.cpp b/src/USER-OMP/fix_npt_omp.cpp index c4af48542a..5610f62f36 100644 --- a/src/USER-OMP/fix_npt_omp.cpp +++ b/src/USER-OMP/fix_npt_omp.cpp @@ -46,7 +46,7 @@ FixNPTOMP::FixNPTOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTOMP::FixNPTOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_npt_sphere_omp.cpp b/src/USER-OMP/fix_npt_sphere_omp.cpp index 6baee93cb4..d71d1380b9 100644 --- a/src/USER-OMP/fix_npt_sphere_omp.cpp +++ b/src/USER-OMP/fix_npt_sphere_omp.cpp @@ -46,7 +46,7 @@ FixNPTSphereOMP::FixNPTSphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTSphereOMP::FixNPTSphereOMP(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nvt_asphere_omp.cpp b/src/USER-OMP/fix_nvt_asphere_omp.cpp index 23cc2e9581..bb1e784a37 100644 --- a/src/USER-OMP/fix_nvt_asphere_omp.cpp +++ b/src/USER-OMP/fix_nvt_asphere_omp.cpp @@ -45,5 +45,5 @@ FixNVTAsphereOMP::FixNVTAsphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nvt_omp.cpp b/src/USER-OMP/fix_nvt_omp.cpp index 18d02bff4d..f8f3c15b76 100644 --- a/src/USER-OMP/fix_nvt_omp.cpp +++ b/src/USER-OMP/fix_nvt_omp.cpp @@ -45,5 +45,5 @@ FixNVTOMP::FixNVTOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/USER-OMP/fix_nvt_sllod_omp.cpp b/src/USER-OMP/fix_nvt_sllod_omp.cpp index 416a28856b..a829d49c0f 100644 --- a/src/USER-OMP/fix_nvt_sllod_omp.cpp +++ b/src/USER-OMP/fix_nvt_sllod_omp.cpp @@ -65,7 +65,7 @@ FixNVTSllodOMP::FixNVTSllodOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-OMP/fix_nvt_sphere_omp.cpp b/src/USER-OMP/fix_nvt_sphere_omp.cpp index 6db9ad849a..22eda99883 100644 --- a/src/USER-OMP/fix_nvt_sphere_omp.cpp +++ b/src/USER-OMP/fix_nvt_sphere_omp.cpp @@ -45,5 +45,5 @@ FixNVTSphereOMP::FixNVTSphereOMP(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/USER-OMP/fix_omp.cpp b/src/USER-OMP/fix_omp.cpp index cd90ef6e15..e3adb6c268 100644 --- a/src/USER-OMP/fix_omp.cpp +++ b/src/USER-OMP/fix_omp.cpp @@ -45,15 +45,8 @@ #include "suffix.h" -#if defined(LMP_USER_CUDA) -#include "cuda_modify_flags.h" -#endif - using namespace LAMMPS_NS; using namespace FixConst; -#if defined(LMP_USER_CUDA) -using namespace FixConstCuda; -#endif static int get_tid() { @@ -157,18 +150,6 @@ FixOMP::~FixOMP() int FixOMP::setmask() { - // compatibility with USER-CUDA - // our fix doesn't need any data transfer. -#if defined(LMP_USER_CUDA) - if (lmp->cuda) { - int mask = 0; - mask |= PRE_FORCE_CUDA; - mask |= PRE_FORCE_RESPA; - mask |= MIN_PRE_FORCE; - return mask; - } -#endif - int mask = 0; mask |= PRE_FORCE; mask |= PRE_FORCE_RESPA; diff --git a/src/USER-REAXC/pair_reax_c.cpp b/src/USER-REAXC/pair_reax_c.cpp index 59b39d4534..b1a14f84e6 100644 --- a/src/USER-REAXC/pair_reax_c.cpp +++ b/src/USER-REAXC/pair_reax_c.cpp @@ -386,7 +386,6 @@ void PairReaxC::init_style( ) delete [] fixarg; fix_reax = (FixReaxC *) modify->fix[modify->nfix-1]; } - } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-TALLY/compute_force_tally.cpp b/src/USER-TALLY/compute_force_tally.cpp index 90464d7949..e9ecedd5ab 100644 --- a/src/USER-TALLY/compute_force_tally.cpp +++ b/src/USER-TALLY/compute_force_tally.cpp @@ -56,6 +56,7 @@ ComputeForceTally::ComputeForceTally(LAMMPS *lmp, int narg, char **arg) : ComputeForceTally::~ComputeForceTally() { if (force && force->pair) force->pair->del_tally_callback(this); + memory->destroy(fatom); delete[] vector; } diff --git a/src/USER-TALLY/compute_pe_tally.cpp b/src/USER-TALLY/compute_pe_tally.cpp index f18a58e44e..68c00b6d2e 100644 --- a/src/USER-TALLY/compute_pe_tally.cpp +++ b/src/USER-TALLY/compute_pe_tally.cpp @@ -55,6 +55,7 @@ ComputePETally::ComputePETally(LAMMPS *lmp, int narg, char **arg) : ComputePETally::~ComputePETally() { if (force && force->pair) force->pair->del_tally_callback(this); + memory->destroy(eatom); delete[] vector; } diff --git a/src/USER-TALLY/compute_stress_tally.cpp b/src/USER-TALLY/compute_stress_tally.cpp index 2a5f522636..2575bd372a 100644 --- a/src/USER-TALLY/compute_stress_tally.cpp +++ b/src/USER-TALLY/compute_stress_tally.cpp @@ -56,6 +56,7 @@ ComputeStressTally::ComputeStressTally(LAMMPS *lmp, int narg, char **arg) : ComputeStressTally::~ComputeStressTally() { if (force && force->pair) force->pair->del_tally_callback(this); + memory->destroy(stress); delete[] vector; } diff --git a/src/accelerator_cuda.h b/src/accelerator_cuda.h deleted file mode 100644 index be81718280..0000000000 --- a/src/accelerator_cuda.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifndef LMP_ACCELERATOR_CUDA_H -#define LMP_ACCELERATOR_CUDA_H - -// true interface to USER-CUDA -// used when USER-CUDA is installed - -#ifdef LMP_USER_CUDA - -#include "user_cuda.h" -#include "comm_cuda.h" -#include "domain_cuda.h" -#include "neighbor_cuda.h" -#include "modify_cuda.h" -#include "verlet_cuda.h" - -#else - -// dummy interface to USER-CUDA -// needed for compiling when USER-CUDA is not installed - -#include "comm_brick.h" -#include "domain.h" -#include "neighbor.h" -#include "modify.h" -#include "verlet.h" - -namespace LAMMPS_NS { - -class Cuda { - public: - int cuda_exists; - int oncpu; - - Cuda(class LAMMPS *) {cuda_exists = 0;} - ~Cuda() {} - void accelerator(int, char **) {} - void evsetup_eatom_vatom(int, int) {} - void downloadAll() {} - void uploadAll() {} -}; - -class CommCuda : public CommBrick { - public: - CommCuda(class LAMMPS *lmp) : CommBrick(lmp) {} - ~CommCuda() {} -}; - -class DomainCuda : public Domain { - public: - DomainCuda(class LAMMPS *lmp) : Domain(lmp) {} - ~DomainCuda() {} -}; - -class NeighborCuda : public Neighbor { - public: - NeighborCuda(class LAMMPS *lmp) : Neighbor(lmp) {} - ~NeighborCuda() {} -}; - -class ModifyCuda : public Modify { - public: - ModifyCuda(class LAMMPS *lmp) : Modify(lmp) {} - ~ModifyCuda() {} -}; - -class VerletCuda : public Verlet { - public: - VerletCuda(class LAMMPS *lmp, int narg, char **arg) : Verlet(lmp,narg,arg) {} - ~VerletCuda() {} -}; - -} - -#endif -#endif diff --git a/src/atom.cpp b/src/atom.cpp index 8df360221c..87a36d09da 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -32,7 +32,6 @@ #include "domain.h" #include "group.h" #include "molecule.h" -#include "accelerator_cuda.h" #include "atom_masks.h" #include "math_const.h" #include "memory.h" @@ -44,7 +43,6 @@ using namespace MathConst; #define DELTA 1 #define DELTA_MEMSTR 1024 #define EPSILON 1.0e-6 -#define CUDA_CHUNK 3000 enum{LAYOUT_UNIFORM,LAYOUT_NONUNIFORM,LAYOUT_TILED}; // several files @@ -1716,10 +1714,6 @@ void Atom::sort() nextsort = (update->ntimestep/sortfreq)*sortfreq + sortfreq; - // download data from GPU if necessary - - if (lmp->cuda && !lmp->cuda->oncpu) lmp->cuda->downloadAll(); - // re-setup sort bins if needed if (domain->box_change) setup_sort_bins(); @@ -1795,10 +1789,6 @@ void Atom::sort() current[empty] = permute[empty]; } - // upload data back to GPU if necessary - - if (lmp->cuda && !lmp->cuda->oncpu) lmp->cuda->uploadAll(); - // sanity check that current = permute //int flag = 0; @@ -1817,25 +1807,12 @@ void Atom::setup_sort_bins() { // binsize: // user setting if explicitly set - // 1/2 of neighbor cutoff for non-CUDA - // CUDA_CHUNK atoms/proc for CUDA + // default = 1/2 of neighbor cutoff // check if neighbor cutoff = 0.0 double binsize; if (userbinsize > 0.0) binsize = userbinsize; - else if (!lmp->cuda) binsize = 0.5 * neighbor->cutneighmax; - else { - if (domain->dimension == 3) { - double vol = (domain->boxhi[0]-domain->boxlo[0]) * - (domain->boxhi[1]-domain->boxlo[1]) * - (domain->boxhi[2]-domain->boxlo[2]); - binsize = pow(1.0*CUDA_CHUNK/natoms*vol,1.0/3.0); - } else { - double area = (domain->boxhi[0]-domain->boxlo[0]) * - (domain->boxhi[1]-domain->boxlo[1]); - binsize = pow(1.0*CUDA_CHUNK/natoms*area,1.0/2.0); - } - } + else binsize = 0.5 * neighbor->cutneighmax; if (binsize == 0.0) error->all(FLERR,"Atom sorting has bin size = 0.0"); double bininv = 1.0/binsize; diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index c6f54ec19e..a8fa982c00 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -33,7 +33,7 @@ AtomVec::AtomVec(LAMMPS *lmp) : Pointers(lmp) mass_type = dipole_type = 0; forceclearflag = 0; size_data_bonus = 0; - cudable = kokkosable = 0; + kokkosable = 0; nargcopy = 0; argcopy = NULL; @@ -81,8 +81,6 @@ void AtomVec::init() deform_groupbit = domain->deform_groupbit; h_rate = domain->h_rate; - if (lmp->cuda != NULL && !cudable) - error->all(FLERR,"USER-CUDA package requires a cuda enabled atom_style"); if (lmp->kokkos != NULL && !kokkosable) error->all(FLERR,"KOKKOS package requires a kokkos enabled atom_style"); } diff --git a/src/atom_vec.h b/src/atom_vec.h index 66bfd14608..267cc599d1 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -43,9 +43,7 @@ class AtomVec : protected Pointers { class Molecule **onemols; // list of molecules for style template int nset; // # of molecules in list - int cudable; // 1 if atom style is CUDA-enabled int kokkosable; // 1 if atom style is KOKKOS-enabled - int *maxsend; // CUDA-specific variable int nargcopy; // copy of command-line args for atom_style command char **argcopy; // used when AtomVec is realloced (restart,replicate) diff --git a/src/balance.cpp b/src/balance.cpp index c615db6112..db7361703c 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -325,10 +325,6 @@ void Balance::command(int narg, char **arg) bisection(1); } - // output of final result - - if (outflag) dumpout(update->ntimestep,fp); - // reset proc sub-domains // for either brick or tiled comm style @@ -344,6 +340,10 @@ void Balance::command(int narg, char **arg) delete irregular; if (domain->triclinic) domain->lamda2x(atom->nlocal); + // output of final result + + if (outflag) dumpout(update->ntimestep,fp); + // check if any atoms were lost bigint natoms; diff --git a/src/comm.cpp b/src/comm.cpp index 825460720d..f29d1bf7df 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -688,6 +688,10 @@ void Comm::ring(int n, int nper, void *inbuf, int messtag, int maxbytes; MPI_Allreduce(&nbytes,&maxbytes,1,MPI_INT,MPI_MAX,world); + // no need to communicate without data + + if (maxbytes == 0) return; + char *buf,*bufcopy; memory->create(buf,maxbytes,"comm:buf"); memory->create(bufcopy,maxbytes,"comm:bufcopy"); diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index 98f406b293..058de915ba 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -45,8 +45,6 @@ enum{LAYOUT_UNIFORM,LAYOUT_NONUNIFORM,LAYOUT_TILED}; // several files CommTiled::CommTiled(LAMMPS *lmp) : Comm(lmp) { - if (lmp->cuda) - error->all(FLERR,"USER-CUDA package does not yet support comm_style tiled"); if (lmp->kokkos) error->all(FLERR,"KOKKOS package does not yet support comm_style tiled"); @@ -65,8 +63,6 @@ CommTiled::CommTiled(LAMMPS *lmp) : Comm(lmp) // CommTiled::CommTiled(LAMMPS *lmp, Comm *oldcomm) : Comm(*oldcomm) { - if (lmp->cuda) - error->all(FLERR,"USER-CUDA package does not yet support comm_style tiled"); if (lmp->kokkos) error->all(FLERR,"KOKKOS package does not yet support comm_style tiled"); diff --git a/src/compute_angmom_chunk.cpp b/src/compute_angmom_chunk.cpp index 93a843ac31..5e88f5bc25 100644 --- a/src/compute_angmom_chunk.cpp +++ b/src/compute_angmom_chunk.cpp @@ -136,9 +136,11 @@ void ComputeAngmomChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // compute angmom for each chunk diff --git a/src/compute_dipole_chunk.cpp b/src/compute_dipole_chunk.cpp index 449fb002b6..cb618055f6 100644 --- a/src/compute_dipole_chunk.cpp +++ b/src/compute_dipole_chunk.cpp @@ -159,10 +159,11 @@ void ComputeDipoleChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - if (masstotal[i] == 0.0) masstotal[i] = 1.0; - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // compute dipole for each chunk diff --git a/src/compute_gyration.cpp b/src/compute_gyration.cpp index 0c1c58a4fd..7f06df9103 100644 --- a/src/compute_gyration.cpp +++ b/src/compute_gyration.cpp @@ -109,6 +109,7 @@ void ComputeGyration::compute_vector() } MPI_Allreduce(rg,vector,6,MPI_DOUBLE,MPI_SUM,world); - if (masstotal == 0.0) return; - for (int i = 0; i < 6; i++) vector[i] = vector[i]/masstotal; + if (masstotal > 0.0) + for (int i = 0; i < 6; i++) + vector[i] /= masstotal; } diff --git a/src/compute_gyration_chunk.cpp b/src/compute_gyration_chunk.cpp index e006a82299..58fe33bc3c 100644 --- a/src/compute_gyration_chunk.cpp +++ b/src/compute_gyration_chunk.cpp @@ -143,7 +143,8 @@ void ComputeGyrationChunk::compute_vector() MPI_Allreduce(rg,rgall,nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) - rgall[i] = sqrt(rgall[i]/masstotal[i]); + if (masstotal[i] > 0.0) + rgall[i] = sqrt(rgall[i]/masstotal[i]); } /* ---------------------------------------------------------------------- */ @@ -191,9 +192,12 @@ void ComputeGyrationChunk::compute_array() if (nchunk) MPI_Allreduce(&rgt[0][0],&rgtall[0][0],nchunk*6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < nchunk; i++) - for (j = 0; j < 6; j++) - rgtall[i][j] = rgtall[i][j]/masstotal[i]; + for (i = 0; i < nchunk; i++) { + if (masstotal[i] > 0.0) { + for (j = 0; j < 6; j++) + rgtall[i][j] = rgtall[i][j]/masstotal[i]; + } + } } @@ -253,9 +257,11 @@ void ComputeGyrationChunk::com_chunk() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } } diff --git a/src/compute_inertia_chunk.cpp b/src/compute_inertia_chunk.cpp index 33660b839f..c4e83fa4a1 100644 --- a/src/compute_inertia_chunk.cpp +++ b/src/compute_inertia_chunk.cpp @@ -136,9 +136,11 @@ void ComputeInertiaChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // compute inertia tensor for each chunk diff --git a/src/compute_msd_chunk.cpp b/src/compute_msd_chunk.cpp index 9d9ddcb3bd..30eee1d64a 100644 --- a/src/compute_msd_chunk.cpp +++ b/src/compute_msd_chunk.cpp @@ -201,9 +201,11 @@ void ComputeMSDChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // MSD is difference between current and initial COM diff --git a/src/compute_omega_chunk.cpp b/src/compute_omega_chunk.cpp index c437dd66b3..54e0b8f906 100644 --- a/src/compute_omega_chunk.cpp +++ b/src/compute_omega_chunk.cpp @@ -138,9 +138,11 @@ void ComputeOmegaChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // compute inertia tensor for each chunk diff --git a/src/compute_temp_chunk.cpp b/src/compute_temp_chunk.cpp index 5a5853514f..87d6e11864 100644 --- a/src/compute_temp_chunk.cpp +++ b/src/compute_temp_chunk.cpp @@ -472,9 +472,13 @@ void ComputeTempChunk::vcm_compute() MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world); for (i = 0; i < nchunk; i++) { - vcmall[i][0] /= masstotal[i]; - vcmall[i][1] /= masstotal[i]; - vcmall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + vcmall[i][0] /= masstotal[i]; + vcmall[i][1] /= masstotal[i]; + vcmall[i][2] /= masstotal[i]; + } else { + vcmall[i][0] = vcmall[i][1] = vcmall[i][2] = 0.0; + } } } @@ -689,7 +693,7 @@ void ComputeTempChunk::internal(int icol) void ComputeTempChunk::remove_bias(int i, double *v) { - int index = cchunk->ichunk[i]; + int index = cchunk->ichunk[i]-1; if (index < 0) return; v[0] -= vcmall[index][0]; v[1] -= vcmall[index][1]; @@ -711,11 +715,11 @@ void ComputeTempChunk::remove_bias_all() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - index = ichunk[i]; + index = ichunk[i]-1; if (index < 0) continue; - v[i][0] -= vbias[0]; - v[i][1] -= vbias[1]; - v[i][2] -= vbias[2]; + v[i][0] -= vcmall[index][0]; + v[i][1] -= vcmall[index][1]; + v[i][2] -= vcmall[index][2]; } } @@ -726,7 +730,7 @@ void ComputeTempChunk::remove_bias_all() void ComputeTempChunk::restore_bias(int i, double *v) { - int index = cchunk->ichunk[i]; + int index = cchunk->ichunk[i]-1; if (index < 0) return; v[0] += vcmall[index][0]; v[1] += vcmall[index][1]; @@ -749,11 +753,11 @@ void ComputeTempChunk::restore_bias_all() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - index = ichunk[i]; + index = ichunk[i]-1; if (index < 0) continue; - v[i][0] += vbias[0]; - v[i][1] += vbias[1]; - v[i][2] += vbias[2]; + v[i][0] += vcmall[index][0]; + v[i][1] += vcmall[index][1]; + v[i][2] += vcmall[index][2]; } } diff --git a/src/compute_torque_chunk.cpp b/src/compute_torque_chunk.cpp index 41ae0c628c..5462debcfc 100644 --- a/src/compute_torque_chunk.cpp +++ b/src/compute_torque_chunk.cpp @@ -136,9 +136,11 @@ void ComputeTorqueChunk::compute_array() MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - comall[i][0] /= masstotal[i]; - comall[i][1] /= masstotal[i]; - comall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + comall[i][0] /= masstotal[i]; + comall[i][1] /= masstotal[i]; + comall[i][2] /= masstotal[i]; + } } // compute torque on each chunk diff --git a/src/compute_vcm_chunk.cpp b/src/compute_vcm_chunk.cpp index a3751fa13a..cd864b2aa8 100644 --- a/src/compute_vcm_chunk.cpp +++ b/src/compute_vcm_chunk.cpp @@ -146,9 +146,11 @@ void ComputeVCMChunk::compute_array() MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world); for (int i = 0; i < nchunk; i++) { - vcmall[i][0] /= masstotal[i]; - vcmall[i][1] /= masstotal[i]; - vcmall[i][2] /= masstotal[i]; + if (masstotal[i] > 0.0) { + vcmall[i][0] /= masstotal[i]; + vcmall[i][1] /= masstotal[i]; + vcmall[i][2] /= masstotal[i]; + } else vcmall[i][0] = vcmall[i][1] = vcmall[i][2] = 0.0; } } diff --git a/src/fix_ave_spatial.cpp b/src/fix_ave_spatial.cpp deleted file mode 100644 index 2a72090741..0000000000 --- a/src/fix_ave_spatial.cpp +++ /dev/null @@ -1,1538 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Pieter in 't Veld (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "fix_ave_spatial.h" -#include "atom.h" -#include "update.h" -#include "force.h" -#include "domain.h" -#include "region.h" -#include "lattice.h" -#include "modify.h" -#include "compute.h" -#include "input.h" -#include "variable.h" -#include "comm.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; -using namespace FixConst; - -enum{LOWER,CENTER,UPPER,COORD}; -enum{V,F,DENSITY_NUMBER,DENSITY_MASS,COMPUTE,FIX,VARIABLE}; -enum{SAMPLE,ALL}; -enum{BOX,LATTICE,REDUCED}; -enum{ONE,RUNNING,WINDOW}; -enum{NODISCARD,MIXED,YESDISCARD}; - -#define INVOKED_PERATOM 8 - -/* ---------------------------------------------------------------------- */ - -FixAveSpatial::FixAveSpatial(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - if (comm->me == 0) - error->warning(FLERR,"The fix ave/spatial command has been replaced " - "by the more flexible fix ave/chunk and compute chunk/atom " - "commands -- fix ave/spatial will be removed in " - "the summer of 2015"); - - if (narg < 6) error->all(FLERR,"Illegal fix ave/spatial command"); - - MPI_Comm_rank(world,&me); - - nevery = force->inumeric(FLERR,arg[3]); - nrepeat = force->inumeric(FLERR,arg[4]); - nfreq = force->inumeric(FLERR,arg[5]); - - global_freq = nfreq; - no_change_box = 1; - - ndim = 0; - int iarg = 6; - while (iarg < narg && ndim < 3) { - if (iarg+3 > narg) break; - if (strcmp(arg[iarg],"x") == 0) dim[ndim] = 0; - else if (strcmp(arg[iarg],"y") == 0) dim[ndim] = 1; - else if (strcmp(arg[iarg],"z") == 0) dim[ndim] = 2; - else break; - - if (dim[ndim] == 2 && domain->dimension == 2) - error->all(FLERR,"Cannot use fix ave/spatial z for 2 dimensional model"); - - if (strcmp(arg[iarg+1],"lower") == 0) originflag[ndim] = LOWER; - else if (strcmp(arg[iarg+1],"center") == 0) originflag[ndim] = CENTER; - else if (strcmp(arg[iarg+1],"upper") == 0) originflag[ndim] = UPPER; - else originflag[ndim] = COORD; - if (originflag[ndim] == COORD) - origin[ndim] = force->numeric(FLERR,arg[iarg+1]); - - delta[ndim] = force->numeric(FLERR,arg[iarg+2]); - ndim++; - iarg += 3; - } - - if (!ndim) error->all(FLERR,"Illegal fix ave/spatial command"); - if (ndim == 2 && dim[0] == dim[1]) - error->all(FLERR,"Same dimension twice in fix ave/spatial"); - if (ndim == 3 && (dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2])) - error->all(FLERR,"Same dimension twice in fix ave/spatial"); - - // parse values until one isn't recognized - - which = new int[narg-9]; - argindex = new int[narg-9]; - ids = new char*[narg-9]; - value2index = new int[narg-9]; - nvalues = 0; - - while (iarg < narg) { - ids[nvalues] = NULL; - - if (strcmp(arg[iarg],"vx") == 0) { - which[nvalues] = V; - argindex[nvalues++] = 0; - } else if (strcmp(arg[iarg],"vy") == 0) { - which[nvalues] = V; - argindex[nvalues++] = 1; - } else if (strcmp(arg[iarg],"vz") == 0) { - which[nvalues] = V; - argindex[nvalues++] = 2; - - } else if (strcmp(arg[iarg],"fx") == 0) { - which[nvalues] = F; - argindex[nvalues++] = 0; - } else if (strcmp(arg[iarg],"fy") == 0) { - which[nvalues] = F; - argindex[nvalues++] = 1; - } else if (strcmp(arg[iarg],"fz") == 0) { - which[nvalues] = F; - argindex[nvalues++] = 2; - - } else if (strcmp(arg[iarg],"density/number") == 0) { - which[nvalues] = DENSITY_NUMBER; - argindex[nvalues++] = 0; - } else if (strcmp(arg[iarg],"density/mass") == 0) { - which[nvalues] = DENSITY_MASS; - argindex[nvalues++] = 0; - - } else if (strncmp(arg[iarg],"c_",2) == 0 || - strncmp(arg[iarg],"f_",2) == 0 || - strncmp(arg[iarg],"v_",2) == 0) { - if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE; - else if (arg[iarg][0] == 'f') which[nvalues] = FIX; - else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE; - - int n = strlen(arg[iarg]); - char *suffix = new char[n]; - strcpy(suffix,&arg[iarg][2]); - - char *ptr = strchr(suffix,'['); - if (ptr) { - if (suffix[strlen(suffix)-1] != ']') - error->all(FLERR,"Illegal fix ave/spatial command"); - argindex[nvalues] = atoi(ptr+1); - *ptr = '\0'; - } else argindex[nvalues] = 0; - - n = strlen(suffix) + 1; - ids[nvalues] = new char[n]; - strcpy(ids[nvalues],suffix); - nvalues++; - delete [] suffix; - - } else break; - - iarg++; - } - - if (nvalues == 0) error->all(FLERR,"No input values for fix ave/spatial"); - - // optional args - - regionflag = 0; - idregion = NULL; - minflag[0] = LOWER; - minflag[1] = LOWER; - minflag[2] = LOWER; - maxflag[0] = UPPER; - maxflag[1] = UPPER; - maxflag[2] = UPPER; - discard = MIXED; - normflag = ALL; - ave = ONE; - scaleflag = LATTICE; - fp = NULL; - nwindow = 0; - overwrite = 0; - char *title1 = NULL; - char *title2 = NULL; - char *title3 = NULL; - - while (iarg < narg) { - if (strcmp(arg[iarg],"region") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - int iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) - error->all(FLERR,"Region ID for fix ave/spatial does not exist"); - int n = strlen(arg[iarg+1]) + 1; - idregion = new char[n]; - strcpy(idregion,arg[iarg+1]); - regionflag = 1; - iarg += 2; - } else if (strcmp(arg[iarg],"bound") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - int idim; - if (strcmp(arg[iarg+1],"x") == 0) idim = 0; - else if (strcmp(arg[iarg+1],"y") == 0) idim = 1; - else if (strcmp(arg[iarg+1],"z") == 0) idim = 2; - else error->all(FLERR,"Illegal fix ave/spatial command"); - if (strcmp(arg[iarg+2],"lower") == 0) minflag[idim] = LOWER; - else minflag[idim] = COORD; - if (minflag[idim] == COORD) - minvalue[idim] = force->numeric(FLERR,arg[iarg+2]); - if (strcmp(arg[iarg+3],"upper") == 0) maxflag[idim] = UPPER; - else maxflag[idim] = COORD; - if (maxflag[idim] == COORD) - maxvalue[idim] = force->numeric(FLERR,arg[iarg+3]); - else error->all(FLERR,"Illegal fix ave/spatial command"); - iarg += 4; - } else if (strcmp(arg[iarg],"discard") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - if (strcmp(arg[iarg+1],"mixed") == 0) discard = MIXED; - else if (strcmp(arg[iarg+1],"no") == 0) discard = NODISCARD; - else if (strcmp(arg[iarg+1],"yes") == 0) discard = YESDISCARD; - else error->all(FLERR,"Illegal fix ave/spatial command"); - iarg += 2; - } else if (strcmp(arg[iarg],"norm") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - if (strcmp(arg[iarg+1],"all") == 0) normflag = ALL; - else if (strcmp(arg[iarg+1],"sample") == 0) normflag = SAMPLE; - else error->all(FLERR,"Illegal fix ave/spatial command"); - iarg += 2; - } else if (strcmp(arg[iarg],"ave") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - if (strcmp(arg[iarg+1],"one") == 0) ave = ONE; - else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING; - else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW; - else error->all(FLERR,"Illegal fix ave/spatial command"); - if (ave == WINDOW) { - if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - nwindow = force->inumeric(FLERR,arg[iarg+2]); - if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/spatial command"); - } - iarg += 2; - if (ave == WINDOW) iarg++; - } else if (strcmp(arg[iarg],"units") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX; - else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE; - else if (strcmp(arg[iarg+1],"reduced") == 0) scaleflag = REDUCED; - else error->all(FLERR,"Illegal fix ave/spatial command"); - iarg += 2; - } else if (strcmp(arg[iarg],"file") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - if (me == 0) { - fp = fopen(arg[iarg+1],"w"); - if (fp == NULL) { - char str[128]; - sprintf(str,"Cannot open fix ave/spatial file %s",arg[iarg+1]); - error->one(FLERR,str); - } - } - iarg += 2; - } else if (strcmp(arg[iarg],"overwrite") == 0) { - overwrite = 1; - iarg += 1; - } else if (strcmp(arg[iarg],"title1") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - delete [] title1; - int n = strlen(arg[iarg+1]) + 1; - title1 = new char[n]; - strcpy(title1,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"title2") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - delete [] title2; - int n = strlen(arg[iarg+1]) + 1; - title2 = new char[n]; - strcpy(title2,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"title3") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - delete [] title3; - int n = strlen(arg[iarg+1]) + 1; - title3 = new char[n]; - strcpy(title3,arg[iarg+1]); - iarg += 2; - } else error->all(FLERR,"Illegal fix ave/spatial command"); - } - - // setup and error check - - if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0) - error->all(FLERR,"Illegal fix ave/spatial command"); - if (nfreq % nevery || nrepeat*nevery > nfreq) - error->all(FLERR,"Illegal fix ave/spatial command"); - if (delta[0] <= 0.0) error->all(FLERR,"Illegal fix ave/spatial command"); - if (ndim >= 2 && delta[1] <= 0.0) - error->all(FLERR,"Illegal fix ave/spatial command"); - if (ndim == 3 && delta[2] <= 0.0) - error->all(FLERR,"Illegal fix ave/spatial command"); - if (ave != RUNNING && overwrite) - error->all(FLERR,"Illegal fix ave/spatial command"); - - for (int i = 0; i < nvalues; i++) { - if (which[i] == COMPUTE) { - int icompute = modify->find_compute(ids[i]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix ave/spatial does not exist"); - if (modify->compute[icompute]->peratom_flag == 0) - error->all(FLERR,"Fix ave/spatial compute does not " - "calculate per-atom values"); - if (argindex[i] == 0 && - modify->compute[icompute]->size_peratom_cols != 0) - error->all(FLERR,"Fix ave/spatial compute does not " - "calculate a per-atom vector"); - if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0) - error->all(FLERR,"Fix ave/spatial compute does not " - "calculate a per-atom array"); - if (argindex[i] && - argindex[i] > modify->compute[icompute]->size_peratom_cols) - error->all(FLERR, - "Fix ave/spatial compute vector is accessed out-of-range"); - - } else if (which[i] == FIX) { - int ifix = modify->find_fix(ids[i]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix ave/spatial does not exist"); - if (modify->fix[ifix]->peratom_flag == 0) - error->all(FLERR, - "Fix ave/spatial fix does not calculate per-atom values"); - if (argindex[i] == 0 && modify->fix[ifix]->size_peratom_cols != 0) - error->all(FLERR, - "Fix ave/spatial fix does not calculate a per-atom vector"); - if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0) - error->all(FLERR, - "Fix ave/spatial fix does not calculate a per-atom array"); - if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols) - error->all(FLERR,"Fix ave/spatial fix vector is accessed out-of-range"); - } else if (which[i] == VARIABLE) { - int ivariable = input->variable->find(ids[i]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix ave/spatial does not exist"); - if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR,"Fix ave/spatial variable is not atom-style variable"); - } - } - - // print file comment lines - - if (fp && me == 0) { - if (title1) fprintf(fp,"%s\n",title1); - else fprintf(fp,"# Spatial-averaged data for fix %s and group %s\n", - id,arg[1]); - if (title2) fprintf(fp,"%s\n",title2); - else fprintf(fp,"# Timestep Number-of-bins\n"); - if (title3) fprintf(fp,"%s\n",title3); - else { - if (ndim == 1) fprintf(fp,"# Bin Coord Ncount"); - else if (ndim == 2) fprintf(fp,"# Bin Coord1 Coord2 Ncount"); - else if (ndim == 3) fprintf(fp,"# Bin Coord1 Coord2 Coord3 Ncount"); - for (int i = 0; i < nvalues; i++) fprintf(fp," %s",arg[6+3*ndim+i]); - fprintf(fp,"\n"); - } - filepos = ftell(fp); - } - - delete [] title1; - delete [] title2; - delete [] title3; - - // this fix produces a global array - // size_array_rows set by setup_bins() - - array_flag = 1; - size_array_cols = 1 + ndim + nvalues; - extarray = 0; - - // setup scaling - - int triclinic = domain->triclinic; - if (triclinic == 1 && scaleflag != REDUCED) - error->all(FLERR, - "Fix ave/spatial for triclinic boxes requires units reduced"); - - if (scaleflag == LATTICE) { - xscale = domain->lattice->xlattice; - yscale = domain->lattice->ylattice; - zscale = domain->lattice->zlattice; - } else xscale = yscale = zscale = 1.0; - - // apply scaling factors - - double scale; - for (int idim = 0; idim < ndim; idim++) { - if (dim[idim] == 0) scale = xscale; - else if (dim[idim] == 1) scale = yscale; - else if (dim[idim] == 2) scale = zscale; - delta[idim] *= scale; - invdelta[idim] = 1.0/delta[idim]; - if (originflag[idim] == COORD) origin[idim] *= scale; - if (minflag[idim] == COORD) minvalue[idim] *= scale; - if (maxflag[idim] == COORD) maxvalue[idim] *= scale; - } - - // initializations - // invoke setup_bins() now to set size_array_rows - // will be reset in setup(), but needed now so Thermo custom can access it - - irepeat = 0; - iwindow = window_limit = 0; - norm = 0; - - maxvar = 0; - varatom = NULL; - - maxatom = 0; - bin = NULL; - - nbins = maxbin = 0; - count_one = count_many = count_sum = count_total = NULL; - coord = NULL; - count_list = NULL; - values_one = values_many = values_sum = values_total = NULL; - values_list = NULL; - - setup_bins(); - - // nvalid = next step on which end_of_step does something - // add nvalid to all computes that store invocation times - // since don't know a priori which are invoked by this fix - // once in end_of_step() can set timestep for ones actually invoked - - nvalid_last = -1; - nvalid = nextvalid(); - modify->addstep_compute_all(nvalid); -} - -/* ---------------------------------------------------------------------- */ - -FixAveSpatial::~FixAveSpatial() -{ - delete [] which; - delete [] argindex; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; - delete [] value2index; - delete [] idregion; - - if (fp && me == 0) fclose(fp); - - memory->destroy(varatom); - memory->destroy(bin); - - memory->destroy(count_one); - memory->destroy(count_many); - memory->destroy(count_sum); - memory->destroy(count_total); - memory->destroy(coord); - memory->destroy(count_list); - memory->destroy(values_one); - memory->destroy(values_many); - memory->destroy(values_sum); - memory->destroy(values_total); - memory->destroy(values_list); -} -/* ---------------------------------------------------------------------- */ - -int FixAveSpatial::setmask() -{ - int mask = 0; - mask |= END_OF_STEP; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixAveSpatial::init() -{ - // set and check validity of region - - if (regionflag) { - int iregion = domain->find_region(idregion); - if (iregion == -1) - error->all(FLERR,"Region ID for fix ave/spatial does not exist"); - region = domain->regions[iregion]; - } - - // # of bins cannot vary for ave = RUNNING or WINDOW - - if (ave == RUNNING || ave == WINDOW) { - if (scaleflag != REDUCED && domain->box_change_size) - error->all(FLERR, - "Fix ave/spatial settings invalid with changing box size"); - } - - // set indices and check validity of all computes,fixes,variables - // check that fix frequency is acceptable - - for (int m = 0; m < nvalues; m++) { - if (which[m] == COMPUTE) { - int icompute = modify->find_compute(ids[m]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix ave/spatial does not exist"); - value2index[m] = icompute; - - } else if (which[m] == FIX) { - int ifix = modify->find_fix(ids[m]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix ave/spatial does not exist"); - value2index[m] = ifix; - - if (nevery % modify->fix[ifix]->peratom_freq) - error->all(FLERR, - "Fix for fix ave/spatial not computed at compatible time"); - - } else if (which[m] == VARIABLE) { - int ivariable = input->variable->find(ids[m]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix ave/spatial does not exist"); - value2index[m] = ivariable; - - } else value2index[m] = -1; - } - - // need to reset nvalid if nvalid < ntimestep b/c minimize was performed - - if (nvalid < update->ntimestep) { - irepeat = 0; - nvalid = nextvalid(); - modify->addstep_compute_all(nvalid); - } -} - -/* ---------------------------------------------------------------------- - setup initial bins - only does averaging if nvalid = current timestep -------------------------------------------------------------------------- */ - -void FixAveSpatial::setup(int vflag) -{ - setup_bins(); - end_of_step(); -} - -/* ---------------------------------------------------------------------- */ - -void FixAveSpatial::end_of_step() -{ - int i,j,m,n; - - // skip if not step which requires doing something - // error check if timestep was reset in an invalid manner - - bigint ntimestep = update->ntimestep; - if (ntimestep < nvalid_last || ntimestep > nvalid) - error->all(FLERR,"Invalid timestep reset for fix ave/spatial"); - if (ntimestep != nvalid) return; - nvalid_last = nvalid; - - // update region if necessary - - if (regionflag) region->prematch(); - - // zero out arrays that accumulate over many samples - // if box changes, first re-setup bins - - if (irepeat == 0) { - if (domain->box_change) setup_bins(); - for (m = 0; m < nbins; m++) { - count_many[m] = count_sum[m] = 0.0; - for (i = 0; i < nvalues; i++) values_many[m][i] = 0.0; - } - } - - // zero out arrays for one sample - - for (m = 0; m < nbins; m++) { - count_one[m] = 0.0; - for (i = 0; i < nvalues; i++) values_one[m][i] = 0.0; - } - - // assign each atom to a bin - - double **x = atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - if (atom->nmax > maxatom) { - maxatom = atom->nmax; - memory->destroy(bin); - memory->create(bin,maxatom,"ave/spatial:bin"); - } - - if (ndim == 1) atom2bin1d(); - else if (ndim == 2) atom2bin2d(); - else atom2bin3d(); - - // perform the computation for one sample - // accumulate results of attributes,computes,fixes,variables to local copy - // sum within each bin, only include atoms in fix group - // compute/fix/variable may invoke computes so wrap with clear/add - - modify->clearstep_compute(); - - for (m = 0; m < nvalues; m++) { - n = value2index[m]; - j = argindex[m]; - - // V,F adds velocities,forces to values - - if (which[m] == V || which[m] == F) { - double **attribute; - if (which[m] == V) attribute = atom->v; - else attribute = atom->f; - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) - values_one[bin[i]][m] += attribute[i][j]; - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) - values_one[bin[i]][m] += attribute[i][j]; - } - - // DENSITY_NUMBER adds 1 to values - - } else if (which[m] == DENSITY_NUMBER) { - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) - values_one[bin[i]][m] += 1.0; - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) - values_one[bin[i]][m] += 1.0; - } - - // DENSITY_MASS adds mass to values - - } else if (which[m] == DENSITY_MASS) { - int *type = atom->type; - double *mass = atom->mass; - double *rmass = atom->rmass; - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) { - if (rmass) values_one[bin[i]][m] += rmass[i]; - else values_one[bin[i]][m] += mass[type[i]]; - } - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) { - if (rmass) values_one[bin[i]][m] += rmass[i]; - else values_one[bin[i]][m] += mass[type[i]]; - } - } - - // COMPUTE adds its scalar or vector component to values - // invoke compute if not previously invoked - - } else if (which[m] == COMPUTE) { - Compute *compute = modify->compute[n]; - if (!(compute->invoked_flag & INVOKED_PERATOM)) { - compute->compute_peratom(); - compute->invoked_flag |= INVOKED_PERATOM; - } - double *vector = compute->vector_atom; - double **array = compute->array_atom; - int jm1 = j - 1; - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - } - - // FIX adds its scalar or vector component to values - // access fix fields, guaranteed to be ready - - } else if (which[m] == FIX) { - double *vector = modify->fix[n]->vector_atom; - double **array = modify->fix[n]->array_atom; - int jm1 = j - 1; - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) { - if (j == 0) values_one[bin[i]][m] += vector[i]; - else values_one[bin[i]][m] += array[i][jm1]; - } - } - - // VARIABLE adds its per-atom quantities to values - // evaluate atom-style variable - - } else if (which[m] == VARIABLE) { - if (atom->nmax > maxvar) { - maxvar = atom->nmax; - memory->destroy(varatom); - memory->create(varatom,maxvar,"ave/spatial:varatom"); - } - - input->variable->compute_atom(n,igroup,varatom,1,0); - - if (!regionflag) { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && bin[i] >= 0) - values_one[bin[i]][m] += varatom[i]; - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]) && - bin[i] >= 0) - values_one[bin[i]][m] += varatom[i]; - } - } - } - - // process a single sample - // if normflag = ALL, accumulate values,count separately to many - // if normflag = SAMPLE, one = value/count, accumulate one to many - // exception is SAMPLE density: no normalization by atom count - - if (normflag == ALL) { - for (m = 0; m < nbins; m++) { - count_many[m] += count_one[m]; - for (j = 0; j < nvalues; j++) - values_many[m][j] += values_one[m][j]; - } - } else { - MPI_Allreduce(count_one,count_many,nbins,MPI_DOUBLE,MPI_SUM,world); - for (m = 0; m < nbins; m++) { - if (count_many[m] > 0.0) - for (j = 0; j < nvalues; j++) { - if (which[j] == DENSITY_NUMBER || which[j] == DENSITY_MASS) - values_many[m][j] += values_one[m][j]; - else values_many[m][j] += values_one[m][j]/count_many[m]; - } - count_sum[m] += count_many[m]; - } - } - - // done if irepeat < nrepeat - // else reset irepeat and nvalid - - irepeat++; - if (irepeat < nrepeat) { - nvalid += nevery; - modify->addstep_compute(nvalid); - return; - } - - irepeat = 0; - nvalid = ntimestep+nfreq - (nrepeat-1)*nevery; - modify->addstep_compute(nvalid); - - // time average across samples - // if normflag = ALL, final is total value / total count - // if normflag = SAMPLE, final is sum of ave / repeat - // exception is densities: normalized by repeat, not total count - - double repeat = nrepeat; - double mv2d = force->mv2d; - - if (normflag == ALL) { - MPI_Allreduce(count_many,count_sum,nbins,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues, - MPI_DOUBLE,MPI_SUM,world); - for (m = 0; m < nbins; m++) { - if (count_sum[m] > 0.0) - for (j = 0; j < nvalues; j++) { - if (which[j] == DENSITY_NUMBER) values_sum[m][j] /= repeat; - else if (which[j] == DENSITY_MASS) { - values_sum[m][j] *= mv2d/repeat; - } else values_sum[m][j] /= count_sum[m]; - } - count_sum[m] /= repeat; - } - } else { - MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues, - MPI_DOUBLE,MPI_SUM,world); - for (m = 0; m < nbins; m++) { - for (j = 0; j < nvalues; j++) - values_sum[m][j] /= repeat; - count_sum[m] /= repeat; - } - } - - // density is additionally normalized by bin volume - - for (j = 0; j < nvalues; j++) - if (which[j] == DENSITY_NUMBER || which[j] == DENSITY_MASS) - for (m = 0; m < nbins; m++) - values_sum[m][j] /= bin_volume; - - // if ave = ONE, only single Nfreq timestep value is needed - // if ave = RUNNING, combine with all previous Nfreq timestep values - // if ave = WINDOW, comine with nwindow most recent Nfreq timestep values - - if (ave == ONE) { - for (m = 0; m < nbins; m++) { - for (i = 0; i < nvalues; i++) - values_total[m][i] = values_sum[m][i]; - count_total[m] = count_sum[m]; - } - norm = 1; - - } else if (ave == RUNNING) { - for (m = 0; m < nbins; m++) { - for (i = 0; i < nvalues; i++) - values_total[m][i] += values_sum[m][i]; - count_total[m] += count_sum[m]; - } - norm++; - - } else if (ave == WINDOW) { - for (m = 0; m < nbins; m++) { - for (i = 0; i < nvalues; i++) { - values_total[m][i] += values_sum[m][i]; - if (window_limit) values_total[m][i] -= values_list[iwindow][m][i]; - values_list[iwindow][m][i] = values_sum[m][i]; - } - count_total[m] += count_sum[m]; - if (window_limit) count_total[m] -= count_list[iwindow][m]; - count_list[iwindow][m] = count_sum[m]; - } - - iwindow++; - if (iwindow == nwindow) { - iwindow = 0; - window_limit = 1; - } - if (window_limit) norm = nwindow; - else norm = iwindow; - } - - // output result to file - - if (fp && me == 0) { - if (overwrite) fseek(fp,filepos,SEEK_SET); - fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nbins); - if (ndim == 1) { - for (m = 0; m < nbins; m++) { - fprintf(fp," %d %g %g",m+1,coord[m][0], - count_total[m]/norm); - for (i = 0; i < nvalues; i++) - fprintf(fp," %g",values_total[m][i]/norm); - fprintf(fp,"\n"); - } - } else if (ndim == 2) - for (m = 0; m < nbins; m++) { - fprintf(fp," %d %g %g %g",m+1,coord[m][0],coord[m][1], - count_total[m]/norm); - for (i = 0; i < nvalues; i++) - fprintf(fp," %g",values_total[m][i]/norm); - fprintf(fp,"\n"); - } - else - for (m = 0; m < nbins; m++) { - fprintf(fp," %d %g %g %g %g",m+1,coord[m][0],coord[m][1],coord[m][2], - count_total[m]/norm); - for (i = 0; i < nvalues; i++) - fprintf(fp," %g",values_total[m][i]/norm); - fprintf(fp,"\n"); - } - - fflush(fp); - if (overwrite) { - long fileend = ftell(fp); - if (fileend > 0) ftruncate(fileno(fp),fileend); - } - } -} - -/* ---------------------------------------------------------------------- - setup 1d, 2d, or 3d bins and their extent and coordinates - called at setup() and when averaging occurs if box size changes -------------------------------------------------------------------------- */ - -void FixAveSpatial::setup_bins() -{ - int i,j,k,m,n,idim; - double lo,hi,coord1,coord2; - - // lo = bin boundary immediately below boxlo or minvalue - // hi = bin boundary immediately above boxhi or maxvalue - // allocate and initialize arrays based on new bin count - - double binlo[3],binhi[3]; - double *prd; - if (scaleflag == REDUCED) { - binlo[0] = domain->boxlo_lamda[0]; - binlo[1] = domain->boxlo_lamda[1]; - binlo[2] = domain->boxlo_lamda[2]; - binhi[0] = domain->boxhi_lamda[0]; - binhi[1] = domain->boxhi_lamda[1]; - binhi[2] = domain->boxhi_lamda[2]; - prd = domain->prd_lamda; - } else { - binlo[0] = domain->boxlo[0]; - binlo[1] = domain->boxlo[1]; - binlo[2] = domain->boxlo[2]; - binhi[0] = domain->boxhi[0]; - binhi[1] = domain->boxhi[1]; - binhi[2] = domain->boxhi[2]; - prd = domain->prd; - } - - if (minflag[0] == COORD) binlo[0] = minvalue[0]; - if (minflag[1] == COORD) binlo[1] = minvalue[1]; - if (minflag[2] == COORD) binlo[2] = minvalue[2]; - if (maxflag[0] == COORD) binhi[0] = maxvalue[0]; - if (maxflag[1] == COORD) binhi[1] = maxvalue[1]; - if (maxflag[2] == COORD) binhi[2] = maxvalue[2]; - - if (domain->dimension == 3) - bin_volume = domain->xprd * domain->yprd * domain->zprd; - else bin_volume = domain->xprd * domain->yprd; - nbins = 1; - - for (m = 0; m < ndim; m++) { - idim = dim[m]; - if (originflag[m] == LOWER) origin[m] = binlo[idim]; - else if (originflag[m] == UPPER) origin[m] = binhi[idim]; - else if (originflag[m] == CENTER) - origin[m] = 0.5 * (binlo[idim] + binhi[idim]); - - if (origin[m] < binlo[idim]) { - n = static_cast ((binlo[idim] - origin[m]) * invdelta[m]); - lo = origin[m] + n*delta[m]; - } else { - n = static_cast ((origin[m] - binlo[idim]) * invdelta[m]); - lo = origin[m] - n*delta[m]; - if (lo > binlo[idim]) lo -= delta[m]; - } - if (origin[m] < binhi[idim]) { - n = static_cast ((binhi[idim] - origin[m]) * invdelta[m]); - hi = origin[m] + n*delta[m]; - if (hi < binhi[idim]) hi += delta[m]; - } else { - n = static_cast ((origin[m] - binhi[idim]) * invdelta[m]); - hi = origin[m] - n*delta[m]; - } - - if (lo > hi) error->all(FLERR,"Invalid bin bounds in fix ave/spatial"); - - offset[m] = lo; - nlayers[m] = static_cast ((hi-lo) * invdelta[m] + 0.5); - nbins *= nlayers[m]; - bin_volume *= delta[m]/prd[idim]; - } - - size_array_rows = nbins; - - // reallocate bin arrays if needed - - if (nbins > maxbin) { - maxbin = nbins; - memory->grow(count_one,nbins,"ave/spatial:count_one"); - memory->grow(count_many,nbins,"ave/spatial:count_many"); - memory->grow(count_sum,nbins,"ave/spatial:count_sum"); - memory->grow(count_total,nbins,"ave/spatial:count_total"); - - memory->grow(coord,nbins,ndim,"ave/spatial:coord"); - memory->grow(values_one,nbins,nvalues,"ave/spatial:values_one"); - memory->grow(values_many,nbins,nvalues,"ave/spatial:values_many"); - memory->grow(values_sum,nbins,nvalues,"ave/spatial:values_sum"); - memory->grow(values_total,nbins,nvalues,"ave/spatial:values_total"); - - // only allocate count and values list for ave = WINDOW - - if (ave == WINDOW) { - memory->create(count_list,nwindow,nbins,"ave/spatial:count_list"); - memory->create(values_list,nwindow,nbins,nvalues, - "ave/spatial:values_list"); - } - - // reinitialize regrown count/values total since they accumulate - - for (m = 0; m < nbins; m++) { - for (i = 0; i < nvalues; i++) values_total[m][i] = 0.0; - count_total[m] = 0.0; - } - } - - // set bin coordinates - - if (ndim == 1) { - for (i = 0; i < nlayers[0]; i++) - coord[i][0] = offset[0] + (i+0.5)*delta[0]; - } else if (ndim == 2) { - m = 0; - for (i = 0; i < nlayers[0]; i++) { - coord1 = offset[0] + (i+0.5)*delta[0]; - for (j = 0; j < nlayers[1]; j++) { - coord[m][0] = coord1; - coord[m][1] = offset[1] + (j+0.5)*delta[1]; - m++; - } - } - } else if (ndim == 3) { - m = 0; - for (i = 0; i < nlayers[0]; i++) { - coord1 = offset[0] + (i+0.5)*delta[0]; - for (j = 0; j < nlayers[1]; j++) { - coord2 = offset[1] + (j+0.5)*delta[1]; - for (k = 0; k < nlayers[2]; k++) { - coord[m][0] = coord1; - coord[m][1] = coord2; - coord[m][2] = offset[2] + (k+0.5)*delta[2]; - m++; - } - } - } - } -} - -/* ---------------------------------------------------------------------- - assign each atom to a 1d bin -------------------------------------------------------------------------- */ - -void FixAveSpatial::atom2bin1d() -{ - int i,ibin; - double *boxlo,*boxhi,*prd; - double xremap; - double lamda[3]; - - double **x = atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - int idim = dim[0]; - int nlayer1m1 = nlayers[0] - 1; - int periodicity = domain->periodicity[idim]; - - if (periodicity) { - if (scaleflag == REDUCED) { - boxlo = domain->boxlo_lamda; - boxhi = domain->boxhi_lamda; - prd = domain->prd_lamda; - } else { - boxlo = domain->boxlo; - boxhi = domain->boxhi; - prd = domain->prd; - } - } - - // remap each atom's relevant coord back into box via PBC if necessary - // apply discard rule - // if scaleflag = REDUCED, box coords -> lamda coords - - if (!regionflag) { - if (scaleflag == REDUCED) domain->x2lamda(nlocal); - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - bin[i] = -1; - - xremap = x[i][idim]; - if (periodicity) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - ibin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) ibin--; - - if (discard== MIXED) { - if (!minflag[idim]) ibin = MAX(ibin,0); - else if (ibin < 0) continue; - if (!maxflag[idim]) ibin = MIN(ibin,nlayer1m1); - else if (ibin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - ibin = MAX(ibin,0); - ibin = MIN(ibin,nlayer1m1); - } else { - if (ibin < 0 || ibin > nlayer1m1) continue; - } - - bin[i] = ibin; - count_one[ibin] += 1.0; - } - if (scaleflag == REDUCED) domain->lamda2x(nlocal); - - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { - bin[i] = -1; - - if (scaleflag == REDUCED) { - domain->x2lamda(x[i],lamda); - xremap = lamda[idim]; - } else xremap = x[i][idim]; - if (periodicity) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - ibin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) ibin--; - - if (discard == MIXED) { - if (!minflag[idim]) ibin = MAX(ibin,0); - else if (ibin < 0) continue; - if (!maxflag[idim]) ibin = MIN(ibin,nlayer1m1); - else if (ibin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - ibin = MAX(ibin,0); - ibin = MIN(ibin,nlayer1m1); - } else { - if (ibin < 0 || ibin > nlayer1m1) continue; - } - - bin[i] = ibin; - count_one[ibin] += 1.0; - } - } -} - -/* ---------------------------------------------------------------------- - assign each atom to a 2d bin -------------------------------------------------------------------------- */ - -void FixAveSpatial::atom2bin2d() -{ - int i,ibin,i1bin,i2bin; - double *boxlo,*boxhi,*prd; - double xremap,yremap; - double lamda[3]; - - double **x = atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - int idim = dim[0]; - int jdim = dim[1]; - int nlayer1m1 = nlayers[0] - 1; - int nlayer2m1 = nlayers[1] - 1; - int* periodicity = domain->periodicity; - - if (periodicity[idim] || periodicity[jdim]) { - if (scaleflag == REDUCED) { - boxlo = domain->boxlo_lamda; - boxhi = domain->boxhi_lamda; - prd = domain->prd_lamda; - } else { - boxlo = domain->boxlo; - boxhi = domain->boxhi; - prd = domain->prd; - } - } - - // remap each atom's relevant coord back into box via PBC if necessary - // apply discard rule - // if scaleflag = REDUCED, box coords -> lamda coords - - if (!regionflag) { - if (scaleflag == REDUCED) domain->x2lamda(nlocal); - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - bin[i] = -1; - - xremap = x[i][idim]; - if (periodicity[idim]) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - i1bin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) i1bin--; - - if (discard == MIXED) { - if (!minflag[idim]) i1bin = MAX(i1bin,0); - else if (i1bin < 0) continue; - if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1); - else if (i1bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i1bin = MAX(i1bin,0); - i1bin = MIN(i1bin,nlayer1m1); - } else { - if (i1bin < 0 || i1bin > nlayer1m1) continue; - } - - yremap = x[i][jdim]; - if (periodicity[jdim]) { - if (yremap < boxlo[jdim]) yremap += prd[jdim]; - if (yremap >= boxhi[jdim]) yremap -= prd[jdim]; - } - - i2bin = static_cast ((yremap - offset[1]) * invdelta[1]); - if (yremap < offset[1]) i2bin--; - - if (discard == MIXED) { - if (!minflag[jdim]) i2bin = MAX(i2bin,0); - else if (i2bin < 0) continue; - if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1); - else if (i2bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i2bin = MAX(i2bin,0); - i2bin = MIN(i2bin,nlayer2m1); - } else { - if (i2bin < 0 || i2bin > nlayer2m1) continue; - } - - ibin = i1bin*nlayers[1] + i2bin; - bin[i] = ibin; - count_one[ibin] += 1.0; - } - if (scaleflag == REDUCED) domain->lamda2x(nlocal); - - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { - bin[i] = -1; - - if (scaleflag == REDUCED) { - domain->x2lamda(x[i],lamda); - xremap = lamda[idim]; - yremap = lamda[jdim]; - } else { - xremap = x[i][idim]; - yremap = x[i][jdim]; - } - - if (periodicity[idim]) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - i1bin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) i1bin--; - - if (discard == MIXED) { - if (!minflag[idim]) i1bin = MAX(i1bin,0); - else if (i1bin < 0) continue; - if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1); - else if (i1bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i1bin = MAX(i1bin,0); - i1bin = MIN(i1bin,nlayer1m1); - } else { - if (i1bin < 0 || i1bin > nlayer1m1) continue; - } - - if (periodicity[jdim]) { - if (yremap < boxlo[jdim]) yremap += prd[jdim]; - if (yremap >= boxhi[jdim]) yremap -= prd[jdim]; - } - - i2bin = static_cast ((yremap - offset[1]) * invdelta[1]); - if (yremap < offset[1]) i2bin--; - - if (discard == MIXED) { - if (!minflag[jdim]) i2bin = MAX(i2bin,0); - else if (i2bin < 0) continue; - if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1); - else if (i2bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i2bin = MAX(i2bin,0); - i2bin = MIN(i2bin,nlayer2m1); - } else { - if (i2bin < 0 || i2bin > nlayer2m1) continue; - } - - ibin = i1bin*nlayers[1] + i2bin; - bin[i] = ibin; - count_one[ibin] += 1.0; - } - } -} - -/* ---------------------------------------------------------------------- - assign each atom to a 3d bin -------------------------------------------------------------------------- */ - -void FixAveSpatial::atom2bin3d() -{ - int i,ibin,i1bin,i2bin,i3bin; - double *boxlo,*boxhi,*prd; - double xremap,yremap,zremap; - double lamda[3]; - - double **x = atom->x; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - int idim = dim[0]; - int jdim = dim[1]; - int kdim = dim[2]; - int nlayer1m1 = nlayers[0] - 1; - int nlayer2m1 = nlayers[1] - 1; - int nlayer3m1 = nlayers[2] - 1; - int* periodicity = domain->periodicity; - - if (periodicity[idim] || periodicity[jdim] || periodicity[kdim]) { - if (scaleflag == REDUCED) { - boxlo = domain->boxlo_lamda; - boxhi = domain->boxhi_lamda; - prd = domain->prd_lamda; - } else { - boxlo = domain->boxlo; - boxhi = domain->boxhi; - prd = domain->prd; - } - } - - // remap each atom's relevant coord back into box via PBC if necessary - // apply discard rule - // if scaleflag = REDUCED, box coords -> lamda coords - - if (!regionflag) { - if (scaleflag == REDUCED) domain->x2lamda(nlocal); - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - bin[i] = -1; - - xremap = x[i][idim]; - if (periodicity[idim]) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - i1bin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) i1bin--; - - if (discard == MIXED) { - if (!minflag[idim]) i1bin = MAX(i1bin,0); - else if (i1bin < 0) continue; - if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1); - else if (i1bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i1bin = MAX(i1bin,0); - i1bin = MIN(i1bin,nlayer1m1); - } else { - if (i1bin < 0 || i1bin > nlayer1m1) continue; - } - - yremap = x[i][jdim]; - if (periodicity[jdim]) { - if (yremap < boxlo[jdim]) yremap += prd[jdim]; - if (yremap >= boxhi[jdim]) yremap -= prd[jdim]; - } - - i2bin = static_cast ((yremap - offset[1]) * invdelta[1]); - if (yremap < offset[1]) i2bin--; - - if (discard == MIXED) { - if (!minflag[jdim]) i2bin = MAX(i2bin,0); - else if (i2bin < 0) continue; - if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1); - else if (i2bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i2bin = MAX(i2bin,0); - i2bin = MIN(i2bin,nlayer2m1); - } else { - if (i2bin < 0 || i2bin > nlayer2m1) continue; - } - - zremap = x[i][kdim]; - if (periodicity[kdim]) { - if (zremap < boxlo[kdim]) zremap += prd[kdim]; - if (zremap >= boxhi[kdim]) zremap -= prd[kdim]; - } - - i3bin = static_cast ((zremap - offset[2]) * invdelta[2]); - if (zremap < offset[2]) i3bin--; - - if (discard == MIXED) { - if (!minflag[kdim]) i3bin = MAX(i3bin,0); - else if (i3bin < 0) continue; - if (!maxflag[kdim]) i3bin = MIN(i3bin,nlayer3m1); - else if (i3bin > nlayer3m1) continue; - } else if (discard == NODISCARD) { - i3bin = MAX(i3bin,0); - i3bin = MIN(i3bin,nlayer3m1); - } else { - if (i3bin < 0 || i3bin > nlayer3m1) continue; - } - - ibin = i1bin*nlayers[1]*nlayers[2] + i2bin*nlayers[2] + i3bin; - bin[i] = ibin; - count_one[ibin] += 1.0; - } - if (scaleflag == REDUCED) domain->lamda2x(nlocal); - - } else { - for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { - bin[i] = -1; - - if (scaleflag == REDUCED) { - domain->x2lamda(x[i],lamda); - xremap = lamda[idim]; - yremap = lamda[jdim]; - zremap = lamda[kdim]; - } else { - xremap = x[i][idim]; - yremap = x[i][jdim]; - zremap = x[i][kdim]; - } - - if (periodicity[idim]) { - if (xremap < boxlo[idim]) xremap += prd[idim]; - if (xremap >= boxhi[idim]) xremap -= prd[idim]; - } - - i1bin = static_cast ((xremap - offset[0]) * invdelta[0]); - if (xremap < offset[0]) i1bin--; - - if (discard == MIXED) { - if (!minflag[idim]) i1bin = MAX(i1bin,0); - else if (i1bin < 0) continue; - if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1); - else if (i1bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i1bin = MAX(i1bin,0); - i1bin = MIN(i1bin,nlayer1m1); - } else { - if (i1bin < 0 || i1bin > nlayer1m1) continue; - } - - if (periodicity[jdim]) { - if (yremap < boxlo[jdim]) yremap += prd[jdim]; - if (yremap >= boxhi[jdim]) yremap -= prd[jdim]; - } - - i2bin = static_cast ((yremap - offset[1]) * invdelta[1]); - if (yremap < offset[1]) i2bin--; - - if (discard == MIXED) { - if (!minflag[jdim]) i2bin = MAX(i2bin,0); - else if (i2bin < 0) continue; - if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1); - else if (i2bin > nlayer1m1) continue; - } else if (discard == NODISCARD) { - i2bin = MAX(i2bin,0); - i2bin = MIN(i2bin,nlayer2m1); - } else { - if (i2bin < 0 || i2bin > nlayer2m1) continue; - } - - if (periodicity[kdim]) { - if (zremap < boxlo[kdim]) zremap += prd[kdim]; - if (zremap >= boxhi[kdim]) zremap -= prd[kdim]; - } - - i3bin = static_cast ((zremap - offset[2]) * invdelta[2]); - if (zremap < offset[2]) i3bin--; - - if (discard == MIXED) { - if (!minflag[kdim]) i3bin = MAX(i3bin,0); - else if (i3bin < 0) continue; - if (!maxflag[kdim]) i3bin = MIN(i3bin,nlayer3m1); - else if (i3bin > nlayer3m1) continue; - } else if (discard == NODISCARD) { - i3bin = MAX(i3bin,0); - i3bin = MIN(i3bin,nlayer3m1); - } else { - if (i3bin < 0 || i3bin > nlayer3m1) continue; - } - - ibin = i1bin*nlayers[1]*nlayers[2] + i2bin*nlayers[2] + i3bin; - bin[i] = ibin; - count_one[ibin] += 1.0; - } - } -} - -/* ---------------------------------------------------------------------- - return I,J array value - if I exceeds current nbins, return 0.0 instead of generating an error - column 1,2,3 = bin coords, next column = count, remaining columns = Nvalues -------------------------------------------------------------------------- */ - -double FixAveSpatial::compute_array(int i, int j) -{ - if (values_total == NULL) return 0.0; - if (i >= nbins) return 0.0; - if (j < ndim) return coord[i][j]; - j -= ndim+1; - if (!norm) return 0.0; - if (j < 0) return count_total[i]/norm; - return values_total[i][j]/norm; -} - -/* ---------------------------------------------------------------------- - calculate nvalid = next step on which end_of_step does something - can be this timestep if multiple of nfreq and nrepeat = 1 - else backup from next multiple of nfreq -------------------------------------------------------------------------- */ - -bigint FixAveSpatial::nextvalid() -{ - bigint nvalid = (update->ntimestep/nfreq)*nfreq + nfreq; - if (nvalid-nfreq == update->ntimestep && nrepeat == 1) - nvalid = update->ntimestep; - else - nvalid -= (nrepeat-1)*nevery; - if (nvalid < update->ntimestep) nvalid += nfreq; - return nvalid; -} - -/* ---------------------------------------------------------------------- - memory usage of varatom and bins -------------------------------------------------------------------------- */ - -double FixAveSpatial::memory_usage() -{ - double bytes = maxvar * sizeof(double); // varatom - bytes += maxatom * sizeof(int); // bin - bytes += 4*nbins * sizeof(double); // count one,many,sum,total - bytes += ndim*nbins * sizeof(double); // coord - bytes += nvalues*nbins * sizeof(double); // values one,many,sum,total - bytes += nwindow*nbins * sizeof(double); // count_list - bytes += nwindow*nbins*nvalues * sizeof(double); // values_list - return bytes; -} diff --git a/src/fix_ave_spatial.h b/src/fix_ave_spatial.h deleted file mode 100644 index 1df4c363b2..0000000000 --- a/src/fix_ave_spatial.h +++ /dev/null @@ -1,192 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef FIX_CLASS - -FixStyle(ave/spatial,FixAveSpatial) - -#else - -#ifndef LMP_FIX_AVE_SPATIAL_H -#define LMP_FIX_AVE_SPATIAL_H - -#include -#include "fix.h" - -namespace LAMMPS_NS { - -class FixAveSpatial : public Fix { - public: - FixAveSpatial(class LAMMPS *, int, char **); - ~FixAveSpatial(); - int setmask(); - void init(); - void setup(int); - void end_of_step(); - double compute_array(int,int); - double memory_usage(); - - private: - int me,nvalues; - int nrepeat,nfreq,irepeat; - bigint nvalid,nvalid_last; - int ndim,normflag,regionflag,overwrite,discard; - char *tstring,*sstring,*idregion; - int *which,*argindex,*value2index; - char **ids; - FILE *fp; - class Region *region; - - int ave,nwindow,scaleflag; - int norm,iwindow,window_limit; - double xscale,yscale,zscale; - double bin_volume; - - long filepos; - int dim[3],originflag[3],nlayers[3]; - double origin[3],delta[3]; - double offset[3],invdelta[3]; - - int maxvar; - double *varatom; - - int maxatom; - int *bin; - - int nbins,maxbin; - double **coord; - double *count_one,*count_many,*count_sum; - double **values_one,**values_many,**values_sum; - double *count_total,**count_list; - double **values_total,***values_list; - - int minflag[3],maxflag[3]; - double minvalue[3],maxvalue[3]; - - void setup_bins(); - void atom2bin1d(); - void atom2bin2d(); - void atom2bin3d(); - bigint nextvalid(); -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -W: The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed in the summer of 2015 - -Self-explanatory. - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Cannot use fix ave/spatial z for 2 dimensional model - -Self-explanatory. - -E: Same dimension twice in fix ave/spatial - -Self-explanatory. - -E: No input values for fix ave/spatial - -Self-explanatory. - -E: Region ID for fix ave/spatial does not exist - -Self-explanatory. - -E: Cannot open fix ave/spatial file %s - -The specified file cannot be opened. Check that the path and name are -correct. - -E: Compute ID for fix ave/spatial does not exist - -Self-explanatory. - -E: Fix ave/spatial compute does not calculate per-atom values - -A compute used by fix ave/spatial must generate per-atom values. - -E: Fix ave/spatial compute does not calculate a per-atom vector - -A compute used by fix ave/spatial must generate per-atom values. - -E: Fix ave/spatial compute does not calculate a per-atom array - -Self-explanatory. - -E: Fix ave/spatial compute vector is accessed out-of-range - -The index for the vector is out of bounds. - -E: Fix ID for fix ave/spatial does not exist - -Self-explanatory. - -E: Fix ave/spatial fix does not calculate per-atom values - -A fix used by fix ave/spatial must generate per-atom values. - -E: Fix ave/spatial fix does not calculate a per-atom vector - -A fix used by fix ave/spatial must generate per-atom values. - -E: Fix ave/spatial fix does not calculate a per-atom array - -Self-explanatory. - -E: Fix ave/spatial fix vector is accessed out-of-range - -The index for the vector is out of bounds. - -E: Variable name for fix ave/spatial does not exist - -Self-explanatory. - -E: Fix ave/spatial variable is not atom-style variable - -A variable used by fix ave/spatial must generate per-atom values. - -E: Fix ave/spatial for triclinic boxes requires units reduced - -Self-explanatory. - -E: Fix ave/spatial settings invalid with changing box size - -If the box size changes, only the units reduced option can be -used. - -E: Fix for fix ave/spatial not computed at compatible time - -Fixes generate their values on specific timesteps. Fix ave/spatial is -requesting a value on a non-allowed timestep. - -E: Invalid timestep reset for fix ave/spatial - -Resetting the timestep has invalidated the sequence of timesteps this -fix needs to process. - -E: Invalid bin bounds in fix ave/spatial - -The lo/hi values are inconsistent. - -*/ diff --git a/src/fix_deprecated.cpp b/src/fix_deprecated.cpp new file mode 100644 index 0000000000..9c0b6686d1 --- /dev/null +++ b/src/fix_deprecated.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 +#include "fix_deprecated.h" +#include "comm.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +FixDeprecated::FixDeprecated(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (strncmp(style,"ave/spatial",11) == 0) { + const char *message = "\n" + "NOTE: The fix styles 'ave/spatial' and 'ave/spatial/sphere' have been replaced\n" + "by the more general fix ave/chunk and compute chunk/atom commands.\n" + "All ave/spatial and ave/spatial/sphere functionality is available in these\n" + "new commands. These ave/spatial keywords & options are part of fix ave/chunk:\n" + " Nevery, Nrepeat, Nfreq, input values, norm, ave, file, overwrite, title123\n" + "These ave/spatial keywords & options for binning are part of compute chunk/atom:\n" + " dim, origin, delta, region, bound, discard, units\n\n"; + + if (comm->me == 0) { + if (screen) fputs(message,screen); + if (logfile) fputs(message,logfile); + } + } + error->all(FLERR,"This fix command has been removed from LAMMPS"); +} diff --git a/src/USER-CUDA/fix_npt_cuda.h b/src/fix_deprecated.h similarity index 53% rename from src/USER-CUDA/fix_npt_cuda.h rename to src/fix_deprecated.h index e10efb6a9a..dcfe75358f 100644 --- a/src/USER-CUDA/fix_npt_cuda.h +++ b/src/fix_deprecated.h @@ -13,24 +13,39 @@ #ifdef FIX_CLASS -FixStyle(npt/cuda,FixNPTCuda) +// list all deprecated and removed fix styles here + +FixStyle(ave/spatial,FixDeprecated) +FixStyle(ave/spatial/sphere,FixDeprecated) #else -#ifndef LMP_FIX_NPTCuda_H -#define LMP_FIX_NPTCuda_H +#ifndef LMP_FIX_DEPRECATED_H +#define LMP_FIX_DEPRECATED_H -#include "fix_nh_cuda.h" +#include "fix.h" namespace LAMMPS_NS { -class FixNPTCuda : public FixNHCuda { +class FixDeprecated : public Fix { public: - FixNPTCuda(class LAMMPS *, int, char **); - ~FixNPTCuda() {} + FixDeprecated(class LAMMPS *, int, char **); + ~FixDeprecated() {} + int setmask() {return 0;} + void init() {} }; } #endif #endif + +/* ERROR/WARNING messages: + +E: The fix ave/spatial command has been removed from LAMMPS + +It has been replaced by the more flexible fix ave/chunk and compute +chunk/atom commands. All the fix ave/spatial keywords and options are +available in those two newer commands. + +*/ diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp index 0609d45efb..5da405ae3f 100644 --- a/src/fix_heat.cpp +++ b/src/fix_heat.cpp @@ -133,6 +133,8 @@ void FixHeat::init() if (group->count(igroup) == 0) error->all(FLERR,"Fix heat group has no atoms"); masstotal = group->mass(igroup); + if (masstotal <= 0.0) + error->all(FLERR,"Fix heat group has invalid mass"); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_momentum.cpp b/src/fix_momentum.cpp index 88a50d8539..63ec71f10d 100644 --- a/src/fix_momentum.cpp +++ b/src/fix_momentum.cpp @@ -86,6 +86,7 @@ void FixMomentum::init() if (group->count(igroup) == 0) error->all(FLERR,"Fix momentum group has no atoms"); } + masstotal = group->mass(igroup); } diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index b300fd2d46..2f1081216b 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -80,6 +80,11 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) flipflag = 1; dipole_flag = 0; + tcomputeflag = 0; + pcomputeflag = 0; + id_temp = NULL; + id_press = NULL; + // turn on tilt factor scaling, whenever applicable dimension = domain->dimension; @@ -558,7 +563,7 @@ FixNH::~FixNH() // delete temperature and pressure if fix created them - if (tflag) modify->delete_compute(id_temp); + if (tcomputeflag) modify->delete_compute(id_temp); delete [] id_temp; if (tstat_flag) { @@ -569,7 +574,7 @@ FixNH::~FixNH() } if (pstat_flag) { - if (pflag) modify->delete_compute(id_press); + if (pcomputeflag) modify->delete_compute(id_press); delete [] id_press; if (mpchain) { delete [] etap; @@ -1347,9 +1352,9 @@ int FixNH::modify_param(int narg, char **arg) { if (strcmp(arg[0],"temp") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - if (tflag) { + if (tcomputeflag) { modify->delete_compute(id_temp); - tflag = 0; + tcomputeflag = 0; } delete [] id_temp; int n = strlen(arg[1]) + 1; @@ -1381,9 +1386,9 @@ int FixNH::modify_param(int narg, char **arg) } else if (strcmp(arg[0],"press") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command"); - if (pflag) { + if (pcomputeflag) { modify->delete_compute(id_press); - pflag = 0; + pcomputeflag = 0; } delete [] id_press; int n = strlen(arg[1]) + 1; diff --git a/src/fix_nh.h b/src/fix_nh.h index 7227a22968..b0add1060b 100644 --- a/src/fix_nh.h +++ b/src/fix_nh.h @@ -76,7 +76,8 @@ class FixNH : public Fix { char *id_temp,*id_press; class Compute *temperature,*pressure; - int tflag,pflag; + int tcomputeflag,pcomputeflag; // 1 = compute was created by fix + // 0 = created externally double *eta,*eta_dot; // chain thermostat for particles double *eta_dotdot; diff --git a/src/fix_nph.cpp b/src/fix_nph.cpp index 6f3678ed3a..a331a07d24 100644 --- a/src/fix_nph.cpp +++ b/src/fix_nph.cpp @@ -46,7 +46,7 @@ FixNPH::FixNPH(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPH::FixNPH(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/fix_nph_sphere.cpp b/src/fix_nph_sphere.cpp index 93d9bf8af2..852234074f 100644 --- a/src/fix_nph_sphere.cpp +++ b/src/fix_nph_sphere.cpp @@ -46,7 +46,7 @@ FixNPHSphere::FixNPHSphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPHSphere::FixNPHSphere(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/fix_npt.cpp b/src/fix_npt.cpp index 0326c06c77..e14200f6a2 100644 --- a/src/fix_npt.cpp +++ b/src/fix_npt.cpp @@ -46,7 +46,7 @@ FixNPT::FixNPT(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPT::FixNPT(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/fix_npt_sphere.cpp b/src/fix_npt_sphere.cpp index 6e7c074d5e..d3773e0d17 100644 --- a/src/fix_npt_sphere.cpp +++ b/src/fix_npt_sphere.cpp @@ -46,7 +46,7 @@ FixNPTSphere::FixNPTSphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; // create a new compute pressure style // id = fix-ID + press, compute group = all @@ -64,5 +64,5 @@ FixNPTSphere::FixNPTSphere(LAMMPS *lmp, int narg, char **arg) : newarg[3] = id_temp; modify->add_compute(4,newarg); delete [] newarg; - pflag = 1; + pcomputeflag = 1; } diff --git a/src/fix_nvt.cpp b/src/fix_nvt.cpp index a86f46c3b5..35ee085da1 100644 --- a/src/fix_nvt.cpp +++ b/src/fix_nvt.cpp @@ -45,5 +45,5 @@ FixNVT::FixNVT(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/fix_nvt_sllod.cpp b/src/fix_nvt_sllod.cpp index 8257afae05..87e86f2351 100644 --- a/src/fix_nvt_sllod.cpp +++ b/src/fix_nvt_sllod.cpp @@ -63,7 +63,7 @@ FixNVTSllod::FixNVTSllod(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_nvt_sphere.cpp b/src/fix_nvt_sphere.cpp index c886935f12..b65b3adfae 100644 --- a/src/fix_nvt_sphere.cpp +++ b/src/fix_nvt_sphere.cpp @@ -45,5 +45,5 @@ FixNVTSphere::FixNVTSphere(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - tflag = 1; + tcomputeflag = 1; } diff --git a/src/fix_recenter.cpp b/src/fix_recenter.cpp index 7d30c2f865..e10edcb2d9 100644 --- a/src/fix_recenter.cpp +++ b/src/fix_recenter.cpp @@ -52,6 +52,7 @@ FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) : extscalar = 1; extvector = 1; global_freq = 1; + dynamic_group_allow = 1; /* ---------------------------------------------------------------------- */ @@ -186,6 +187,9 @@ void FixRecenter::initial_integrate(int vflag) // current COM double xcm[3]; + if (group->dynamic[igroup]) + masstotal = group->mass(igroup); + group->xcm(igroup,masstotal,xcm); // shift coords by difference between actual COM and requested COM diff --git a/src/fix_spring.cpp b/src/fix_spring.cpp index ddc161e50d..560ca291ae 100644 --- a/src/fix_spring.cpp +++ b/src/fix_spring.cpp @@ -47,6 +47,7 @@ FixSpring::FixSpring(LAMMPS *lmp, int narg, char **arg) : global_freq = 1; extscalar = 1; extvector = 1; + dynamic_group_allow = 1; group2 = NULL; @@ -166,6 +167,10 @@ void FixSpring::post_force(int vflag) void FixSpring::spring_tether() { double xcm[3]; + + if (group->dynamic[igroup]) + masstotal = group->mass(igroup); + group->xcm(igroup,masstotal,xcm); // fx,fy,fz = components of k * (r-r0) / masstotal @@ -192,9 +197,11 @@ void FixSpring::spring_tether() if (dr < 0.0) ftotal[3] = -ftotal[3]; espring = 0.5*k_spring * dr*dr; - fx /= masstotal; - fy /= masstotal; - fz /= masstotal; + if (masstotal > 0.0) { + fx /= masstotal; + fy /= masstotal; + fz /= masstotal; + } // apply restoring force to atoms in group @@ -231,6 +238,13 @@ void FixSpring::spring_tether() void FixSpring::spring_couple() { double xcm[3],xcm2[3]; + + if (group->dynamic[igroup]) + masstotal = group->mass(igroup); + + if (group->dynamic[igroup2]) + masstotal2 = group->mass(igroup2); + group->xcm(igroup,masstotal,xcm); group->xcm(igroup2,masstotal2,xcm2); @@ -259,12 +273,17 @@ void FixSpring::spring_couple() if (dr < 0.0) ftotal[3] = -ftotal[3]; espring = 0.5*k_spring * dr*dr; - fx2 = fx/masstotal2; - fy2 = fy/masstotal2; - fz2 = fz/masstotal2; - fx /= masstotal; - fy /= masstotal; - fz /= masstotal; + if (masstotal2 > 0.0) { + fx2 = fx/masstotal2; + fy2 = fy/masstotal2; + fz2 = fz/masstotal2; + } else fx2 = fy2 = fz2 = 0.0; + + if (masstotal > 0.0) { + fx /= masstotal; + fy /= masstotal; + fz /= masstotal; + } else fx = fy = fz = 0.0; // apply restoring force to atoms in group // f = -k*(r-r0)*mass/masstotal diff --git a/src/fix_spring_rg.cpp b/src/fix_spring_rg.cpp index 5e267340c1..4145e01047 100644 --- a/src/fix_spring_rg.cpp +++ b/src/fix_spring_rg.cpp @@ -42,6 +42,8 @@ FixSpringRG::FixSpringRG(LAMMPS *lmp, int narg, char **arg) : rg0_flag = 0; if (strcmp(arg[4],"NULL") == 0) rg0_flag = 1; else rg0 = force->numeric(FLERR,arg[4]); + + dynamic_group_allow = 1; } /* ---------------------------------------------------------------------- */ @@ -94,6 +96,8 @@ void FixSpringRG::post_force(int vflag) // compute current Rg and center-of-mass double xcm[3]; + if (group->dynamic[igroup]) + masstotal = group->mass(igroup); group->xcm(igroup,masstotal,xcm); double rg = group->gyration(igroup,masstotal,xcm); @@ -108,6 +112,7 @@ void FixSpringRG::post_force(int vflag) int *type = atom->type; imageint *image = atom->image; double *mass = atom->mass; + double *rmass = atom->rmass; int nlocal = atom->nlocal; double massfrac; @@ -120,10 +125,14 @@ void FixSpringRG::post_force(int vflag) dy = unwrap[1] - xcm[1]; dz = unwrap[2] - xcm[2]; term1 = 2.0 * k * (1.0 - rg0/rg); - massfrac = mass[type[i]]/masstotal; - f[i][0] -= term1*dx*massfrac; - f[i][1] -= term1*dy*massfrac; - f[i][2] -= term1*dz*massfrac; + if (masstotal > 0.0) { + if (rmass) massfrac = rmass[i]/masstotal; + else massfrac = mass[type[i]]/masstotal; + + f[i][0] -= term1*dx*massfrac; + f[i][1] -= term1*dy*massfrac; + f[i][2] -= term1*dz*massfrac; + } } } diff --git a/src/fix_tmd.cpp b/src/fix_tmd.cpp index 4be97a816e..d326685368 100644 --- a/src/fix_tmd.cpp +++ b/src/fix_tmd.cpp @@ -85,6 +85,8 @@ FixTMD::FixTMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) } masstotal = group->mass(igroup); + if (masstotal == 0.0) + error->all(FLERR,"Cannot use fix TMD on massless group"); // rho_start = initial rho // xold = initial x or 0.0 if not in group @@ -155,10 +157,7 @@ void FixTMD::init() int flag = 0; for (int i = 0; i < modify->nfix; i++) { if (strcmp(modify->fix[i]->style,"tmd") == 0) flag = 1; - if (flag && strcmp(modify->fix[i]->style,"nve") == 0) flag = 2; - if (flag && strcmp(modify->fix[i]->style,"nvt") == 0) flag = 2; - if (flag && strcmp(modify->fix[i]->style,"npt") == 0) flag = 2; - if (flag && strcmp(modify->fix[i]->style,"nph") == 0) flag = 2; + if (flag && modify->fix[i]->time_integrate) flag = 2; } if (flag == 2) error->all(FLERR,"Fix tmd must come after integration fixes"); diff --git a/src/info.cpp b/src/info.cpp index 9b6b1acda5..ead5a68a75 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -17,7 +17,6 @@ #include #include "info.h" -#include "accelerator_cuda.h" #include "accelerator_kokkos.h" #include "atom.h" #include "comm.h" @@ -476,9 +475,7 @@ bool Info::is_active(const char *category, const char *name) const int len = strlen(name); if (strcmp(category,"package") == 0) { - if (strcmp(name,"cuda") == 0) { - return (lmp->cuda && lmp->cuda->cuda_exists) ? true : false; - } else if (strcmp(name,"gpu") == 0) { + if (strcmp(name,"gpu") == 0) { return (modify->find_fix("package_gpu") >= 0) ? true : false; } else if (strcmp(name,"intel") == 0) { return (modify->find_fix("package_intel") >= 0) ? true : false; diff --git a/src/input.cpp b/src/input.cpp index bcb64effe9..7983f81532 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -46,7 +46,6 @@ #include "special.h" #include "timer.h" #include "variable.h" -#include "accelerator_cuda.h" #include "accelerator_kokkos.h" #include "error.h" #include "memory.h" @@ -1567,13 +1566,7 @@ void Input::package() // same checks for packages existing as in LAMMPS::post_create() // since can be invoked here by package command in input script - if (strcmp(arg[0],"cuda") == 0) { - if (lmp->cuda == NULL || lmp->cuda->cuda_exists == 0) - error->all(FLERR, - "Package cuda command without USER-CUDA package enabled"); - lmp->cuda->accelerator(narg-1,&arg[1]); - - } else if (strcmp(arg[0],"gpu") == 0) { + if (strcmp(arg[0],"gpu") == 0) { if (!modify->check_package("GPU")) error->all(FLERR,"Package gpu command without GPU package installed"); diff --git a/src/lammps.cpp b/src/lammps.cpp index d3d1113ba5..d0710a87d0 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -42,7 +42,6 @@ #include "group.h" #include "output.h" #include "citeme.h" -#include "accelerator_cuda.h" #include "accelerator_kokkos.h" #include "accelerator_omp.h" #include "accelerator_intel.h" @@ -89,7 +88,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) int logflag = 0; int partscreenflag = 0; int partlogflag = 0; - int cudaflag = 0; int kokkosflag = 0; int restartflag = 0; int restartremapflag = 0; @@ -162,14 +160,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) error->universe_all(FLERR,"Invalid command-line argument"); partlogflag = iarg + 1; iarg += 2; - } else if (strcmp(arg[iarg],"-cuda") == 0 || - strcmp(arg[iarg],"-c") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - if (strcmp(arg[iarg+1],"on") == 0) cudaflag = 1; - else if (strcmp(arg[iarg+1],"off") == 0) cudaflag = 0; - else error->universe_all(FLERR,"Invalid command-line argument"); - iarg += 2; } else if (strcmp(arg[iarg],"-kokkos") == 0 || strcmp(arg[iarg],"-k") == 0) { if (iarg+2 > narg) @@ -479,25 +469,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) error->all(FLERR,"Small to big integers are not sized correctly"); #endif - // error check on accelerator packages - - if (cudaflag == 1 && kokkosflag == 1) - error->all(FLERR,"Cannot use -cuda on and -kokkos on together"); - - // create Cuda class if USER-CUDA installed, unless explicitly switched off - // instantiation creates dummy Cuda class if USER-CUDA is not installed - - cuda = NULL; - if (cudaflag == 1) { - cuda = new Cuda(this); - if (!cuda->cuda_exists) - error->all(FLERR,"Cannot use -cuda on without USER-CUDA installed"); - } - - int me; - MPI_Comm_rank(world,&me); - if (cuda && me == 0) error->message(FLERR,"USER-CUDA mode is enabled"); - // create Kokkos class if KOKKOS installed, unless explicitly switched off // instantiation creates dummy Kokkos class if KOKKOS is not installed // add args between kkfirst and kklast to Kokkos instantiation @@ -619,7 +590,6 @@ LAMMPS::~LAMMPS() if (world != universe->uworld) MPI_Comm_free(&world); - delete cuda; delete kokkos; delete [] suffix; delete [] suffix2; @@ -641,16 +611,13 @@ void LAMMPS::create() // Comm class must be created before Atom class // so that nthreads is defined when create_avec invokes grow() - if (cuda) comm = new CommCuda(this); - else if (kokkos) comm = new CommKokkos(this); + if (kokkos) comm = new CommKokkos(this); else comm = new CommBrick(this); - if (cuda) neighbor = new NeighborCuda(this); - else if (kokkos) neighbor = new NeighborKokkos(this); + if (kokkos) neighbor = new NeighborKokkos(this); else neighbor = new Neighbor(this); - if (cuda) domain = new DomainCuda(this); - else if (kokkos) domain = new DomainKokkos(this); + if (kokkos) domain = new DomainKokkos(this); #ifdef LMP_USER_OMP else domain = new DomainOMP(this); #else @@ -668,8 +635,7 @@ void LAMMPS::create() group = new Group(this); force = new Force(this); // must be after group, to create temperature - if (cuda) modify = new ModifyCuda(this); - else if (kokkos) modify = new ModifyKokkos(this); + if (kokkos) modify = new ModifyKokkos(this); else modify = new Modify(this); output = new Output(this); // must be after group, so "all" exists @@ -689,19 +655,16 @@ void LAMMPS::create() void LAMMPS::post_create() { - // default package commands triggered by "-c on" and "-k on" + // default package command triggered by "-k on" - if (cuda && cuda->cuda_exists) input->one("package cuda 1"); if (kokkos && kokkos->kokkos_exists) input->one("package kokkos"); // suffix will always be set if suffix_enable = 1 - // check that USER-CUDA and KOKKOS package classes were instantiated + // check that KOKKOS package classes were instantiated // check that GPU, INTEL, USER-OMP fixes were compiled with LAMMPS if (!suffix_enable) return; - if (strcmp(suffix,"cuda") == 0 && (cuda == NULL || cuda->cuda_exists == 0)) - error->all(FLERR,"Using suffix cuda without USER-CUDA package enabled"); if (strcmp(suffix,"gpu") == 0 && !modify->check_package("GPU")) error->all(FLERR,"Using suffix gpu without GPU package installed"); if (strcmp(suffix,"intel") == 0 && !modify->check_package("INTEL")) @@ -838,7 +801,6 @@ void help_message(FILE *fp) "-echo screen -in in.alloy\n\n",fp); fputs("List of command line options supported by this LAMMPS executable:\n" - " -cuda on/off : turn CUDA mode on or off (-c)\n" " -echo none/screen/log/both : select how to echo input (-e)\n" " -in : read input from file not stdin (-i)\n" " -help : print this help message (-h)\n" diff --git a/src/lammps.h b/src/lammps.h index 07e729ace3..7d20bd429e 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -50,7 +50,6 @@ class LAMMPS { int num_package; // number of cmdline package commands int cite_enable; // 1 if generating log.cite, 0 if disabled - class Cuda *cuda; // CUDA accelerator class class KokkosLMP *kokkos; // KOKKOS accelerator class class AtomKokkos *atomKK; // KOKKOS version of Atom class diff --git a/src/lattice.cpp b/src/lattice.cpp index e851760792..484ce27972 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -53,7 +53,16 @@ Lattice::Lattice(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (style == NONE) { if (narg != 2) error->all(FLERR,"Illegal lattice command"); - xlattice = ylattice = zlattice = force->numeric(FLERR,arg[1]); + + // Domain defines a default lattice of style "none" with + // spacing 1.0 before the force class is initialized, so + // we have to fall back to using atof() in that case. + + if (force) + xlattice = ylattice = zlattice = force->numeric(FLERR,arg[1]); + else + xlattice = ylattice = zlattice = atof(arg[1]); + if (xlattice <= 0.0) error->all(FLERR,"Illegal lattice command"); return; } diff --git a/src/modify.cpp b/src/modify.cpp index 0d4ae4d2cf..03622e5940 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -33,7 +33,7 @@ using namespace FixConst; #define DELTA 4 #define BIG 1.0e20 -#define NEXCEPT 5 // change when add to exceptions in add_fix() +#define NEXCEPT 6 // change when add to exceptions in add_fix() /* ---------------------------------------------------------------------- */ @@ -697,7 +697,7 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) // MUST change NEXCEPT above when add new fix to this list const char *exceptions[NEXCEPT] = - {"GPU","OMP","INTEL","property/atom","cmap"}; + {"GPU","OMP","INTEL","property/atom","cmap","rx"}; if (domain->box_exist == 0) { int m; diff --git a/src/molecule.cpp b/src/molecule.cpp index 99b5718133..91557b32ba 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -245,9 +245,11 @@ void Molecule::compute_com() com[1] += x[i][1]*onemass; com[2] += x[i][2]*onemass; } - com[0] /= masstotal; - com[1] /= masstotal; - com[2] /= masstotal; + if (masstotal > 0.0) { + com[0] /= masstotal; + com[1] /= masstotal; + com[2] /= masstotal; + } } memory->destroy(dxcom); diff --git a/src/output.cpp b/src/output.cpp index db667e8694..073171735f 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -30,7 +30,6 @@ #include "force.h" #include "dump.h" #include "write_restart.h" -#include "accelerator_cuda.h" #include "memory.h" #include "error.h" @@ -290,11 +289,8 @@ void Output::write(bigint ntimestep) { // next_dump does not force output on last step of run // wrap dumps that invoke computes or eval of variable with clear/add - // download data from GPU if necessary if (next_dump_any == ntimestep) { - if (lmp->cuda && !lmp->cuda->oncpu) lmp->cuda->downloadAll(); - for (int idump = 0; idump < ndump; idump++) { if (next_dump[idump] == ntimestep) { if (dump[idump]->clearstep || every_dump[idump] == 0) @@ -321,12 +317,9 @@ void Output::write(bigint ntimestep) // next_restart does not force output on last step of run // for toggle = 0, replace "*" with current timestep in restart filename - // download data from GPU if necessary // eval of variable may invoke computes so wrap with clear/add if (next_restart == ntimestep) { - if (lmp->cuda && !lmp->cuda->oncpu) lmp->cuda->downloadAll(); - if (next_restart_single == ntimestep) { char *file = new char[strlen(restart1) + 16]; char *ptr = strchr(restart1,'*'); diff --git a/src/pair.cpp b/src/pair.cpp index c169177ea9..a5e6d13451 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -34,7 +34,6 @@ #include "update.h" #include "modify.h" #include "compute.h" -#include "accelerator_cuda.h" #include "suffix.h" #include "atom_masks.h" #include "memory.h" @@ -99,7 +98,7 @@ Pair::Pair(LAMMPS *lmp) : Pointers(lmp) num_tally_compute = 0; list_tally_compute = NULL; - // CUDA and KOKKOS per-fix data masks + // KOKKOS per-fix data masks datamask = ALL_MASK; datamask_ext = ALL_MASK; @@ -810,8 +809,6 @@ void Pair::ev_setup(int eflag, int vflag) if (vflag_atom == 0) vflag_either = 0; if (vflag_either == 0 && eflag_either == 0) evflag = 0; } else vflag_fdotr = 0; - - if (lmp->cuda) lmp->cuda->evsetup_eatom_vatom(eflag_atom,vflag_atom); } /* ---------------------------------------------------------------------- diff --git a/src/pair_table.cpp b/src/pair_table.cpp index 71b4d49b5f..06afdff78f 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -63,6 +63,7 @@ void PairTable::compute(int eflag, int vflag) int i,j,ii,jj,inum,jnum,itype,jtype,itable; double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; double rsq,factor_lj,fraction,value,a,b; + char estr[128]; int *ilist,*jlist,*numneigh,**firstneigh; Table *tb; @@ -109,25 +110,37 @@ void PairTable::compute(int eflag, int vflag) if (rsq < cutsq[itype][jtype]) { tb = &tables[tabindex[itype][jtype]]; - if (rsq < tb->innersq) - error->one(FLERR,"Pair distance < table inner cutoff"); + if (rsq < tb->innersq) { + sprintf(estr,"Pair distance < table inner cutoff: " + "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); + error->one(FLERR,estr); + } if (tabstyle == LOOKUP) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) - error->one(FLERR,"Pair distance > table outer cutoff"); + if (itable >= tlm1) { + sprintf(estr,"Pair distance > table outer cutoff: " + "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); + error->one(FLERR,estr); + } fpair = factor_lj * tb->f[itable]; } else if (tabstyle == LINEAR) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) - error->one(FLERR,"Pair distance > table outer cutoff"); + if (itable >= tlm1) { + sprintf(estr,"Pair distance > table outer cutoff: " + "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); + error->one(FLERR,estr); + } fraction = (rsq - tb->rsq[itable]) * tb->invdelta; value = tb->f[itable] + fraction*tb->df[itable]; fpair = factor_lj * value; } else if (tabstyle == SPLINE) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) - error->one(FLERR,"Pair distance > table outer cutoff"); + if (itable >= tlm1) { + sprintf(estr,"Pair distance > table outer cutoff: " + "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); + error->one(FLERR,estr); + } b = (rsq - tb->rsq[itable]) * tb->invdelta; a = 1.0 - b; value = a * tb->f[itable] + b * tb->f[itable+1] + diff --git a/src/replicate.cpp b/src/replicate.cpp index 941ec32492..e2ed718f65 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -116,9 +116,9 @@ void Replicate::command(int narg, char **arg) // also set atomKK for Kokkos version of Atom class Atom *old = atom; - if (lmp->kokkos) atom = new AtomKokkos(lmp); + atomKK = NULL; + if (lmp->kokkos) atom = atomKK = new AtomKokkos(lmp); else atom = new Atom(lmp); - atomKK = (AtomKokkos*) atom; atom->settings(old); atom->create_avec(old->atom_style,old->avec->nargcopy,old->avec->argcopy,0); diff --git a/src/set.cpp b/src/set.cpp index 37a0e815c4..56fbf42e54 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -430,8 +430,12 @@ void Set::command(int narg, char **arg) } else if (strcmp(arg[iarg],"dpd/theta") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal set command"); - if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1); - else dvalue = force->numeric(FLERR,arg[iarg+1]); + if (strcmp(arg[iarg+1],"NULL") == 0) dvalue = -1.0; + else if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1); + else { + dvalue = force->numeric(FLERR,arg[iarg+1]); + if (dvalue < 0.0) error->all(FLERR,"Illegal set command"); + } if (!atom->dpd_flag) error->all(FLERR,"Cannot set dpd/theta for this atom style"); set(DPDTHETA); @@ -632,7 +636,20 @@ void Set::set(int keyword) atom->rmass[i] = atom->vfrac[i] * dvalue; } else if (keyword == SMD_CONTACT_RADIUS) atom->contact_radius[i] = dvalue; - else if (keyword == DPDTHETA) atom->dpdTheta[i] = dvalue; + + else if (keyword == DPDTHETA) { + if (dvalue >= 0.0) atom->dpdTheta[i] = dvalue; + else { + double onemass; + if (atom->rmass) onemass = atom->rmass[i]; + else onemass = atom->mass[atom->type[i]]; + double vx = atom->v[i][0]; + double vy = atom->v[i][1]; + double vz = atom->v[i][2]; + double tfactor = force->mvv2e / (domain->dimension * force->boltz); + atom->dpdTheta[i] = tfactor * onemass * (vx*vx + vy*vy + vz*vz); + } + } // set shape of ellipsoidal particle diff --git a/src/update.cpp b/src/update.cpp index f53acbed3a..8bb5bca487 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -85,16 +85,6 @@ Update::~Update() void Update::init() { - // if USER-CUDA mode is enabled: - // integrate/minimize style must be CUDA variant - - if (whichflag == 1 && lmp->cuda) - if (strstr(integrate_style,"cuda") == NULL) - error->all(FLERR,"USER-CUDA mode requires CUDA variant of run style"); - if (whichflag == 2 && lmp->cuda) - if (strstr(minimize_style,"cuda") == NULL) - error->all(FLERR,"USER-CUDA mode requires CUDA variant of min style"); - // init the appropriate integrate and/or minimize class // if neither (e.g. from write_restart) then just return diff --git a/src/version.h b/src/version.h index 1442566de6..a8bab7b23b 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "14 May 2016" +#define LAMMPS_VERSION "8 Jun 2016" diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000000..67d25d8834 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +log.*-* diff --git a/tools/msi2lmp/frc_files/clayff.frc b/tools/msi2lmp/frc_files/clayff.frc index bdc9c2c004..6072bea792 100644 --- a/tools/msi2lmp/frc_files/clayff.frc +++ b/tools/msi2lmp/frc_files/clayff.frc @@ -2,34 +2,36 @@ #atom_types cvff -!Ver Ref Type Mass Element Connections Comment +!Ver Ref Type Mass Element Connections Description and charge !---- --- ---- ---------- ------- ----------------------------------------- - 1.0 1 st 28.08550 Si 4 - 1.0 1 ao 26.98154 Al 6 - 1.0 1 at 26.98154 Al 4 - 1.0 1 mgo 24.30500 Mg 6 - 1.0 1 cao 40.08000 Ca 6 - 1.0 1 feo 55.84700 Fe 6 - 1.0 1 lio 6.941000 Li 6 - 1.0 1 ob 15.99940 O 2 - 1.0 1 obss 15.99940 O 3 - 1.0 1 obts 15.99940 O 2 - 1.0 1 obos 15.99940 O 2 - 1.0 1 ohs 15.99940 O 2 - 1.0 1 oh 15.99940 O 2 - 1.0 1 oh- 15.99940 O 1 - 1.0 1 o* 15.99940 O 2 - 1.0 1 ho 1.007970 H 1 - 1.0 1 h* 1.007970 H 1 - 1.0 1 Na 22.99000 Na 0 - 1.0 1 K 39.10 K 0 - 1.0 1 Cs 132.9100 Cs 0 - 1.0 1 Ca 40.07980 Ca 0 - 1.0 1 Ba 137.3300 Ba 0 - 1.0 1 Mg 24.3050 Mg 0 - 1.0 1 Sr 87.6200 Sr 0 - 1.0 1 Pb 207.2000 Pb 0 - 1.0 1 Cl 35.45300 Cl 0 + 1.0 1 st 28.08550 Si 4 tetrahedral silicon 2.1 + 1.0 1 ao 26.98154 Al 6 octahedral aluminum 1.575 + 1.0 1 at 26.98154 Al 4 tetrahedral aluminum 1.575 + 1.0 1 mgo 24.30500 Mg 6 octahedral magnesium 1.36 + 1.0 1 mgh 24.30500 Mg 6 hydroxide magnesium 1.05 + 1.0 1 cao 40.08000 Ca 6 octahedral calcium 1.36 + 1.0 1 cah 40.08000 Ca 6 hydroxide calcium 1.05 + 1.0 1 feo 55.84700 Fe 6 octahedral iron 1.575 + 1.0 1 lio 6.941000 Li 6 octahedral lithium 0.525 + 1.0 1 ob 15.99940 O 2 bridging oxygen -1.05 + 1.0 1 obss 15.99940 O 3 oxygen double sub. -1.2996 + 1.0 1 obts 15.99940 O 2 oxygen tet. sub. -1.1688 + 1.0 1 obos 15.99940 O 2 oxygen oct. sub. -1.1808 + 1.0 1 ohs 15.99940 O 2 hydroxyl O sub. -1.0808 + 1.0 1 oh 15.99940 O 2 hydroxyl O -0.95 + 1.0 1 oh- 15.99940 O 1 hydroxide O + 1.0 1 o* 15.99940 O 2 spc water O -0.82 + 1.0 1 ho 1.007970 H 1 hydroxyl H 0.425 + 1.0 1 h* 1.007970 H 1 spc water H 0.41 + 1.0 1 Na 22.99000 Na 0 sodium ion 1.0 + 1.0 1 K 39.10 K 0 potassium ion 1.0 + 1.0 1 Cs 132.9100 Cs 0 cesium ion 1.0 + 1.0 1 Ca 40.07980 Ca 0 calcium ion 2.0 + 1.0 1 Ba 137.3300 Ba 0 barium ion 2.0 + 1.0 1 Mg 24.3050 Mg 0 magnesium ion 2.0 + 1.0 1 Sr 87.6200 Sr 0 strontium ion 2.0 + 1.0 1 Pb 207.2000 Pb 0 lead ion 2.0 + 1.0 1 Cl 35.45300 Cl 0 chloride ion -1.0 #equivalence cvff @@ -74,6 +76,7 @@ !Ver Ref I J R0 K2 !---- --- ---- ---- ------- -------- + 2.1 28 o* h* 1.0000 553.9350 2.1 28 oh ho 1.0000 553.9350 2.1 28 ohs ho 1.0000 553.9350 @@ -84,7 +87,7 @@ !Ver Ref I J K Theta0 K2 !---- --- ---- ---- ---- -------- ------- - 2.3 23 cp cp c' 120.0000 34.6799 + 1.0 1 h* o* h* 109.4700 45.7530 @@ -122,7 +125,9 @@ 1.0 1 ao 196.1446 0.03230 1.0 1 at 12.3645 0.00954 1.0 1 mgo 1636.3265 0.07688 + 1.0 1 mgh 1636.3265 0.07688 1.0 1 cao 17814.73 0.5987 + 1.0 1 cah 17624.076 0.595 1.0 1 feo 702.54 0.0504 1.0 1 lio 112.01 0.0201 1.0 1 ob 629358.0000 625.50000
    msm (o) msm/cg (o)
    pppm (cgo)
    pppm (go) pppm/cg (o) pppm/disp pppm/disp/tip4p
    crack crack propagation in a 2d solid
    cudause of the USER-CUDA package for GPU acceleration
    deposit
    deposit deposit atoms and molecules on a surface
    dipole
    dipole point dipolar particles, 2d system
    dreiding
    dreiding methanol via Dreiding FF
    eim
    eim NaCl using the EIM potential
    ellipse
    ellipse ellipsoidal particles in spherical solvent, 2d system
    flow
    flow Couette and Poiseuille flow in a 2d channel
    friction
    friction frictional contact of spherical asperities between 2d surfaces
    hugoniostat
    hugoniostat Hugoniostat shock dynamics
    indent
    indent spherical indenter into a 2d solid
    kim
    kim use of potentials in Knowledge Base for Interatomic Models (KIM)
    meam
    meam MEAM test for SiC and shear (same as shear examples)
    melt
    melt rapid melt of 3d LJ system
    micelle
    micelle self-assembly of small lipid-like molecules into 2d bilayers
    min
    min energy minimization of 2d LJ melt
    msst
    msst MSST shock dynamics
    nb3b
    nb3b use of nonbonded 3-body harmonic pair style
    neb
    neb nudged elastic band (NEB) calculation for barrier finding
    nemd
    nemd non-equilibrium MD of 2d sheared system
    obstacle
    obstacle flow around two voids in a 2d channel
    peptide
    peptide dynamics of a small solvated peptide chain (5-mer)
    peri
    peri Peridynamic model of cylinder impacted by indenter
    pour
    pour pouring of granular particles into a 3d box, then chute flow
    prd
    prd parallel replica dynamics of vacancy diffusion in bulk Si
    python
    python using embedded Python in a LAMMPS input script
    qeq
    qeq use of the QEQ package for charge equilibration
    reax
    reax RDX and TATB models using the ReaxFF
    rigid
    rigid rigid bodies modeled as independent or coupled
    shear
    shear sideways shear applied to 2d solid, with and without a void
    snap
    snap NVE dynamics for BCC tantalum crystal using SNAP potential
    srd
    srd stochastic rotation dynamics (SRD) particles as solvent
    streitz
    streitz use of Streitz/Mintmire potential with charge equilibration
    tad
    tad temperature-accelerated dynamics of vacancy diffusion in bulk Si
    vashishta
    vashishta use of the Vashishta potential
    colvars lib/colvars
    USER-CUDANVIDIA GPU stylesChristian Trott (U Tech Ilmenau)Section accelerateUSER/cuda
      -
    • -
    -
    lib/cuda
    USER-DIFFRACTION
    USER-DIFFRACTION virutal x-ray and electron diffraction Shawn Coleman (ARL) compute xrd
    USER-DPDdissipative particle dynamics (DPD)
    USER-DPDreactive dissipative particle dynamics (DPD) Larentzos & Mattox & Brennan (5) src/USER-DPD/README USER/dpd
    USER-DRUDE
    USER-DRUDE Drude oscillators Dequidt & Devemy & Padua (3) tutorial
    USER-EFF
    USER-EFF electron force field Andres Jaramillo-Botero (Caltech) pair_style eff/cut
    USER-FEP
    USER-FEP free energy perturbation Agilio Padua (U Blaise Pascal Clermont-Ferrand) compute fep
    USER-H5MD
    USER-H5MD dump output via HDF5 Pierre de Buyl (KU Leuven) dump h5md lib/h5md
    USER-INTEL
    USER-INTEL Vectorized CPU and Intel(R) coprocessor styles
    1. Michael Brown (Intel)
    2. @@ -1720,7 +1707,7 @@ src/Make.py -h -voronoi” to see the details.

    USER-LB
    USER-LB Lattice Boltzmann fluid Colin Denniston (U Western Ontario) fix lb/fluid
    USER-MGPT
    USER-MGPT fast MGPT multi-ion potentials Tomas Oppelstrup & John Moriarty (LLNL) pair_style mgpt
    USER-MISC
    USER-MISC single-file contributions USER-MISC/README USER-MISC/README
    USER-MANIFOLD
    USER-MANIFOLD motion on 2d surface Stefan Paquay (Eindhoven U of Technology) fix manifoldforce
    USER-MOLFILE
    USER-MOLFILE VMD molfile plug-ins Axel Kohlmeyer (Temple U) dump molfile VMD-MOLFILE
    USER-OMP
    USER-OMP OpenMP threaded styles Axel Kohlmeyer (Temple U) Section accelerate
    USER-PHONON
    USER-PHONON phonon dynamical matrix Ling-Ti Kong (Shanghai Jiao Tong U) fix phonon
    USER-QMMM
    USER-QMMM QM/MM coupling Axel Kohlmeyer (Temple U) fix qmmm lib/qmmm
    USER-QTB
    USER-QTB quantum nuclear effects Yuan Shen (Stanford) fix qtb fix qbmsst
    USER-QUIP
    USER-QUIP QUIP/libatoms interface Albert Bartok-Partay (U Cambridge) pair_style quip lib/quip
    USER-REAXC
    USER-REAXC C version of ReaxFF Metin Aktulga (LBNL) pair_style reaxc
    USER-SMD
    USER-SMD smoothed Mach dynamics Georg Ganzenmuller (EMI) userguide.pdf
    USER-SMTBQ
    USER-SMTBQ Second Moment Tight Binding - QEq potential Salles & Maras & Politano & Tetot (4) pair_style smtbq
    USER-SPH
    USER-SPH smoothed particle hydrodynamics Georg Ganzenmuller (EMI) userguide.pdf
    USER-TALLY
    USER-TALLY Pairwise tallied computes Axel Kohlmeyer (Temple U) compute
    USER-VTK
    USER-VTK VTK-style dumps Berger and Queteschiner (6) compute custom/vtk lib/vtk
     
           
    fix nve/limit
    +
    fix nve/line
    @@ -1372,6 +1368,10 @@ +
    fix rx +
    + +
    fix saed/vtk
    @@ -1824,6 +1824,10 @@ +
    pair_style exp6/rx +
    + +
    pair_style gauss
    @@ -1915,12 +1919,12 @@
    pair_style lj/smooth/linear
    -
    pair_style lj96/cut
    +
    pair_style lubricate
    @@ -1950,6 +1954,10 @@ +
    pair_style multi/lucy/rx +
    + +
    pair_style nb3b/harmonic
    @@ -2050,6 +2058,10 @@ +
    pair_style table/rx +
    + +
    pair_style tersoff
    diff --git a/doc/html/improper_class2.html b/doc/html/improper_class2.html index f3fb9e5f0c..c6758cff97 100644 --- a/doc/html/improper_class2.html +++ b/doc/html/improper_class2.html @@ -196,16 +196,16 @@ listed under a “AngleAngle Coeffs” heading and you must leave out th

    The theta values are specified in degrees, but LAMMPS converts them to radians internally; hence the units of M are in energy/radian^2.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_cossq.html b/doc/html/improper_cossq.html index 723cf312d8..9a7aa85c8d 100644 --- a/doc/html/improper_cossq.html +++ b/doc/html/improper_cossq.html @@ -170,16 +170,16 @@ commands:

    X0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_cvff.html b/doc/html/improper_cvff.html index 8d96da8e31..186c5aa3e1 100644 --- a/doc/html/improper_cvff.html +++ b/doc/html/improper_cvff.html @@ -171,16 +171,16 @@ commands:

  • n (0,1,2,3,4,6)

  • -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_fourier.html b/doc/html/improper_fourier.html index f87a513de3..545282aa2a 100644 --- a/doc/html/improper_fourier.html +++ b/doc/html/improper_fourier.html @@ -163,16 +163,16 @@ commands:

  • all (integer >= 0)

  • -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_harmonic.html b/doc/html/improper_harmonic.html index 08fe536cde..d268c62014 100644 --- a/doc/html/improper_harmonic.html +++ b/doc/html/improper_harmonic.html @@ -176,16 +176,16 @@ commands:

    X0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_ring.html b/doc/html/improper_ring.html index 22449cebf3..aa3b557a57 100644 --- a/doc/html/improper_ring.html +++ b/doc/html/improper_ring.html @@ -174,16 +174,16 @@ commands:

    theta0 is specified in degrees, but LAMMPS converts it to radians internally; hence the units of K are in energy/radian^2.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/improper_umbrella.html b/doc/html/improper_umbrella.html index 41f7eeac34..f1fb943d5e 100644 --- a/doc/html/improper_umbrella.html +++ b/doc/html/improper_umbrella.html @@ -165,16 +165,16 @@ commands:

  • omega0 (degrees)

  • -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/kspace_style.html b/doc/html/kspace_style.html index dfd180b9c8..21938697de 100644 --- a/doc/html/kspace_style.html +++ b/doc/html/kspace_style.html @@ -369,7 +369,7 @@ options of the K-space solvers that can be set, including a force option for setting an absoulte RMS error in forces, as opposed to a relative RMS error.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate @@ -385,7 +385,7 @@ If pppm/gpu is used with a GPU-enabled pair style, part of the PPPM calculation can be performed concurrently on the GPU while other calculations for non-bonded and bonded force calculation are performed on the CPU.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, USER-OMP, and OPT packages respectively. They are only enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    See Section_accelerate of the manual for @@ -397,9 +397,9 @@ more instructions on how to use the accelerated styles effectively.

    metal (tinfoil) boundary conditions for both charge and dipole interactions. Vacuum boundary conditions are not currently supported.

    The ewald/disp, ewald, pppm, and msm styles support -non-orthogonal (triclinic symmetry) simulation boxes. However, triclinic -simulation cells may not yet be supported by suffix versions of these -styles (such as pppm/cuda).

    +non-orthogonal (triclinic symmetry) simulation boxes. However, +triclinic simulation cells may not yet be supported by suffix versions +of these styles.

    All of the kspace styles are part of the KSPACE package. They are only enabled if LAMMPS was built with that package. See the Making LAMMPS section for more info. Note that the KSPACE package is installed by default.

    diff --git a/doc/html/package.html b/doc/html/package.html index 5f676a479c..1179ad37be 100644 --- a/doc/html/package.html +++ b/doc/html/package.html @@ -132,26 +132,10 @@
      -
    • style = cuda or gpu or intel or kokkos or omp
    • +
    • style = gpu or intel or kokkos or omp
    • args = arguments specific to the style
    -cuda args = Ngpu keyword value ...
    -  Ngpu = # of GPUs per node
    -  zero or more keyword/value pairs may be appended
    -  keywords = newton or gpuID or timing or test or thread
    -    newton = off or on
    -      off = set Newton pairwise and bonded flags off (default)
    -      on = set Newton pairwise and bonded flags on
    -    gpuID values = gpu1 .. gpuN
    -      gpu1 .. gpuN = IDs of the Ngpu GPUs to use
    -    timing values = none
    -    test values = id
    -      id = atom-ID of a test particle
    -    thread = auto or tpa or bpa
    -      auto = test whether tpa or bpa is faster
    -      tpa = one thread per atom
    -      bpa = one block per atom
     gpu args = Ngpu keyword value ...
       Ngpu = # of GPUs per node
       zero or more keyword/value pairs may be appended
    @@ -229,8 +213,6 @@
     
    package gpu 1
     package gpu 1 split 0.75
     package gpu 2 split -1.0
    -package cuda 2 gpuID 0 2
    -package cuda 1 test 3948
     package kokkos neigh half comm device
     package omp 0 neigh no
     package omp 4
    @@ -243,8 +225,8 @@
     

    Description

    This command invokes package-specific settings for the various accelerator packages available in LAMMPS. Currently the following -packages use settings from this command: USER-CUDA, GPU, USER-INTEL, -KOKKOS, and USER-OMP.

    +packages use settings from this command: GPU, USER-INTEL, KOKKOS, and +USER-OMP.

    If this command is specified in an input script, it must be near the top of the script, before the simulation box has been defined. This is because it specifies settings that the accelerator packages use in @@ -258,10 +240,8 @@ in a simulation (LAMMPS can be built with an accelerator package without using it in a particular simulation). However, in all cases, a default version of the command is typically invoked by other accelerator settings.

    -

    The USER-CUDA and KOKKOS packages require a “-c on” or “-k on” -command-line switch respectively, which -invokes a “package cuda” or “package kokkos” command with default -settings.

    +

    The KOKKOS package requires a “-k on” command-line switch respectively, which invokes a +“package kokkos” command with default settings.

    For the GPU, USER-INTEL, and USER-OMP packages, if a “-sf gpu” or “-sf intel” or “-sf omp” command-line switch is used to auto-append accelerator suffixes to various styles in the @@ -281,52 +261,6 @@ across multiple invocations.

    manual for more details about using the various accelerator packages for speeding up LAMMPS simulations.


    -

    The cuda style invokes settings associated with the use of the -USER-CUDA package.

    -

    The Ngpus argument sets the number of GPUs per node. There must be -exactly one MPI task per GPU, as set by the mpirun or mpiexec command.

    -

    Optional keyword/value pairs can also be specified. Each has a -default value as listed below.

    -

    The newton keyword sets the Newton flags for pairwise and bonded -interactions to off or on, the same as the newton -command allows. The default is off because this will almost always -give better performance for the USER-CUDA package. This means -more computation is done, but less communication.

    -

    The gpuID keyword allows selection of which GPUs on each node will -be used for a simulation. GPU IDs range from 0 to N-1 where N is the -physical number of GPUs/node. An ID is specified for each of the -Ngpus being used. For example if you have three GPUs on a machine, -one of which is used for the X-Server (the GPU with the ID 1) while -the others (with IDs 0 and 2) are used for computations you would -specify:

    -
    package cuda 2 gpuID 0 2
    -
    -
    -

    The purpose of the gpuID keyword is to allow two (or more) -simulations to be run on one workstation. In that case one could set -the first simulation to use GPU 0 and the second to use GPU 1. This is -not necessary however, if the GPUs are in what is called compute -exclusive mode. Using that setting, every process will get its own -GPU automatically. This compute exclusive mode can be set as root -using the nvidia-smi tool which is part of the CUDA installation.

    -

    Also note that if the gpuID keyword is not used, the USER-CUDA -package sorts existing GPUs on each node according to their number of -multiprocessors. This way, compute GPUs will be priorized over -X-Server GPUs.

    -

    If the timing keyword is specified, detailed timing information for -various subroutines will be output.

    -

    If the test keyword is specified, information for the specified atom -with atom-ID will be output at several points during each timestep. -This is mainly usefull for debugging purposes. Note that the -simulation slow down dramatically if this option is used.

    -

    The thread keyword can be used to specify how GPU threads are -assigned work during pair style force evaluation. If the value = -tpa, one thread per atom is used. If the value = bpa, one block -per atom is used. If the value = auto, a short test is performed at -the beginning of each run to determing where tpa or bpa mode is -faster. The result of this test is output. Since auto is the -default value, it is usually not necessary to use this keyword.

    -

    The gpu style invokes settings associated with the use of the GPU package.

    The Ngpu argument sets the number of GPUs per node. There must be @@ -652,8 +586,6 @@ within its own pages.

    Restrictions

    This command cannot be used after the simulation box is defined by a read_data or create_box command.

    -

    The cuda style of this command can only be invoked if LAMMPS was built -with the USER-CUDA package. See the Making LAMMPS section for more info.

    The gpu style of this command can only be invoked if LAMMPS was built with the GPU package. See the Making LAMMPS section for more info.

    The intel style of this command can only be invoked if LAMMPS was @@ -669,12 +601,6 @@ with the USER-OMP package. See the

    Default

    -

    For the USER-CUDA package, the default is Ngpu = 1 and the option -defaults are newton = off, gpuID = 0 to Ngpu-1, timing = not enabled, -test = not enabled, and thread = auto. These settings are made -automatically by the required “-c on” command-line switch. You can change them bu using the -package cuda command in your input script or via the “-pk cuda” -command-line switch.

    For the GPU package, the default is Ngpu = 1 and the option defaults are neigh = yes, newton = off, binsize = 0.0, split = 1.0, gpuID = 0 to Ngpu-1, tpa = 1, and device = not used. These settings are made diff --git a/doc/html/pair_adp.html b/doc/html/pair_adp.html index c239f589fd..c38bbab6b5 100644 --- a/doc/html/pair_adp.html +++ b/doc/html/pair_adp.html @@ -232,16 +232,16 @@ same order with the same assumptions of symmetry. Directly following the u(r), the w(r) arrays are listed. Note that phi(r) is the only array tabulated with a scaling by r.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_airebo.html b/doc/html/pair_airebo.html index 75cc429e45..503da5ef6a 100644 --- a/doc/html/pair_airebo.html +++ b/doc/html/pair_airebo.html @@ -263,17 +263,34 @@ paper. Thus the parameters are specific to this potential and the way it was fit, so modifying the file should be done cautiously. The AIREBO-M Morse potentials were parameterized using a cutoff of 3.0 (sigma). Modifying this cutoff may impact simulation accuracy.

    +

    This pair style tallies a breakdown of the total AIREBO potential +energy into sub-categories, which can be accessed via the compute pair command as a vector of values of length 3. +The 3 values correspond to the following sub-categories:

    +
      +
    1. E_REBO = REBO energy
    2. +
    3. E_LJ = Lennard-Jones energy
    4. +
    5. E_TORSION = Torsion energy
    6. +
    +

    To print these quantities to the log file (with descriptive column +headings) the following commands could be included in an input script:

    +
    compute 0 all pair airebo
    +variable REBO     equal c_0[1]
    +variable LJ       equal c_0[2]
    +variable TORSION  equal c_0[3]
    +thermo_style custom step temp epair v_REBO v_LJ v_TORSION
    +
    +

    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_beck.html b/doc/html/pair_beck.html index 606689cf47..10325668e8 100644 --- a/doc/html/pair_beck.html +++ b/doc/html/pair_beck.html @@ -171,16 +171,16 @@ commands.

    The last coefficient is optional. If not specified, the global cutoff Rc is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_born.html b/doc/html/pair_born.html index a1ff6e2477..3740bb4699 100644 --- a/doc/html/pair_born.html +++ b/doc/html/pair_born.html @@ -139,9 +139,6 @@

    pair_style born/coul/long/cs command

    -
    -

    pair_style born/coul/long/cuda command

    -

    pair_style born/coul/long/gpu command

    @@ -261,16 +258,16 @@ cutoff specified in the pair_style command is used.

    specified for an individual I,J type pair. All type pairs use the same global Coulombic cutoff specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_brownian.html b/doc/html/pair_brownian.html index 0784b2b62b..f9c30b7b18 100644 --- a/doc/html/pair_brownian.html +++ b/doc/html/pair_brownian.html @@ -191,15 +191,15 @@ commands, or by mixing as described below:

    cutoffs specified in the pair_style command are used. Otherwise both must be specified.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in this section of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_buck.html b/doc/html/pair_buck.html index 13af08dbfd..58eccb8ce8 100644 --- a/doc/html/pair_buck.html +++ b/doc/html/pair_buck.html @@ -127,9 +127,6 @@

    pair_style buck command

    -
    -

    pair_style buck/cuda command

    -

    pair_style buck/gpu command

    @@ -145,9 +142,6 @@

    pair_style buck/coul/cut command

    -
    -

    pair_style buck/coul/cut/cuda command

    -

    pair_style buck/coul/cut/gpu command

    @@ -166,9 +160,6 @@

    pair_style buck/coul/long/cs command

    -
    -

    pair_style buck/coul/long/cuda command

    -

    pair_style buck/coul/long/gpu command

    @@ -295,16 +286,16 @@ Coulombic cutoff cannot be specified for an individual I,J type pair. All type pairs use the same global Coulombic cutoff specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_buck_long.html b/doc/html/pair_buck_long.html index 61d47d6fd7..a9e6b7e670 100644 --- a/doc/html/pair_buck_long.html +++ b/doc/html/pair_buck_long.html @@ -220,16 +220,16 @@ Similarly, if you are using flag_coul set to long, you cannot specify a Coulombic cutoff for an atom type pair, since only one global Coulombic cutoff is allowed.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_charmm.html b/doc/html/pair_charmm.html index f7311633d1..75994eddd2 100644 --- a/doc/html/pair_charmm.html +++ b/doc/html/pair_charmm.html @@ -127,27 +127,18 @@

    pair_style lj/charmm/coul/charmm command

    -
    -

    pair_style lj/charmm/coul/charmm/cuda command

    -

    pair_style lj/charmm/coul/charmm/omp command

    pair_style lj/charmm/coul/charmm/implicit command

    -
    -

    pair_style lj/charmm/coul/charmm/implicit/cuda command

    -

    pair_style lj/charmm/coul/charmm/implicit/omp command

    pair_style lj/charmm/coul/long command

    -
    -

    pair_style lj/charmm/coul/long/cuda command

    -

    pair_style lj/charmm/coul/long/gpu command

    @@ -266,16 +257,16 @@ because this CHARMM force field does not allow varying cutoffs for individual atom pairs; all pairs use the global cutoff(s) specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_class2.html b/doc/html/pair_class2.html index d1f5e991eb..5e62dd99ef 100644 --- a/doc/html/pair_class2.html +++ b/doc/html/pair_class2.html @@ -127,9 +127,6 @@

    pair_style lj/class2 command

    -
    -

    pair_style lj/class2/cuda command

    -

    pair_style lj/class2/gpu command

    @@ -142,9 +139,6 @@

    pair_style lj/class2/coul/cut command

    -
    -

    pair_style lj/class2/coul/cut/cuda command

    -

    pair_style lj/class2/coul/cut/kk command

    @@ -154,9 +148,6 @@

    pair_style lj/class2/coul/long command

    -
    -

    pair_style lj/class2/coul/long/cuda command

    -

    pair_style lj/class2/coul/long/gpu command

    @@ -244,16 +235,16 @@ by the p for epsilon and sigma. However it is still followed for mixing the cutoff distance.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_coeff.html b/doc/html/pair_coeff.html index eac6bd4a7e..1689bf6047 100644 --- a/doc/html/pair_coeff.html +++ b/doc/html/pair_coeff.html @@ -223,7 +223,7 @@ for

    Windows:

    -% set LAMMPS_POTENTIALS="C:Path to LAMMPSPotentials"
    +% set LAMMPS_POTENTIALS="C:\Path to LAMMPS\Potentials"
     

    The alphabetic list of pair styles defined in LAMMPS is given on the diff --git a/doc/html/pair_colloid.html b/doc/html/pair_colloid.html index c2ebb155b5..c4254f1606 100644 --- a/doc/html/pair_colloid.html +++ b/doc/html/pair_colloid.html @@ -236,16 +236,16 @@ commands for efficiency: comm_modify multi.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_comb.html b/doc/html/pair_comb.html index 2c1cd6006e..d7ca86f242 100644 --- a/doc/html/pair_comb.html +++ b/doc/html/pair_comb.html @@ -227,16 +227,16 @@ has not yet been implemented, it can only set polar_off at present.

    nor file ffield.comb3 with style comb.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_coul.html b/doc/html/pair_coul.html index 74722e0d45..1df9e6791a 100644 --- a/doc/html/pair_coul.html +++ b/doc/html/pair_coul.html @@ -412,16 +412,16 @@ individual I,J type pair via the pair_coeff command. All type pairs use the same global Coulombic cutoff specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_dipole.html b/doc/html/pair_dipole.html index 02978c0f02..2325cfa256 100644 --- a/doc/html/pair_dipole.html +++ b/doc/html/pair_dipole.html @@ -297,16 +297,16 @@ and Coulombic interactions for this type pair. If both coefficients are specified, they are used as the LJ and Coulombic cutoffs for this type pair.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_dpd.html b/doc/html/pair_dpd.html index 004357aa20..f605baaa87 100644 --- a/doc/html/pair_dpd.html +++ b/doc/html/pair_dpd.html @@ -232,16 +232,16 @@ includes all the components of force listed above, including the random force.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_dpd_fdt.html b/doc/html/pair_dpd_fdt.html index b6e8ee534e..a06112c8fc 100644 --- a/doc/html/pair_dpd_fdt.html +++ b/doc/html/pair_dpd_fdt.html @@ -227,8 +227,8 @@ specified.


    Restrictions

    -

    Pair styles dpd/fdt and dpd/fdt/energy are only available if -LAMMPS is built with the USER-DPD package.

    +

    These commands are part of the USER-DPD package. They are only +enabled if LAMMPS was built with that package. See the Making LAMMPS section for more info.

    Pair styles dpd/fdt and dpd/fdt/energy require use of the communicate vel yes option so that velocites are stored by ghost atoms.

    diff --git a/doc/html/pair_eam.html b/doc/html/pair_eam.html index e124e41a2c..81abf57a5a 100644 --- a/doc/html/pair_eam.html +++ b/doc/html/pair_eam.html @@ -127,9 +127,6 @@

    pair_style eam command

    -
    -

    pair_style eam/cuda command

    -

    pair_style eam/gpu command

    @@ -145,9 +142,6 @@

    pair_style eam/alloy command

    -
    -

    pair_style eam/alloy/cuda command

    -

    pair_style eam/alloy/gpu command

    @@ -169,9 +163,6 @@

    pair_style eam/fs command

    -
    -

    pair_style eam/fs/cuda command

    -

    pair_style eam/fs/gpu command

    @@ -499,16 +490,16 @@ eV-Angstroms) as in EAM setfl files. Note that in Finnis/Sinclair, the phi(r) arrays are still symmetric, so only phi arrays for i >= j are listed.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_edip.html b/doc/html/pair_edip.html index 2fb3eff597..8c9d9ccdee 100644 --- a/doc/html/pair_edip.html +++ b/doc/html/pair_edip.html @@ -213,16 +213,16 @@ multi-element EDIP parametrizations. If you know any and you are interest in that, please contact the author of the EDIP package.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_eim.html b/doc/html/pair_eim.html index d5a7dc508d..62c5a4a918 100644 --- a/doc/html/pair_eim.html +++ b/doc/html/pair_eim.html @@ -241,16 +241,16 @@ r_(s,psi), and p.

    The lines in the file can be in any order; LAMMPS extracts the info it needs.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_exp6_rx.html b/doc/html/pair_exp6_rx.html new file mode 100644 index 0000000000..6bd4ae6865 --- /dev/null +++ b/doc/html/pair_exp6_rx.html @@ -0,0 +1,290 @@ + + + + + + + + + + + pair_style exp6/rx command — LAMMPS documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + +
    +
    +
    + +
    + +
    +
    +
    + +
    +

    pair_style exp6/rx command

    +
    +

    Syntax

    +
    pair_style exp6/rx cutoff
    +
    +
    +
      +
    • cutoff = global cutoff for DPD interactions (distance units)
    • +
    +
    +
    +

    Examples

    +
    pair_style exp6/rx 10.0
    +pair_coeff * * exp6.params h2o h2o 1.0 1.0 10.0
    +pair_coeff * * exp6.params h2o 1fluid 1.0 1.0 10.0
    +pair_coeff * * exp6.params 1fluid 1fluid 1.0 1.0 10.0
    +
    +
    +
    +
    +

    Description

    +

    Style exp6/rx is used in reaction DPD simulations, where the +coarse-grained (CG) particles are composed of m species whose +reaction rate kinetics are determined from a set of n reaction rate +equations through the fix rx command. The species of +one CG particle can interact with a species in a neighboring CG +particle through a site-site interaction potential model. The +exp6/rx style computes an exponential-6 potential given by

    +_images/pair_exp6_rx.jpg +

    where the epsilon parameter determines the depth of the potential +minimum located at Rm, and alpha determines the softness of the repulsion.

    +

    The coefficients must be defined for each species in a given particle +type via the pair_coeff command as in the examples +above, where the first argument is the filename that includes the +exponential-6 parameters for each species. The file includes the +species tag followed by the alpha, epsilon and Rm +parameters. The format of the file is described below.

    +

    The second and third arguments specify the site-site interaction +potential between two species contained within two different +particles. The species tags must either correspond to the species +defined in the reaction kinetics files specified with the fix rx command or they must correspond to the tag “1fluid”, +signifying interaction with a product species mixture determined +through a one-fluid approximation. The interaction potential is +weighted by the geometric average of the concentrations of the two +species. The coarse-grained potential is stored before and after the +reaction kinetics solver is applied, where the difference is defined +to be the internal chemical energy (uChem).

    +

    The fourth and fifth arguments specify the Rm and epsilon scaling exponents.

    +

    The final argument specifies the interaction cutoff.

    +
    +

    The format of a tabulated file is as follows (without the +parenthesized comments):

    +
    # exponential-6 parameters for various species      (one or more comment or blank lines)
    +
    +
    +
    h2o  exp6  11.00 0.02 3.50                          (species, exp6, alpha, Rm, epsilon)
    +no2  exp6  13.60 0.01 3.70
    +...
    +co2  exp6  13.00 0.03 3.20
    +
    +
    +

    A section begins with a non-blank line whose 1st character is not a +“#”; blank lines or lines starting with “#” can be used as comments +between sections.

    +

    Following a blank line, the next N lines list the species and their +corresponding parameters. The first argument is the species tag, the +second argument is the exp6 tag, the 3rd argument is the alpha +parameter (energy units), the 4th argument is the epsilon parameter +(energy-distance^6 units), and the 5th argument is the Rm parameter +(distance units). If a species tag of “1fluid” is listed as a pair +coefficient, a one-fluid approximation is specified where a +concentration-dependent combination of the parameters is computed +through the following equations:

    +_images/pair_exp6_rx_oneFluid.jpg +

    where

    +_images/pair_exp6_rx_oneFluid2.jpg +

    and xa and xb are the mole fractions of a and b, respectively, which +comprise the gas mixture.

    +
    +

    Mixing, shift, table, tail correction, restart, rRESPA info:

    +

    This pair style does not support mixing. Thus, coefficients for all +I,J pairs must be specified explicitly.

    +

    This style does not support the pair_modify shift option +for the energy of the exp() and 1/r^6 portion of the pair interaction.

    +

    This style does not support the pair_modify tail option for adding long-range +tail corrections to energy and pressure for the A,C terms in the +pair interaction.

    +
    +
    +

    Restrictions

    +

    This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the Making LAMMPS section for more info.

    +
    + +
    + + +
    +
    +
    + + +
    + +
    +

    + © Copyright 2013 Sandia Corporation. +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/pair_gauss.html b/doc/html/pair_gauss.html index 096c780c8f..2f167476f8 100644 --- a/doc/html/pair_gauss.html +++ b/doc/html/pair_gauss.html @@ -201,16 +201,16 @@ commands:

    The global cutoff (r_c) specified in the pair_style command is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the “-suffix command-line switch7_Section_start.html#start_6 when you invoke LAMMPS, or you can diff --git a/doc/html/pair_gayberne.html b/doc/html/pair_gayberne.html index e921cb0dfd..297c77802a 100644 --- a/doc/html/pair_gayberne.html +++ b/doc/html/pair_gayberne.html @@ -244,16 +244,16 @@ requires finite-size particles. In this case you should still set the pair_coeff sigma to 1.0 as well.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_gran.html b/doc/html/pair_gran.html index bf99a7b3c5..bec3b65d76 100644 --- a/doc/html/pair_gran.html +++ b/doc/html/pair_gran.html @@ -127,9 +127,6 @@

    pair_style gran/hooke command

    -
    -

    pair_style gran/cuda command

    -

    pair_style gran/omp command

    @@ -294,16 +291,16 @@ potential is used as a sub-style of -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_gromacs.html b/doc/html/pair_gromacs.html index bbaf1fd31f..7cc3aee2ce 100644 --- a/doc/html/pair_gromacs.html +++ b/doc/html/pair_gromacs.html @@ -127,9 +127,6 @@

    pair_style lj/gromacs command

    -
    -

    pair_style lj/gromacs/cuda command

    -

    pair_style lj/gromacs/gpu command

    @@ -139,9 +136,6 @@

    pair_style lj/gromacs/coul/gromacs command

    -
    -

    pair_style lj/gromacs/coul/gromacs/cuda command

    -

    pair_style lj/gromacs/coul/gromacs/omp command

    @@ -220,16 +214,16 @@ are used.

    varying cutoffs for individual atom pairs; all pairs use the global cutoff(s) specified in the pair_style command.


    -

    Styles intel, kk, with a cuda, gpu, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_hbond_dreiding.html b/doc/html/pair_hbond_dreiding.html index 090f404892..659f637dec 100644 --- a/doc/html/pair_hbond_dreiding.html +++ b/doc/html/pair_hbond_dreiding.html @@ -284,16 +284,16 @@ in the pair_style command are used. If you wish to only override the 2nd or 3rd optional parameter, you must also specify the preceding optional parameters.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_hybrid.html b/doc/html/pair_hybrid.html index a35731e1f8..afe0cebcd6 100644 --- a/doc/html/pair_hybrid.html +++ b/doc/html/pair_hybrid.html @@ -416,17 +416,17 @@ interactions, you would need to modify the SiC.tersoff file to turn off C/C interaction, i.e. by setting the appropriate coefficients to 0.0.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual.

    -

    Since the hybrid and hybrid/overlay styles delegate computation -to the individual sub-styles, the suffix versions of the hybrid -and hybrid/overlay styles are used to propagate the corresponding -suffix to all sub-styles, if those versions exist. Otherwise the +

    Since the hybrid and hybrid/overlay styles delegate computation to +the individual sub-styles, the suffix versions of the hybrid and +hybrid/overlay styles are used to propagate the corresponding suffix +to all sub-styles, if those versions exist. Otherwise the non-accelerated version will be used.

    -

    The individual accelerated sub-styles are part of the USER-CUDA, GPU, +

    The individual accelerated sub-styles are part of the GPU, USER-OMP and OPT packages, respectively. They are only enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    diff --git a/doc/html/pair_lj.html b/doc/html/pair_lj.html index 8c46db48e5..fd46ab5d3b 100644 --- a/doc/html/pair_lj.html +++ b/doc/html/pair_lj.html @@ -127,9 +127,6 @@

    pair_style lj/cut command

    -
    -

    pair_style lj/cut/cuda command

    -

    pair_style lj/cut/gpu command

    @@ -148,9 +145,6 @@

    pair_style lj/cut/coul/cut command

    -
    -

    pair_style lj/cut/coul/cut/cuda command

    -

    pair_style lj/cut/coul/cut/gpu command

    @@ -160,9 +154,6 @@

    pair_style lj/cut/coul/debye command

    -
    -

    pair_style lj/cut/coul/debye/cuda command

    -

    pair_style lj/cut/coul/debye/gpu command

    @@ -190,9 +181,6 @@

    pair_style lj/cut/coul/long/cs command

    -
    -

    pair_style lj/cut/coul/long/cuda command

    -

    pair_style lj/cut/coul/long/gpu command

    @@ -423,16 +411,16 @@ Coulombic cutoff cannot be specified for an individual I,J type pair. All type pairs use the same global Coulombic cutoff specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj96.html b/doc/html/pair_lj96.html index bd3237ad13..25b68df4b4 100644 --- a/doc/html/pair_lj96.html +++ b/doc/html/pair_lj96.html @@ -127,9 +127,6 @@

    pair_style lj96/cut command

    -
    -

    pair_style lj96/cut/cuda command

    -

    pair_style lj96/cut/gpu command

    @@ -171,16 +168,16 @@ commands, or by mixing as described below:

    The last coefficient is optional. If not specified, the global LJ cutoff specified in the pair_style command is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_cubic.html b/doc/html/pair_lj_cubic.html index 317f3935c9..6032650397 100644 --- a/doc/html/pair_lj_cubic.html +++ b/doc/html/pair_lj_cubic.html @@ -180,16 +180,16 @@ distance for the potential, not as the energy minimum, which is located at rmin = 2^(1/6)*sigma. In the above example, sigma = 0.8908987, so rmin = 1.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_expand.html b/doc/html/pair_lj_expand.html index d3dd86bcf0..fef3f21c46 100644 --- a/doc/html/pair_lj_expand.html +++ b/doc/html/pair_lj_expand.html @@ -127,9 +127,6 @@

    pair_style lj/expand command

    -
    -

    pair_style lj/expand/cuda command

    -

    pair_style lj/expand/gpu command

    @@ -175,16 +172,16 @@ commands, or by mixing as described below:

    The delta values can be positive or negative. The last coefficient is optional. If not specified, the global LJ cutoff is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_long.html b/doc/html/pair_lj_long.html index 727673c45e..fd2fa29241 100644 --- a/doc/html/pair_lj_long.html +++ b/doc/html/pair_lj_long.html @@ -272,16 +272,16 @@ since a Coulombic cutoff cannot be specified for an individual I,J type pair. All type pairs use the same global Coulombic cutoff specified in the pair_style command.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_sf.html b/doc/html/pair_lj_sf.html index 0d8a1cc8b6..8505d91cf5 100644 --- a/doc/html/pair_lj_sf.html +++ b/doc/html/pair_lj_sf.html @@ -165,16 +165,16 @@ commands, or by mixing as described below:

    The last coefficient is optional. If not specified, the global LJ cutoff specified in the pair_style command is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_smooth.html b/doc/html/pair_lj_smooth.html index 4792980269..22565da2d7 100644 --- a/doc/html/pair_lj_smooth.html +++ b/doc/html/pair_lj_smooth.html @@ -127,9 +127,6 @@

    pair_style lj/smooth command

    -
    -

    pair_style lj/smooth/cuda command

    -

    pair_style lj/smooth/omp command

    @@ -183,16 +180,16 @@ commands, or by mixing as described below:

    The last 2 coefficients are optional inner and outer cutoffs. If not specified, the global values for Rin and Rc are used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_smooth_linear.html b/doc/html/pair_lj_smooth_linear.html index e14f14488f..f19e28551e 100644 --- a/doc/html/pair_lj_smooth_linear.html +++ b/doc/html/pair_lj_smooth_linear.html @@ -166,16 +166,16 @@ commands, or by mixing as described below:

    The last coefficient is optional. If not specified, the global value for Rc is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lj_soft.html b/doc/html/pair_lj_soft.html index 6aea2cac6c..e253536083 100644 --- a/doc/html/pair_lj_soft.html +++ b/doc/html/pair_lj_soft.html @@ -350,16 +350,16 @@ Waals site is present during the free-energy route, thus avoiding overlap of the charges. Examples are provided in the LAMMPS source directory tree, under examples/USER/fep.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_lubricate.html b/doc/html/pair_lubricate.html index a0a35125e2..2cae3906c3 100644 --- a/doc/html/pair_lubricate.html +++ b/doc/html/pair_lubricate.html @@ -250,15 +250,15 @@ commands, or by mixing as described below:

    cutoffs specified in the pair_style command are used. Otherwise both must be specified.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in this section of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_meam_spline.html b/doc/html/pair_meam_spline.html index f7affcc5da..04957d08ca 100644 --- a/doc/html/pair_meam_spline.html +++ b/doc/html/pair_meam_spline.html @@ -196,16 +196,16 @@ potentials.

    MEAM potentials. It may be extended for alloy systems in the future.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_modify.html b/doc/html/pair_modify.html index 21313080f0..fe24147bb1 100644 --- a/doc/html/pair_modify.html +++ b/doc/html/pair_modify.html @@ -228,7 +228,7 @@ see the doc page for individual styles to see which potentials support these options. If N is non-zero, a table of length 2^N is pre-computed for forces and energies, which can shrink their computational cost by up to a factor of 2. The table is indexed via a -bit-mapping technique (Wolff) and a linear interpolation is +bit-mapping technique (Wolff) and a linear interpolation is performed between adjacent table values. In our experiments with different table styles (lookup, linear, spline), this method typically gave the best performance in terms of speed and accuracy.

    diff --git a/doc/html/pair_morse.html b/doc/html/pair_morse.html index 2269493041..bac9a4aa44 100644 --- a/doc/html/pair_morse.html +++ b/doc/html/pair_morse.html @@ -127,9 +127,6 @@

    pair_style morse command

    -
    -

    pair_style morse/cuda command

    -

    pair_style morse/gpu command

    @@ -144,21 +141,38 @@

    pair_style morse/smooth/linear/omp command

    +
    +
    +

    pair_style morse/soft command

    Syntax

    -
    pair_style morse cutoff
    +
    pair_style style args
     
      -
    • cutoff = global cutoff for Morse interactions (distance units)
    • +
    • style = morse or morse/smooth/linear or morse/soft
    • +
    • args = list of arguments for a particular style
    +
    +morse args = cutoff
    +  cutoff = global cutoff for Morse interactions (distance units)
    +morse/smooth/linear args = cutoff
    +  cutoff = global cutoff for Morse interactions (distance units)
    +morse/soft args = n lf cutoff
    +  n = soft-core parameter
    +  lf      = transformation range is lf < lambda < 1
    +  cutoff  = global cutoff for Morse interactions (distance units)
    +

    Examples

    -
    pair_style morse 2.5
    -pair_style morse/smooth/linear 2.5
    -pair_coeff * * 100.0 2.0 1.5
    -pair_coeff 1 1 100.0 2.0 1.5 3.0
    +

    pair_style morse 2.5 +pair_style morse/smooth/linear 2.5 +pair_coeff * * 100.0 2.0 1.5 +pair_coeff 1 1 100.0 2.0 1.5 3.0

    +
    pair_style morse/soft 4 0.9 10.0
    +pair_coeff * * 100.0 2.0 1.5 1.0
    +pair_coeff 1 1 100.0 2.0 1.5 1.0 3.0
     
    @@ -177,27 +191,44 @@ commands:

  • alpha (1/distance units)
  • r0 (distance units)
  • cutoff (distance units)
  • -
  • The last coefficient is optional. If not specified, the global morse
  • -
  • cutoff is used.
  • +

    The last coefficient is optional. If not specified, the global morse +cutoff is used.


    -

    The smooth/linear variant is similar to the lj/smooth/linear variant -in that it adds to the potential a shift and a linear term to make both -the potential energy and force go to zero at the cut-off:

    +

    The morse/smooth/linear variant is similar to the lj/smooth/linear +variant in that it adds to the potential a shift and a linear term +so that both, potential energy and force, go to zero at the cut-off:

    _images/pair_morse_smooth_linear.jpg

    The syntax of the pair_style and pair_coeff commands are the same for the morse and morse/smooth/linear styles.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    The morse/soft variant is similar to the lj/cut/soft pair style +in that it modifies the potential at short range to have a soft core. +This helps to avoid singularities during free energy calculation in +which sites are created or anihilated. The formula differs from that +of lj/cut/soft, and is instead given by:

    +_images/pair_morse_soft.jpg +

    The morse/soft style requires the following pair coefficients:

    +
      +
    • D0 (energy units)
    • +
    • alpha (1/distance units)
    • +
    • r0 (distance units)
    • +
    • lamda (unitless, between 0.0 and 1.0)
    • +
    • cutoff (distance units)
    • +
    +

    The last coefficient is optional. If not specified, the global morse +cutoff is used.

    +
    +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    @@ -225,6 +256,8 @@ to be specified in an input script that reads a restart file.

    Restrictions

    The morse/smooth/linear pair style is only enabled if LAMMPS was built with the USER-MISC package. See the Making LAMMPS section for more info.

    +

    The morse/soft pair style is only enabled if LAMMPS was built with +the USER-FEP package. See the Making LAMMPS section for more info.

    Description

    -

    Style multi/lucy computes a density-dependent force following from the many-body -form described in (Moore) and (Warren) as

    +

    Style multi/lucy computes a density-dependent force following from +the many-body form described in (Moore) and +(Warren) as

    _images/pair_multi_lucy.jpg -

    which consists of a density-dependent function, A(rho), and a radial-dependent weight -function, omegaDD(rij). The radial-dependent weight function, omegaDD(rij), is taken -as the Lucy function:

    +

    which consists of a density-dependent function, A(rho), and a +radial-dependent weight function, omegaDD(rij). The radial-dependent +weight function, omegaDD(rij), is taken as the Lucy function:

    _images/pair_multi_lucy2.jpg

    The density-dependent energy for a given particle is given by:

    _images/pair_multi_lucy_energy.jpg -

    See the supporting information of (Brennan) or the publication by (Moore) -for more details on the functional form.

    -

    An interpolation table is used to evaluate the density-dependent energy (Integral(A(rho)drho) and force (A(rho)). -Note that the pre-factor to the energy is computed after the interpolation, thus the Integral(A(rho)drho will -have units of energy / length^4.

    -

    The interpolation table is created as a pre-computation by fitting cubic splines to -the file values and interpolating the density-dependent energy and force at each of N densities. -During a simulation, the tables are used to interpolate the density-dependent energy and force as -needed for each pair of particles separated by a distance R. The interpolation is done in -one of 2 styles: lookup and linear.

    -

    For the lookup style, the density is used to find the nearest table entry, which is the -density-dependent energy and force.

    -

    For the linear style, the density is used to find the 2 surrounding table values from -which the density-dependent energy and force are computed by linear interpolation.

    +

    See the supporting information of (Brennan) or the +publication by (Moore) for more details on the functional +form.

    +

    An interpolation table is used to evaluate the density-dependent +energy (Integral(A(rho)drho) and force (A(rho)). Note that the +pre-factor to the energy is computed after the interpolation, thus the +Integral(A(rho)drho will have units of energy / length^4.

    +

    The interpolation table is created as a pre-computation by fitting +cubic splines to the file values and interpolating the +density-dependent energy and force at each of N densities. During a +simulation, the tables are used to interpolate the density-dependent +energy and force as needed for each pair of particles separated by a +distance R. The interpolation is done in one of 2 styles: lookup +and linear.

    +

    For the lookup style, the density is used to find the nearest table +entry, which is the density-dependent energy and force.

    +

    For the linear style, the density is used to find the 2 surrounding +table values from which the density-dependent energy and force are +computed by linear interpolation.

    The following coefficients must be defined for each pair of atoms types via the pair_coeff command as in the examples above.

    @@ -176,13 +182,14 @@ above.

  • keyword
  • cutoff (distance units)
  • -

    The filename specifies a file containing the tabulated density-dependent -energy and force. The keyword specifies a section of the file. -The cutoff is an optional coefficient. If not specified, the outer cutoff in the -table itself (see below) will be used to build an interpolation table -that extend to the largest tabulated distance. If specified, only -file values up to the cutoff are used to create the interpolation -table. The format of this file is described below.

    +

    The filename specifies a file containing the tabulated +density-dependent energy and force. The keyword specifies a section +of the file. The cutoff is an optional coefficient. If not +specified, the outer cutoff in the table itself (see below) will be +used to build an interpolation table that extend to the largest +tabulated distance. If specified, only file values up to the cutoff +are used to create the interpolation table. The format of this file +is described below.


    The format of a tabulated file is a series of one or more sections, defined as follows (without the parenthesized comments):

    @@ -208,19 +215,19 @@ for the table. Each parameter is a keyword followed by one or more numeric values.

    The parameter “N” is required and its value is the number of table entries that follow. Note that this may be different than the N -specified in the pair_style multi/lucy command. Let -Ntable = N in the pair_style command, and Nfile = “N” in the +specified in the pair_style multi/lucy command. +Let Ntable = N in the pair_style command, and Nfile = “N” in the tabulated file. What LAMMPS does is a preliminary interpolation by creating splines using the Nfile tabulated values as nodal points. It -uses these to interpolate the density-dependent energy and force at Ntable different -points. The resulting tables of length Ntable are then used as -described above, when computing the density-dependent energy and force. -This means that if you want the interpolation tables of -length Ntable to match exactly what is in the tabulated file (with -effectively no preliminary interpolation), you should set Ntable = -Nfile, and use the “RSQ” parameter. This is because the -internal table abscissa is always RSQ (separation distance squared), -for efficient lookup.

    +uses these to interpolate the density-dependent energy and force at +Ntable different points. The resulting tables of length Ntable are +then used as described above, when computing the density-dependent +energy and force. This means that if you want the interpolation +tables of length Ntable to match exactly what is in the tabulated file +(with effectively no preliminary interpolation), you should set Ntable += Nfile, and use the “RSQ” parameter. This is because the internal +table abscissa is always RSQ (separation distance squared), for +efficient lookup.

    All other parameters are optional. If “R” or “RSQ” does not appear, then the distances in each line of the table are used as-is to perform spline interpolation. In this case, the table values @@ -270,8 +277,8 @@ commands do need to be specified in the restart input script.


    Restrictions

    -
    -
    none
    +

    This command is part of the USER-DPD package. It is only enabled if +LAMMPS was built with that package. See the Making LAMMPS section for more info.

    Examples

    @@ -294,16 +291,16 @@ cross-interaction.) Tersoff files are also provided for the SiC alloy for helping clarify how Tersoff parameters for alloys have been defined in various papers.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_tersoff_mod.html b/doc/html/pair_tersoff_mod.html index 856bfc9164..b88d02ee18 100644 --- a/doc/html/pair_tersoff_mod.html +++ b/doc/html/pair_tersoff_mod.html @@ -232,16 +232,16 @@ the center atom in a three-body interaction and it is bonded to the 2nd atom and the bond is influenced by the 3rd atom. Thus an entry for SiSiSi means Si bonded to a Si with another Si atom influencing the bond.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_tersoff_zbl.html b/doc/html/pair_tersoff_zbl.html index ff73e73a26..90e840acc3 100644 --- a/doc/html/pair_tersoff_zbl.html +++ b/doc/html/pair_tersoff_zbl.html @@ -294,16 +294,16 @@ for helping clarify how Tersoff parameters for alloys have been defined in various papers. Also thanks to Ram Devanathan for providing the base ZBL implementation.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_thole.html b/doc/html/pair_thole.html index 1ae49a473d..a6baecd4b6 100644 --- a/doc/html/pair_thole.html +++ b/doc/html/pair_thole.html @@ -239,16 +239,16 @@ command.

    The last two coefficients are optional and default to the global values from the pair_style command line.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_vashishta.html b/doc/html/pair_vashishta.html index d51c88db97..0bfaceb06c 100644 --- a/doc/html/pair_vashishta.html +++ b/doc/html/pair_vashishta.html @@ -265,16 +265,16 @@ central C atom bonded to an Si atom and a second C atom will take three-body parameters from the CSiC entry, but two-body parameters from the CCC and CSiSi entries.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_yukawa.html b/doc/html/pair_yukawa.html index d147fd8d50..826c7de7ff 100644 --- a/doc/html/pair_yukawa.html +++ b/doc/html/pair_yukawa.html @@ -167,16 +167,16 @@ commands, or by mixing as described below:

    The last coefficient is optional. If not specified, the global yukawa cutoff is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_yukawa_colloid.html b/doc/html/pair_yukawa_colloid.html index bf84b65743..560d253325 100644 --- a/doc/html/pair_yukawa_colloid.html +++ b/doc/html/pair_yukawa_colloid.html @@ -196,16 +196,16 @@ potentials, i.e. less than about 25 mV, A can be written as:

    The last coefficient is optional. If not specified, the global yukawa/colloid cutoff is used.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/pair_zbl.html b/doc/html/pair_zbl.html index c89c72b595..71b3bea35c 100644 --- a/doc/html/pair_zbl.html +++ b/doc/html/pair_zbl.html @@ -191,16 +191,16 @@ always be given as multiples of a proton’s charge, e.g. 29.0 for copper.


    -

    Styles with a cuda, gpu, intel, kk, omp, or opt suffix are +

    Styles with a gpu, intel, kk, omp, or opt suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in Section_accelerate of the manual. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues.

    -

    These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL, -KOKKOS, USER-OMP and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    +

    These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the Making LAMMPS section for more info.

    You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke LAMMPS, or you can use the suffix command in your input script.

    diff --git a/doc/html/prd.html b/doc/html/prd.html index 9beb23e9ec..ee0c7948c0 100644 --- a/doc/html/prd.html +++ b/doc/html/prd.html @@ -379,7 +379,8 @@ produce identical results due to changes in the random numbers used for dephasing.

    This command cannot be used when any fixes are defined that keep track of elapsed time to perform time-dependent operations. Examples -include the “ave” fixes such as fix ave/spatial. Also fix dt/reset and fix deposit.

    +include the “ave” fixes such as fix ave/chunk. +Also fix dt/reset and fix deposit.

    @@ -463,8 +465,16 @@ prevent different individual physical bodies from penetrating each other. Note that the SPH smoothing kernel diameter used for computing long range, nonlocal interactions, is set using the diameter keyword.

    -

    Keyword dpd/theta sets the internal temperature of a DPD particle -as defined by the USER-DPD package.

    +

    Keyword dpd/theta sets the internal temperature of a DPD particle as +defined by the USER-DPD package. If the specified value is a number +it must be >= 0.0. If the specified value is NULL, then the kinetic +temperature Tkin of each particle is computed as 3/2 k Tkin = KE = 1/2 +m v^2 = 1/2 m (vx*vx+vy*vy+vz*vz). Each particle’s internal +temperature is set to Tkin. If the specified value is an atom-style +variable, then the variable is evaluated for each particle. If a +value >= 0.0, the internal temperature is set to that value. If it is +< 0.0, the computation of Tkin is performed and the internal +temperature is set to that value.

    Keywords i_name and d_name refer to custom integer and floating-point properties that have been added to each atom via the fix property/atom command. When that command diff --git a/doc/html/suffix.html b/doc/html/suffix.html index c250df9e49..bb59c1d280 100644 --- a/doc/html/suffix.html +++ b/doc/html/suffix.html @@ -132,7 +132,7 @@

      -
    • style = off or on or cuda or gpu or intel or kk or omp or opt or hybrid
    • +
    • style = off or on or gpu or intel or kk or omp or opt or hybrid
    • args = for hybrid style, default suffix to be used and alternative suffix
    @@ -152,17 +152,14 @@

    This command allows you to use variants of various styles if they exist. In that respect it operates the same as the -suffix command-line switch. It also has options to turn off or back on any suffix setting made via the command line.

    -

    The specified style can be cuda, gpu, intel, kk, omp, opt -or hybrid. These refer to optional packages that LAMMPS can be built -with, as described in this section of the manual. The “cuda” style corresponds to -the USER-CUDA package, the “gpu” style to the GPU package, the “intel” -style to the USER-INTEL package, the “kk” style to the KOKKOS package, -the “omp” style to the USER-OMP package, and the “opt” style to the -OPT package.

    +

    The specified style can be gpu, intel, kk, omp, opt or +hybrid. These refer to optional packages that LAMMPS can be built +with, as described in this section of the manual. The “gpu” style corresponds to +the GPU package, the “intel” style to the USER-INTEL package, the “kk” +style to the KOKKOS package, the “omp” style to the USER-OMP package, +and the “opt” style to the OPT package.

    These are the variants these packages provide:

      -
    • USER-CUDA = a collection of atom, pair, fix, compute, and intergrate -styles, optimized to run on one or more NVIDIA GPUs
    • GPU = a handful of pair styles and the PPPM kspace_style, optimized to run on one or more GPUs or multicore CPU/GPU nodes
    • USER-INTEL = a collection of pair styles and neighbor routines @@ -179,11 +176,11 @@ performance
    • HYBRID = a combination of two packages can be specified (see below)

    As an example, all of the packages provide a pair_style lj/cut variant, with style names lj/cut/opt, lj/cut/omp, -lj/cut/gpu, lj/cut/intel, lj/cut/cuda, or lj/cut/kk. A variant styles +lj/cut/gpu, lj/cut/intel, or lj/cut/kk. A variant styles can be specified explicitly in your input script, e.g. pair_style lj/cut/gpu. If the suffix command is used with the appropriate style, you do not need to modify your input script. The specified suffix -(opt,omp,gpu,intel,cuda,kk) is automatically appended whenever your +(opt,omp,gpu,intel,kk) is automatically appended whenever your input script command creates a new atom, pair, bond, angle, dihedral, diff --git a/doc/html/tad.html b/doc/html/tad.html index 2a1108bdc1..d4f05d75ae 100644 --- a/doc/html/tad.html +++ b/doc/html/tad.html @@ -376,7 +376,8 @@ exact restarts. So fix langevin will not.

    This command cannot be used when any fixes are defined that keep track of elapsed time to perform time-dependent operations. Examples -include the “ave” fixes such as fix ave/spatial. Also fix dt/reset and fix deposit.

    +include the “ave” fixes such as fix ave/chunk. +Also fix dt/reset and fix deposit.

    +
    -

    Making an account

    +

    Making an account

    First of all, you need a GitHub account. This is fairly simple, just go to GitHub and create an account by clicking the ``Sign up for GitHub’’ button. Once your account is created, you @@ -143,7 +145,7 @@ username or e-mail address and password.


    -

    Forking the repository

    +

    Forking the repository

    To get changes into LAMMPS, you need to first fork the repository. At the time of writing, LAMMPS-ICMS is the preferred fork. Go to LAMMPS on GitHub and make sure branch is set to ``lammps-icms’‘, see the figure below.

    @@ -158,11 +160,9 @@ can include changes from upstream into your repository.


    -

    Adding changes to your own fork

    +

    Adding changes to your own fork

    Before adding changes, it is better to first create a new branch that will contain these changes, a so-called feature branch.

    -
    -

    Feature branches

    Since LAMMPS is such a big project and most user contributions come in @@ -210,6 +210,8 @@ $ git add doc/fix_manifoldforce.txt doc/user_manifolds.txt

    The “-m” switch is used to add a message to the commit. Use this to indicate what type of change was commited.

    +
    +

    Wisdom by Axel:

    “Do not use “git commit -a”. the -a flag will automatically include *all modified or new files. mercurial does that and it find it hugely annoying and often leading to accidental commits of files you @@ -260,16 +262,19 @@ is now up to the maintainer(s) of the upstream repository to incorporate the changes into the repository and to close the pull request.

    _images/tutorial_pull_request4.png +
    + +
    -

    Additional changes

    +

    Additional changes

    Before the pull request is accepted, any additional changes you push into your repository will automatically become part of the pull request.


    -

    After a merge

    +

    After a merge

    When everything is fine the feature branch is merged into the LAMMPS repositories:

    _images/tutorial_merged.png @@ -293,8 +298,6 @@ to your remote(s) as well:

    $ git push origin :add-user-manifold
     
    -
    - diff --git a/doc/html/variable.html b/doc/html/variable.html index 2f94e06923..1250ca06d3 100644 --- a/doc/html/variable.html +++ b/doc/html/variable.html @@ -168,7 +168,7 @@ constants = PI, version, on, off, true, false, yes, no thermo keywords = vol, ke, press, etc from thermo_style math operators = (), -x, x+y, x-y, x*y, x/y, x^y, x%y, - x == y, x != y, x &lt y, x &lt= y, x &gt y, x &gt= y, x && y, x || y, !x + x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x math functions = sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x) @@ -536,36 +536,33 @@ references, and references to other variables.

    vol, pe, ebond, etc
    Math operators(), -x, x+y, x-y, x*y, x/y, x^y, x%y,(), -x, x+y, x-y, x*y, x/y, x^y, x%y, x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x
    Math operators(), -x, x+y, x-y, x*y, x/y, x^y, x%y, x == y, x != y, x &lt y, x &lt= y, x &gt y, x &gt= y, x && y, x || y, !x
    Math functions
    Math functions sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), logfreq2(x,y,z), stride(x,y,z), stride2(x,y,z,a,b,c), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
    Group functions
    Group functions count(ID), mass(ID), charge(ID), xcm(ID,dim), vcm(ID,dim), fcm(ID,dim), bound(ID,dir), gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), inertia(ID,dimdim), omega(ID,dim)
    Region functions
    Region functions count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR)
    Special functions
    Special functions sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)
    Atom values
    Atom values id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
    Atom vectors
    Atom vectors id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
    Compute references
    Compute references c_ID, c_ID[i], c_ID[i][j], C_ID, C_ID[i]
    Fix references
    Fix references f_ID, f_ID[i], f_ID[i][j], F_ID, F_ID[i]
    Other variables
    Other variables v_name, v_name[i]